BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【AWS】サーバーレスアーキテクチャ導入によるコスト削減

はじめに

こんにちは!BFT名古屋支店の松野です。
今回はトレンドであるサーバーレスな構成とそうでない構成とではどういった違いがあり、どういう時にどちらを選択すべきなのか、また具体的にどれくらいのコスト削減が期待できるのかといったことをまとめていこうと思います!!
それではよろしくお願いします!!


サーバーレスとは何が違うのか?

まずはサーバーレスな構成図とそうでない構成図を比較してみましょう。

f:id:bftnagoya:20210121132839p:plainf:id:bftnagoya:20210121132848p:plain:w200
サーバーレスでない構成図とサーバーレスな構成図の例

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

  • 左図は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を利用した時の料金を、公式ツールにて計算した結果が以下になります。

f:id:bftnagoya:20210122134734p:plain
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万まで変動させながら計算したものが以下になります。

f:id:bftnagoya:20210122140032p:plain

縦軸は料金(USD)を表しており、横軸はリクエスト数を表しています。Lambdaの平均実行時間とメモリを固定し、リクエスト数増加による料金推移を分析しました。
 この分析結果から分かるように、月間のリクエスト数が400万を超えたあたりで料金が逆転し、Lambdaの方がコスト効率が悪くなっていることがわかります。
 自分なりに他の資料も調査してみましたが、大体月間300~400万あたりで月間料金の逆転が起き、EC2のほうが高いコスト効率が期待できるようです。ただし、実際の開発においてはLambdaであればAPI Gatewayの料金が、EC2であればELBなどの料金が加算されることになります。
以上を踏まると、月間のリクエスト数が数万~200万程度の比較的小規模なワークロードであればAWS Lambdaを採用したほうが高いコスト効率を期待できるということになります。

③運用コスト

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

f:id:bftnagoya:20210121173306p:plainf:id:bftnagoya:20210121175217p:plain
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との比較を行いながらコスト面を中心にまとめさせて頂きました。
書けば書くほど勉強不足だなと感じる日々ですが、少しでも読んでくれた方のお役に立てたなら幸いです。

参考文献

・サーバーレスアーキテクチャを採用する際のコストに対する重要な考え方

サーバーレスアーキテクチャを採用する際のコストに対する重要な考え方 | Serverless Operations

AWS Lambda Pricing: How Much it Costs to Run a Serverless Application?

AWS Lambda Pricing: How Much it Costs to Run a Serverless Application?

AWS Lambda vs EC2: Comparison of AWS Compute Resources

AWS Lambda vs EC2: Comparison of AWS Compute Resources