ホーム / z - How To / GCPのCloud RunをAWSのLambda感覚で触ったらびっくりする請求が来た話

GCPのCloud RunをAWSのLambda感覚で触ったらびっくりする請求が来た話

今回は本当に直近のクラウドサービスで遊んでたら事故ったお話です。

導入:軽い気持ちで触った結果

AWS Lambdaに慣れていると、
GCPの Cloud Run も「サーバレスで安いだろう」と思ってしまう。

私もそうだった。

今回は検証目的で Cloud Run を少し触ってみて、特に本番運用するつもりもなく三日ほど放置していたところ、Billing を見て少しヒヤッとした。

「あれ、思ったより請求来てないか?」

GCPの請求額がいきなり5,747円!!!

CloudRunを触ったのはつい3日ほど前なんですが、ふと請求ダッシュボード見てびっくりした。
なんと、各日の使用料が以下の通り。。。

12月9日   755円
12月10日 2,272円
12月11日 2,567円
12月12日  153円
割引    -847円

できるだけGCPを無料プランに近い形でしっかりとサービスを使い倒したかったのに。
いい勉強代となりましたね。


さらに内訳は・・・

それでは深掘りしていく。

どんな内訳なのかを見ていきましょう
Worker Pools CPU 4,451円 (2527Seconds)
Worker Pools Memory 246円 (2527Seconds)
Jobs CPU 767円
Jobs Memory 43円

つまりCloudRunはJobを動かすのにWorkerというコンテナのベースが必要になり、その使用料がかかるというわけですね。GCPの方はまったく勉強していなかったのでこの点の理解が不足していましたね。


というわけで今回の請求内容まとめると

  • Cloud Run
  • 使用量:約250万秒(約3日)
  • 費用:約5,700円

一見すると「そこまで高額ではない」が、3日目で気がついてよかったです。
一回飲みに行くと思えば気にならない金額ですが、気がつくのが月末だったら悪夢でしたね。


今回得られた教訓として

LambdaとCloud Runは思想が違う
Lambda感覚で設計せずに触った
Worker Pool を「常駐サーバ」と理解していなかった
Billing / Budget / Alert を後回しにした

とまぁ、これじゃ浅いのでもう少し踏み込んでみる。


根本的にLambdaとCloudRunってどう違うのか整理してみた。

AWS Lambdaはイベント駆動である

  • 実行は関数単位
  • 実行時間は最大15分
  • 実行してない時間は課金されない
  • 遊びで触っても事故りにくい設計

GCP Cloud Runはコンテナサービスである

  • CPU割当が有効な間は課金される(リクエストがなくても)
  • 常駐プロセスは普通に課金(常駐プロセスはHTTPリクエストも受け取れる)
  • もはやVMと同じような感覚

Cloud Runは「サーバレス風」なだけで、
自由度と引き換えに責任が増えるサービスだが、「お遊びで軽く触るサービスではない」


CloudRunはどんな時に向いているのか

マイクロサービスのWEBアプリやWEBを通じたAPI提供に向いている。
違いは以下のように整理できる。

観点LambdaCloud Run
思想関数サービス
実行単位イベントコンテナ
常駐不可
課金安全強力だが危険
遊び用途

ちなみに今回の教訓をベースに観点を変えると以下である。

観点LambdaCloud Run
初期触りやすさ
放置したときの安全性×
設計ミス時の請求耐性高い低い
本番向き
遊び・検証最強危険

Cloud Runは悪なのか?

結論から言うと、全くそんなことはない
ただし「設計前提」がLambdaとは真逆だった

  • マイクロサービス
  • API サーバ
  • 本番運用

この領域では非常に強力。
もし最初から以下を実施していれば防げたことも事実だ。
もし最初から以下をやっていれば、今回の事故は防げた。

・Cloud Run 起動直後に Budget + Alert を設定
・CPU 常時割当をオフにする設計確認
・Job と Service の違いを理解してから作成
・「Lambda感覚」を捨ててから触る


まとめ

GCPはちゃんと設計して使う人には、とても正直だと思う。

今回の筆者の失敗が、同じように「Lambda脳」でGCPのCloudRunを触ろうとしている人の
ブレーキになれば幸いである。