はじめに

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

そうした中、数年前からFaaS(Function as a Service)という、サーバーレスでアプリ開発ができるクラウドサービスが登場し、その利用が本格化して来ています。FaaSは単純なサーバー単位の従量課金では無く、処理単位での重要課金となるもので、クラウドならではの仕組みと言えます。

そこで今回は、「サーバーレスアーキテクチャ」とも呼ばれる、FaaSの代表的なサービスについて、コスト面での比較をしてみたいと思います。サーバーレスな構成とそうでない構成とではどういった違いがあるのか、どのサービスを選択すべきか、具体的にどれくらいのコスト削減が期待できるのか、といったことを紹介していきます。

従来の構成図とサーバーレスの構成図の主な違い

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

ここでは大局的な比較をしたいので詳細な書き込みは避けていますが、それぞれを比較するといくつかの相違点があることがわかります。例えば以下のようなものです。

  • 従来の構成図は「Elastic Load Balancing」を利用しており、サーバーレスの構成図は「Amazon API Gateway」を利用している。
  • 従来の構成図は複数のAZ(アベイラビリティゾーン)によって構成されているが、サーバーレスの構成図にはそういった記述が見当たらない。
  • 従来の構成図は仮想サーバーサービスであるAmazon EC2を利用しており、サーバーレスの構成図ではAWS Lambdaを利用している。

1に関しては主にコスト面に、2は運用面に関わってきます。3と4は主に機能面に関わることであり、Amazon EC2を選択すべきなのかAWS Lambdaを利用したサーバーレスアーキテクチャを選択すべきなのかを判断する材料になります。

技術トレンドとしてはサーバーレスアーキテクチャが取り上げられることが多いですが、現状ではどちらかのサービスの方が絶対的に優れているといったことはなく、システムで実現したい内容を検討しながら選択することになります。

Amazon EC2とAWS Lambdaの違い

では、Amazon EC2と AWS Lambdaとでは具体的にどのような点が異なるのでしょうか。主たるものは次の4点です。

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

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

コスト面に関する比較

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

  • 初期費用
  • ランニングコスト
  • 運用コスト

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

初期費用

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

ランニングコスト

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

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

上記の条件でAWS Lambdaを利用した時の料金を、公式ツールにて計算した結果が以下になります。計算結果から、月に約0.08USDの料金が発生することがわかります。

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

同じ処理をAmazon EC2のt3.microインスタンスで処理出来たと仮定するとその料金は、0.0136USD/時間 × 24時間 × 30日 = 9.792USDとなり、月に約9.8USDの料金が発生することがわかります。この結果だけを見ると圧倒的にAWS Lambdaの方がランニングコストにおいて優れているように思われます。

それでは、次に具体的に月に何リクエスト程度までならAWS Lambdaの方がコスト効率に優れているか。分析してみましょう。分析条件は以下の通りです。

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

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

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

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

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

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

サービス提供方式

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

通常のAWS責任共有モデル
AWS クラウド サーバーレス Amazon EC2 AWS Lambda
Lambdaにおける責任共有モデル

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

AWS Lambdaによるサーバーレスアーキテクチャのユースケース

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

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

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

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

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

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

おわりに

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

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