はじめに

クラウドという言葉が出てきてから何年たったでしょうか。 7~8年前のクラウドといえばAWS上の仮想インスタンスを利用するIaaS「Infrastructure as a Service」といったモノが注目され、 オンプレミスにあった仮想サーバーや物理サーバーをこぞってクラウド上に移行していくムーブメントが起こりました。

いま現在では、IT業界でないビジネスパーソンにもクラウドという言葉が広く浸透していて、システム開発の現場となれば、ただクラウドにサーバーを移行するだけで納得してくれる人も少なくなり、かつ移行しただけでは、コスト面でもさほど変わらないか、場合によってはかえって高くなる等といった事から、クラウド忌避の風も吹いています。

そんな中、数年前からFaaS「Function as a Service」というクラウドならではの仕組みが表れ、いまではその利用が本格化しています。単純なサーバー単位の従量課金では無く、処理単位での重要課金となる事で真のクラウドメリットが享受できると言われています。

今回は、IaaSのその先、サーバーレスアーキテクチャとも呼ばれる、FaaSの代表的なサービスをいくつか例にとってコスト面での比較をしてみたいと思います。

サーバーレスな構成と、そうでない構成とでは、どういった違いがあるのか。どういう時にどちらを選択すべきなのか。また具体的にどれくらいのコスト削減が期待できるのか。といったことをまとめていきます。

サーバーレス 構成と今までの構成では何が違うのか?

まずはサーバーレスな構成図と、そうでない構成図(仮想サーバーを使った構成)を比較してみましょう。

AWS クラウド サーバーレス Amazon EC2 AWS Lambda
通常のIaaSを活用した構成図
AWS クラウド サーバーレス Amazon EC2 AWS Lambda

サーバーレスアーキテクチャを活用した構成図

サーバーレスでない構成図とサーバーレスな構成図の例

ここでは大局的な比較をしたいので、詳細な書き込みは避けています。
さて、左図と右図を比較するといくつかの相違点があることがわかります。
例えば…

  • 左図はElastic Load Balancingを利用しており、右図はAmazon API Gatewayを利用している。
  • 左図は複数のAZによって構成されているが、右図にはそういった記述が見当たらない。

といったことが挙げられます。上記の相違点もそうですが、ここで最も大きな相違点は左図では仮想サーバーサービスであるAmazon EC2を利用しており、右図ではAWS Lambdaを利用しているという点です。つまり、サーバーレスな構成とそうでない構成を考える時にEC2とLambdaの比較を行なうことでポイントが見えてきます。

Amazon EC2AWS Lambda

それではEC2とLambdaとでは具体的にどういった点が異なるのでしょうか。
主たるものとしては

  1. EC2は仮想サーバーの起動時間に対して料金が発生するが、Lambdaは関数実行回数に対して料金が発生する。
  2. EC2はアンマネージドサービスであり、Lambdaはフルマネージドサービスである。
  3. EC2は構築コストが掛かる反面、使いたいソフトウェアをご自身で導入できるなど、自由度が高い。
  4. Lambdaは関数の実行時間に制限がある。

といったことが挙げられるかと思います。1に関しては主にコスト面に、2は運用面に関わってきます。3と4は主に機能面に関わることであり、EC2を選択すべきなのかLambdaを利用したサーバーレスアーキテクチャを選択すべきなのか判断する材料になります。
技術トレンドとしてはサーバーレスアーキテクチャが取り上げられることが多いですが、現状ではどちらかのサービスの方が絶対的に優れているといったことはなく、システムで実現したいことを検討しながら選択することになります。

コスト面に関する比較

それではコスト面に着目してひとつひとつ見ていきましょう。

ここでは、この3つの観点で考えていきます。

初期費用

初期費用はEC2を利用する場合もLambdaを利用する場合も大きく変わりません。AWSをはじめとしたパブリッククラウドサービスは従量課金制を採用しているため、実際に構築(起動)を行なわない限り費用は発生しません。また、検証においてはAWSには無料枠というものがあり、それに収まる範囲内であれば料金は発生しません。したがって、原則、リソースを調達するための金銭的な初期費用は発生せず、人的コストのみ発生することになります。

ランニングコスト

ランニングコストは最も検討が必要な項目なので実際の計算結果を踏まえながら話を進めます。

  • Lambda計算条件
    • リクエスト数:月間2万リクエスト
    • 平均実行時間:0.5秒
    • メモリサイズ:512MB
    • 無料枠:考慮しない

上記の条件でLambdaを利用した時の料金を、公式ツールにて計算した結果が以下になります。

AWS クラウド サーバーレス Amazon EC2 AWS Lambda
AWS Lambda計算例

計算結果から、月に約0.08USDの料金が発生することがわかります。

