GCPのAutoMLを使っていたら12万の請求がきてしまった話を読み、前職の現場で似たような体験をしたことを思いました。
そこで、自分への戒め+この記事をご覧になっている方に「同じ失敗を繰り返して欲しいくない」という思いを込めて書きます。
※ 本記事はプロダクトの特定を防ぐため、一部の情報を濁してあります
何が起きたか
その事件はリリース直後(お盆明け)に発生し、利用者が急増したことで発覚しました。
まずは、当時のGCPの請求金額をご覧ください。
なんと1日あたりの最大請求金額は**「25万円」を超え、月あたりの合計請求金額は「約150万円」**の課金が発生する事態に(これが噂の「クラウド破産」と呼ばれている現象ですね)
原因
実装されたあるAPIに、GoogleMap Dicrections APIを利用して「ある地点~ある地点への経路情報」を取得する処理があり、Directions APIに大量のリクエストを送っていたため
Directions APIの料金試算
現在のGoogleMap APIの料金体系は、以下の通り
いまいちピンと来ないので、1回のリクエストあたりの日本円でいくらかかるのか計算してみました
リクエスト回数 | 1リクエストあたりの料金 |
---|---|
0~100,000回まで | 0.54円/1回 (5ドル * 108円 / 1000回) |
100,001~500,000回まで | 0.43円/1回 (5ドル * 108円 / 1000回) |
つまり「1回のリクエストあたり約0.5円
」かかります。(意外とお高い...)
対策
現場の偉い人は、Googleに問い合わせて「Directions APIの利用に関する割引の交渉」を行っていたようですが、最終的にはRedisに「Directions APIから返却された経路情報」をキャッシュさせました
具体的には、以下のような処理を組み込みました
- Redisに「A地点からB地点までの経路情報」があれば、キャッシュさせたデータを再利用
- キャッシュされたデータなければ、Directions APIから情報を取得してRedisにキャッシュを保存
(有効期限1ヶ月)
上記の対応後、Directions APIのトラフィック推移は以下のように変化しました。
対応直後から、リクエストのトラフィックが激減しています。
翌日からの課金額も、一日あたり平均1,500円ほどに落ち着きました。
再発防止策
-
GoogleMap Directions APIに関わらず、課金が発生しうるサービスはドキュメントをしっかり読み、どんな請求が発生しうるかを把握しましょう
-
利用しているサービスに関するナレッジや、先人達が体験したエピソードを読みましょう
※ GoogleやQiitaで「クラウド破産」で検索すると、面白い記事がたくさんヒットします -
GCP管理ツールの予算とアラート機能を使いましょう
私は途中からプロジェクトに参画したことに加え、問題が起きた部分の担当箇所ではなかったため「高額課金/請求の責任」は追及されませんでしたが、皆さんも気をつけてくださいね