事の発端
2021年9月某日、CloudRunに「CPUを常に割り当てる」オプションが追加されました。↓
大変驚くべきことに、高トラフィックを常にさばくようなインスタンスでは、このオプションをポチっと押すだけで料金が半額以下になります。
新しい料金体系の特徴
「CPUを常に割り当てる」オプションを有効化すると、従来とは異なる料金表が適用されます。
詳細は公式ドキュメントを参照してほしいのですが、従来のものと比較した際に特に注目すべき差分を以下に挙げてみます。
- 従来は100万req毎に発生していた「リクエスト料金」がかからなくなります
- CPU料金が1vCPUあたり月間62.208$->46.656$になります
- メモリ料金が1GiBあたり月間6.48$->5.184$になります
- アイドルインスタンスの概念が無くなり、コンテナ起動から終了までに使用したリソースが全て課金される
CloudRunをバッチ処理のワーカーとして利用する場合に、トリガーとなるリクエストを返した後でもCPUを利用して計算処理を行いたいというニーズに合わせたオプションなのですが。。。
「トラフィックを常時さばくようなアプリケーション」においてはコンテナは基本的に立ちっぱなしであり、箇条書きの最後のデメリットは完全に無視できます。
そのため、有効化するだけで料金が安くなる夢のようなオプションと言っていいでしょう。
ではどれぐらい安くなったのか
CloudRunの料金は公式の計算ツールで算出できます。
(頑張って手作業で計算することも出来ますが、無料枠を考慮に入れる必要があったり結構難しいです。)
計算に必要な主なパラメータは以下です。
- インスタンスを動かすリージョン
- 1コンテナあたりのvCPU数(max:4)
- 1コンテナあたりのメモリ(max:8GB)
- 1コンテナが同時に処理できる最大リクエスト数, いわゆる同時実行数
- リクエストの平均処理時間
- 時間あたりのリクエスト数
今回はパラメータのうち上3つをTokyo, 4vCPU, 0.5GBに固定し、下の3つを変化させて料金比較を実施してみます。
同時実行数=40, リクエストの平均処理時間=20ms
- 従来料金/新料金 ≒ 13
同時実行数=40, リクエストの平均処理時間=100ms
- 従来料金/新料金 ≒ 3.5
同時実行数=10, リクエストの平均処理時間=20ms
- 従来料金/新料金 ≒ 4.1
同時実行数=10, リクエストの平均処理時間=100ms
- 従来料金/新料金 ≒ 1.9
結果と考察
同時実行数が多ければ多いほど、リクエストの平均処理時間が小さければ小さいほど新しい料金体系の恩恵を受けられることが分かりました。
特に同時実行数=40, リクエストの平均処理時間=20msのケースは例えばGo製のwebサーバーなどであれば十分実現可能な設定であるにも関わらず、料金が1/13にもなるというのは驚きです。
Apache+PHP5のような同時実行性能が低く処理時間も遅いアプリケーションでは旨味は減るものの、そのようなケースであっても従来の半分程度になると考えられます。
GKE vs CloudRun
またこれは余談ですが、いままで高トラフィックアプリケーションではGKEとCloudRunを比較した際にCloudRunが料金の面で大きく劣っていました。
ですが、この新料金体系の登場により関係が逆転する可能性が高いです。
(Todo: グラフを作る)
まとめ
- CloudRunに「CPUを常に割り当てる」オプションが追加されました
- 高トラフィックを常にさばくアプリケーションでは料金が半額以下, 場合によっては1/13以下になります
- GKEと比較した場合でも同等かGKE以下の料金になります
こちらもオススメ