Google Cloud Runで想定外の課金が発生した話
ヒューリスティックコンのパラメータチューニングをGCPでやる - threecourse’s blogを試している中で、Google Cloud Run(以下、Cloud Run)で1万円使ってしまったので、 同じようなことを試す人がもしいたら(あまりいないと思いますが・・)ということで注意喚起のためにもメモ。
やったこと
- Cloud Run内で、最適化プログラムを動かす
- 1回の計算は4秒で、その中で5万行くらい標準エラーに出すようにしていた
(コンペ用のプログラムで、雑多な情報を提出時に無視される標準エラーに出すようにしていた) - 計算をトータルで2万回くらい投げた
何が起こったか
Cloud Runは、デフォルトでは標準出力・エラーをCloud Loggingに投げに行く
ログの記録と表示 | Cloud Run のドキュメント | Google Cloudそのため、Cloud Loggingの使用量が250GBくらいになった
(1行が20byteとすると、2万回 x 5万行 x 20byte = 20GBなのでちょっと多すぎるが、追加情報を付与して飛ばされていると思われる)- 1GBあたり0.5$、250GB使用していたので(250GB - 無料枠50GB)x 0.5$ = 100ドル =1万円
Google Cloud オペレーション スイートの料金体系 - Cloud Runの計算処理自体にはほとんどお金がかかっていない様子。
料金 | Cloud Run のドキュメント | Google Cloud
vcpu1個・メモリ0.5GBのインスタンスで、4秒の計算を1万回で、40000vcpu/秒=0.96$ (0.5 x 40000)GB = 0.05$ 程度。 リクエストやネットワーキングなどは、データ保存先のリージョンに気をつければ無視して良さそう。
対策
- ログの除外の設定をする
ログの除外 | Cloud Logging | Google Cloud - 外部プロセスを呼ぶときに、標準出力・エラー出力を出さないようにする(subprocess.DEVNULLを使うなど)
教訓
- この程度で済んで良かったが、下手すると桁が違ってた可能性があるので怖い
- 他の人がやっていないことをやるとき、サービスをよくあるユースケースと違うことに使うときには気をつけましょう
- 課金のアラーム設定や見積もり、内訳をちゃんと確認しましょう(見積もりもちょっと遅れてやってくるので難しい部分はあるのだが・・)