ことの発端
個人用Google Cloudを使っていて、通常1,000円くらいの利用料だったのだが4月分としていきなり51,976円の請求書が来て焦ってしまった。
慌ててCloud Billingを確認したところ課金の要因はAlloyDB(Google CloudのマネージドPostgreSQL)だった。
4/13くらいからずっと起動していて、毎日2,500円くらいずつ課金が発生してしまっていたのだ。
高額課金を引き起こした直接原因
第3者視点で見ると、起動していたのだからお金がかかって当然ではないかと思われるかもしれないが、その時期は業務で他のGoogle Cloudサービスも合わせて調査しており、BigQueryやCloud Run等利用した分だけ課金がされるサーバレスサービスも多く目にしていた。
そこで、AlloyDBも起動した時間ではなく利用した分(クエリした分、保管したデータ分)だけ課金と思い込んでしまったのだ。
(リソース作ったとしても、特に触っていなければ微課金で済むだろうと思い込んでいた。)
しかし、PostgreSQL 向け AlloyDB の料金を見ればわかるように、AlloyDBは起動した時間だけ課金される料金体系であり(vCPUだけ見ても「$0.08458 / vCPU hour」と記載してある。)、初歩的なミスによる自業自得なのである。
サーバレスとマネージドサービスの違いを意識していなかったことが根本原因
課金に関わることなので、きちんと課金体系を確認すべきであったのだが、なぜ確認できていなかったのだろうか。
それは、サーバレスとマネージドサービスの違いを意識できていなかったことにあると考える。
両者の違いは以下のブログ等で触れられているが、自分がわかりやすいようにデフォルメして解釈すると以下の違いがあると考える。
・サーバレス→サーバはユーザーの元に ない(サーバレス)。使いたい時にクラウド事業者からリソースを借用する。
・マネージドサービス→サーバはユーザーの元に ある。運用管理をクラウド事業者が代行してくれているだけ。(マネージド)
マネージドサービスはあくまで運用管理がマネージドなだけで、(仮想)サーバが確かにユーザーの元に存在するため、IaaS(VM)と同じように起動した分だけ料金がかかる のである。
そこの理解が曖昧でサーバレスのサービスとマネージドサービスをなんとなくクラウド事業者が管理してくれる便利な代物くらいの認識でいたため、全てのサービスがサーバレスのような"実際に利用した分"だけ払えば良いものだと都合の良い解釈をしていたのである。
最後に(所感)
ある程度クラウドに慣れてきたかなという驕りがあり思い込みで進めてしまったため、なるべくして発生してしまった事象かと反省。
仁和寺の和尚の教えではないが、安心しそうになる時こそ一層注意をすることを再度心がけようと思う。
(ちなみに、会社のアカウントでも同時期に同様のミスをしていて、会社の方でも数万円の費用を使ってしまってました。。。謝って許してもらいました。。。)