FaaS(Function as a Service)
当初、サーバレスという言葉は、バックエンドアプリケーションを動かすためのサーバのセットアップと管理を、開発者が気にする必要がないことを意味していました。これらバックエンドに配置されるインフラストラクチャサービスをBaaS(Backend as a Service)やmBaaS(mobile Backend as a service)などと呼んでいました。
しかしながら、AmazonがリリースしたLambda(※1)は当初、世に存在していたサーバレスアーキテクチャとは異なり、クラウド上で動かすアプリケーションに新しいアーキテクチャを取り入れたのです。それは至ってシンプルで、特定のイベントに応じて実行されるアプリケーションコードを書くだけで、実行するサーバのプロビジョニングやスケールについてはクラウドベンダが行ってくれるというものです。ユーザはコード実行に利用したリソース分のみ金額を支払えば良いのです。
今ではこれらの新しいサーバレスアーキテクチャサービスをFaaS(Function as a service)と呼び、Google Cloud Functions(※2)、Microsoft Azure Functions(※3)等多くのクラウドベンダがサービス提供しています。
- ※1 Lambda
https://aws.amazon.com/jp/lambda/(外部リンク) - ※2 Google Cloud Functions
https://cloud.google.com/functions/(外部リンク) - ※3 Microsoft Azure Functions
https://azure.microsoft.com/ja-jp/services/functions/(外部リンク)
FaaSのメリット
サーバーレスアプリケーションを実装するメリットについては、サーバリソースを保持する必要が無いため『コストの大幅な削減』、イベントに応じた実行リソースを自動で拡張してくれるため『高いスケーラビリティ』、そして『インフラリソースの運用管理が不要』となると言われています(※4)。つまり、ビジネス価値を生みにくい部分をサーバレスサービス提供ベンダへオフロード可能なのです。
これらのメリットにより、FaaSを利用することでサーバサイドやインフラがわからないフロントエンジニアがキャパシティやセキュリティを考慮せずにシステムを実装することが可能となります。インフラエンジニアの私としては脅威のサービスと言わざるを得ません。
我々のチームでは5年も前からIaaSを利用し大規模なシステムを数多く実現してきました、そこではInfrastructure as Code(※5)を駆使して大規模なクラウドリソースを一元管理し、自動構築可能なクラウド管理ソリューションも作成しましたがFaaSやSaaSだけでシステム化できればそのようなものは不要の産物となってしまいます。
- ※4 FaaSの3つのメリット
出展 Serverless Anti-patterns
https://www.slideshare.net/keisuke69/serverless-antipatterns?from_action=save(外部リンク) - ※5 Infrastructure as Code(インフラストラクチャーの構築・運用をコード化するもの)
イマ旬記事
http://www.nttdata.com/jp/ja/insights/trend_keyword/2013053001.html
図1:FaaSの3つのメリット
FaaSのデメリット
図2のような負荷特性をもつアプリケーションを動作させているとき、通常のIaaS利用の場合は一台分の費用がかかりますが、FaaS利用の場合は実行した時間と回数で課金されるため斜線部のコストカットが可能となります。
したがって、待機が多いシステムや負荷に緩急のあるシステムではFaaSを利用することで、TCOを半分以上も低減することが可能となります。
しかしながら、逆を言えば常にサーバ負荷が多いケースにおいてはこの限りではありません。また、FaaSには大きな落とし穴が多く潜んでいます。
例えば、FaaSは極小の単一アプリケーションに細分化する必要がありますが、この細分化に開発オーバヘッドがかかったり、インフラのリソース管理から開放されますが、その分多くのコードを管理する必要が発生したり、現時点でまだフレームワークが充実していないという点などが挙げられます。
昨今、「技術の開発や活用は、問題解決型やニーズドリブンで」というような「コンフォーマンスクオリティ」を第一とする考え方が広まりつつあります。しかし、ここで一度立ち止まり、人間一人ひとりが笑顔で過ごす毎日を実現するための「パフォーマンスクオリティ」にもっと目を向けた上で、新しい技術の開発や活用をしていくべきではないでしょうか。
図2:IaaSとFaaSコスト比較イメージ
FaaSの今後
FaaSはまだまだ未成熟であり、どのように使うか、使えるかなどServerlessConf(サーバレスアーキテクチャを用いたアプリケーションの構築における経験の共有を目的とした、コミュニティ主導でベンダーニュートラルな技術カンファレンス)やDevelopers Summit(技術者コミュニティとの連携から生まれた総合ITカンファレンス)(※6)など多くの場所で議論されております。これらの動向やServerless Framework(Serverless Inc.が作成しており、FaaSを利用したWeb、モバイル、IoT向けアプリケーションの構築を助けるオープンソースプロジェクト)(※7)の拡充なども注視しながら、FaaSの使い所を見極めることで、お客様に低コストでビジネススピードを加速させることのできる武器として提案することができるでしょう。
- ※6 ServerlessConfやDevelopers Summit
- ServerlessConf
http://tokyo.serverlessconf.io/(外部リンク) - Developers Summit
http://event.shoeisha.jp/devsumi(外部リンク)
- ServerlessConf
- ※7 Serverless Framework
https://github.com/serverless/serverlessl(外部リンク)