ざっくりGCP料金計算

外部IPを解放し忘れて半年間じわじわ課金されていた話

月$7のIPが10個放置されて半年。気づいたときには6万円を超えていた。

コスト分析で謎の固定費を発見した

GCPのCost Tableを久しぶりにサービス別で細かく確認していたとき、「Compute Engine - Static IP addresses」という費用が毎月コンスタントに計上されているのに気づいた。金額は月$70〜80程度。決して大きくはないが、見覚えがなかった。IPアドレスにこんなに払っていたっけ?と思いながら調査を始めた。

GCPでは静的外部IPアドレスを予約すると、それがどのリソースにも紐づいていない「未割り当て」の状態のとき、$0.01/h(月換算で約$7.2)の料金がかかる。VMやロードバランサに割り当てている間はほぼ無料だが、割り当て先のリソースを削除してもIPアドレスの予約は自動では解放されない。これがGCPの仕様だ。

なぜ10個も残っていたか

GCPコンソールで外部IPアドレスの一覧を開くと、ステータスが「使用中」ではなく「一時停止」になっているIPが10個あった。それぞれの履歴を辿ると、過去に立てては消した検証用インスタンス、短期プロジェクト用のインスタンス、負荷試験用のインスタンスなどに紐づいていたIPアドレスだった。インスタンスを削除するときに「IPアドレスも解放する」オプションを選ばずにそのまま消してしまっていた。それが積み重なって10個になり、半年間誰も気づかなかった。$7.2 × 10個 × 6ヶ月 = $432、円換算で約6万円が誰も使っていないIPアドレスのために消えていた。

削除と再発防止

IPアドレスを削除するのは5分の作業だった。「VPCネットワーク > 外部IPアドレス」の一覧で「一時停止」状態のものを選んでリリースするだけだ。ただし「使用中」のIPを誤って解放すると、紐づいているリソースがインターネットから到達できなくなるため一覧の確認は慎重にやる必要がある。再発防止として、インスタンスを削除するときのチェックリストに「外部IPアドレスも一緒に解放する」を追加した。Terraformで管理しているリソースについてはIPアドレスも同じtfファイルで定義することで、terraform destroyのタイミングで一緒に削除されるようにした。またGCPのRecommenderは未使用リソースを定期的に検出してコンソールに表示する機能があるので、月1回程度確認する運用も取り入れた。小さな費用こそ積み重なりやすく、見逃されやすい。