同じ処理をEC2のt3.microインスタンスで処理出来たと仮定するとその料金は、0.0136USD/時間 × 24時間 × 30日 = 9.792USDとなり、月に約9.8USDの料金が発生することがわかります。
この結果だけを見ると圧倒的にLambdaの方がランニングコストにおいて優れているように思われます。
それでは、次に具体的に月に何リクエスト程度までならLambdaの方がコスト効率に優れているか。分析してみましょう。
分析条件は以下の通りです。

  • Lambda計算条件
    • リクエスト数:月間1万~1000万で推移
    • 平均実行時間:0.5秒
    • メモリサイス:512MB
    • 無料枠:考慮する
  • EC2計算条件

上記の条件により、Lambdaのリクエスト数を1万~1000万まで変動させながら計算したものが以下になります。

AWS クラウド サーバーレス Amazon EC2 AWS Lambda

縦軸は料金(USD)を表しており、横軸はリクエスト数を表しています。

Lambdaの平均実行時間とメモリを固定し、リクエスト数増加による料金推移を分析しました。
 この分析結果から分かるように、月間のリクエスト数が400万を超えたあたりで料金が逆転し、Lambdaの方がコスト効率が悪くなっていることがわかります。
 自分なりに他の資料も調査してみましたが、大体月間300~400万あたりで月間料金の逆転が起き、EC2のほうが高いコスト効率が期待できるようです。

ただし、実際の開発においてはLambdaであればAPI Gatewayの料金が、EC2であればELBなどの料金が加算されることになります。
以上を踏まると、月間のリクエスト数が数万~200万程度の比較的小規模なワークロードであればAWS Lambdaを採用したほうが高いコスト効率を期待できるということになります。

運用コスト

運用コストに関して最も考慮すべき点はEC2がアンマネージドサービスであり、Lambdaはフルマネージドサービスであるという点です。
このことを理解するためにまずはAWS責任共有モデルの説明をします。AWS責任共有モデルとはAWS側とユーザー側でセキュリティにおいて責任を負う部分が明確に分かれ、それぞれがセキュリティを守っていくことを言います。

通常のAWS責任共有モデル

AWS クラウド サーバーレス Amazon EC2 AWS Lambda

Lambdaにおける責任共有モデル

AWS責任共有モデルとAWS Lambdaにおける責任共有モデル

上図の左側がAWS責任共有モデルであり、右側が特にLambdaにおける責任共有モデルです。図からわかるように、Lambdaにおいてはユーザー側が責任を負う部分が少ないです。例えばEC2であれば仮想サーバーに導入したOSへのセキュリティパッチやユーザー管理などに対するセキュリティ責任を負うことになり、人的コストが発生しますが、Lambdaはフルマネージドサービスであり、そもそもOSを導入する必要がないため、運用コストが抑えられることが期待できます。

AWS Lambdaによるサーバーレスアーキテクチャはどんな時に有効?

このようにLambdaを中心にサーバーレスアーキテクチャを構築することにより、人的・金銭的なコスト削減が期待できます。
では具体的にどのような時にサーバーレスアーキテクチャを利用することが適しているのでしょうか?
具体的なユースケースとしては以下のようなものが挙げられます。

〇サーバーリソース・ログ監視
他サービスと連携することにより、サーバーリソースやエラーログ発生をトリガーに外部通知することが出来ます。

〇リアルタイムファイル処理
Amazon S3と組み合わせることにより、S3にデータがアップロードされたことをトリガーにし、直ちに処理を行なうことが出来ます。

〇リアルタイムストリーム処理
ストリーミングデータをAWS Lambdaと他サービスを利用することにより、アプリケーションアクティビティのトラッキングやログのフィルタリングが行えます。

ウェブアプリケーション
AWS Lambdaをはじめとしたマネージドサービスを中心にシステム構築することにより、スケールアップ・スケールダウンを自動で行われる可用性の高いウェブアプリケーションを構築できます。

基本的にはAWS Lambda単体で使用するのではなく、他サービスと組み合わせて使うことになります。したがってAWS Lambdaだけでなく、周辺サービス(API Gateway, DynamoDB)の理解や検討も必要になってきます。

おわりに

今回はAWSのサーバーレスアーキテクチャに着目し、代表的なサービスであるEC2との比較を行いながらコスト面を中心にまとめさせて頂きました。
最近のプロジェクトでは、サーバーレスのLambdaやAWS batch、Fargate等をアプリケーションの実行基盤として使う事が圧倒的に多く まずは、それらの使用を前提として検討をするところから始まる事がほとんどです。

LambdaでOpenCOBOLが使えたり、昨年末からはコンテナイメージが使えたりすることができるようになる等、今後は、基幹システムからの移行も増えてくるのではと思います。

読者の皆さんのクラウド利用に際しても、IaaSのみならず、トータルコストで優位性のあるサーバーレスアーキテクチャもご検討なさってみてはいかがでしょうか。