makotan _at_ gmail dot com

AWS LambdaのCPU料金が安いかどうか計算してみた

見た感じ非常に安く感じるので本当かどうか計算で確認してみることにした

ホストサーバの予想

モリー*CPUの課金でしかも動いているときにだけ課金する仕組みとしたばあい、メモリー容量の多い方が有利なはずなので
AWS Lambdaのホストサーバはr3.8xlargeと予想
Lambdaの料金形態がリージョンによって違わないので、とりあえず東京を選択
ということは
32 vCPU/244Gメモリー $1.4121 /1 時間 3年リザーブド スポットは$0.5036

計算対象

モリーを1536(1.5G)とすると、100msあたり0.000002501ドル

軸を合わせてみる

r3.8xlarge 32 vCPU/244Gメモリー $1.4121 /1 時間 3年リザーブド スポットは$0.5036
lambda 1 vCPU / 1.5G メモリー $ 0.090036 /1 時間(0.000002501*10*60*60)
lambda 32 vCPU / 48Gメモリー $2.881152/ 1 時間
lambda 162 vCPU / 244Gメモリー $ 14.5858.../ 1 時間(流石にこれはないか)
AWSの利益率がかなり高い事から考えて、EC2の原価は3年リザーブドよりスポットに近いはず
ということは、上手くマッピングを制御すれば普通のEC2より遙かに利益が出る!!

結論

普通の負荷が常時かかるようなサービスとかで使うならリザーブドとかスポットインスタンスを使ったEC2を立ち上げた方が安くなる
時々動くサービスやちょっとしたコマンドのためにEC2を維持するよりはAWS Lambdaを使った方が運用コストも含めると絶対的に安い
用途に応じて使い分けろって事ですね。

推測

AWS LambdaのアーキテクチャAmazon LinuxのContainer(ECS)に固定のメモリーを割り当てたもの
ある程度のホストインスタンスを用意してCPUの数より多めのContainerを常時動かす
LambdaのAPIが呼ばれたら、起動済みでかつホストのCPUが余っているContainerを呼び出す
もしContainerが見つからないorある程度の数より少なくなった場合は別のホストにContainerを用意して動かす
ホストインスタンスはCPUの数より多いContainerが常時動いている状態