1.はじめに
IoTデバイスデータの収集や計測を行う等のリアルタイム性の高いシステムを構築する場合、
LambdaよりEC2を利用した方がコストメリットが大きくなる場合があると聞きますが、
どのくらいの規模からコストが逆転するのか?疑問だったので試算してみました。
今回は、ストレージやデータ通信の料金は含まず、
EC2 または Lambdaを利用した場合のコンピューティング料金だけに焦点を当て考えてみます。
2.比較方法
次の2つのアーキテクチャについてコンピューティング料金を試算することでコスト比較を行ってみたいと思います。
① EC2 構成
※Lambdaと同等の可用性を確保するという前提条件でEC2はマルチAZ構成とします。
② Lambda 構成
3.コスト試算
① EC2 コスト
汎用ワークロード向けのM5インスタンスを利用した場合の月額コストを試算してみます。
月額コスト = 時間単価(※1) x 24時間 x 30日 x 2インスタンス(※2)
※1 オンデマンド料金
※2 マルチAZ構成
インスタンス名 | vCPU | メモリ | 時間単価 | 月額(マルチAZ) |
---|---|---|---|---|
m5.large | 2 | 8GiB | 0.124USD | 178.56USD |
m5.xlarge | 4 | 16GiB | 0.248USD | 357.12USD |
m5.2xlarge | 8 | 32GiB | 0.496USD | 714.24USD |
m5.4xlarge | 16 | 64GiB | 0.992USD | 1428.48USD |
m5.8xlarge | 32 | 128GiB | 1.984USD | 2856.96USD |
EC2料金:https://aws.amazon.com/jp/ec2/pricing/on-demand/
② Lambda コスト
Lambda実行時間 = 200ms/リクエスト とした場合の月額コストを試算してみます。
月額コスト = リクエスト料金(※1) + 実行時間料金(※2)
※1 リクエスト料金 = リクエスト単価 x リクエスト数 / 100万リクエスト
※2 実行時間料金 = 時間単価 x 実行時間 x Lambdaメモリ / 1024MB
リクエスト数 | 月額(128MB) | 月額(256MB) | 月額(512MB) |
---|---|---|---|
100 RPS | 159.9USD | 267.9USD | 483.9USD |
200 RPS | 319.7USD | 535.7USD | 967.7USD |
300 RPS | 479.6USD | 803.6USD | 1451.6USD |
400 RPS | 639.4USD | 1071.4USD | 1935.4USD |
500 RPS | 799.3USD | 1339.3USD | 2419.3USD |
Lambda料金:https://aws.amazon.com/jp/lambda/pricing/
コスト比較
m5.2xlarge インスタンスで 300 RPS のデータを処理するケースで比較してみましょう。
Lambdaメモリが128MBの場合は、Lambdaコスト < EC2コストとなりますが、
Lambdaメモリが256MBの場合は、Lambdaコスト > EC2コストとなり、コストが逆転します。
Lambdaのコストとして大きな割合を占めるのが実行時間料金となる為、
Lambdaが常時実行される場合は、コンピューティング料金の割高感が否めない結果となりました。
逆に実行時間が短い場合は、Lambdaのメリットを最大限に活かすことが出来そうです。
各サービスの特徴を理解して選択することが重要ですね。
4.まとめ
Lambdaが常時実行されるようなユースケースの場合は、コンピューティング料金だけを比較するとEC2 より Lambdaの方が高額となる傾向にあると思います。
ただ、リアルタイム性の高いシステムでも1時間に1回通信をする等の場合は、Lambdaの実行時間が短くなる為、Labmdaの方がコストメリットがあると思います。
EC2 と Lambda を選択するときは、リクエスト頻度だけではなく実行時間を考慮して、アーキテクチャを選択することが重要だと思います。
今回は、EC2 と Lambda のコンピューティング料金に焦点を当て考えてみましたが、本当に前提条件が1つ異なるだけで違う結果になると思います。
一般的な事例だけで判断するのではなく、まずは一度比較検してみてはどうでしょうか?
個々のユースケースに応じてベストな選択は、きっと変わるはず!