導入
以前、こちらの記事でHeadlessCMSであるStrapiをGAEにデプロイしたのですが、無料枠の範囲内で運用していたはずが急に請求が飛んできました。
GAEのインスタンスサイズはF1、max_instancesは1としていたので請求が発生するはずがありません。
なぜ請求が発生してしまったのでしょうか。
犯人
犯人は GoogleCloudStrage (GCS) でした。
GAEはデプロイ時にCloud Buildを使用するのですが、その際の生成物をGCSの適当 (誤用でない意味の方の適当) なバケットに保存します。
この際、GAEのデプロイ先によってバケットの生成されるリージョンが変化します。
ではここでGCSの無料枠を見てみましょう。・
5 GB 月の Regional Storage(米国リージョンのみ)
5,000 回のクラス A オペレーション(1 か月あたり)
50,000 回のクラス B オペレーション(1 か月あたり)
1 GB の北米から全リージョン宛ての下りネットワーク(1 か月あたり、中国とオーストラリアを除く)無料枠を利用できるのは us-east1、us-west1、us-central1 リージョンのみです。使用量の計算は、これらのリージョンすべての合計が集計されます。
はい。
ここで重要なのは、無料枠はこれらのリージョンの場合のみだということです。
GAEの設定時に調子に乗って東京を選択すると、当然のごとくバケットは東京リージョンに設定されます。
これが、課金された理由です。
嘘です。
GAEのリージョンによって生成先のバケットが変化するのは確かですし、GCSの課金が米国リージョンのみとドキュメントに記載されているのも確かですが、それによって東京リージョンに生成されたバケットの料金が (少なくとも一両日中に) 請求されることはありません。
では、なぜ課金が発生したのでしょうか。
答えは、コンソール画面を見た瞬間一目で察することができるかと思います。
はい。
謎のマルチリージョンバケットが生えてますね。こいつが犯人です。
実際、中身を見たり検索して調べたりして特に問題なさそうだと思い消してみたのですが、以降現状の課金額の若干上に設定したアラートから課金の連絡は来ていません。
理由は定かではありませんが、GAEはデプロイを繰り返すとマルチリージョンのバケットをなぜか生成するようです。
こちらのバケットですが、消してもデプロイ済みのアプリケーションに問題は生じません。
ただし、再度デプロイする際の時間が若干長くなります。
毎日何度も更新するようであれば、消さなくてもいいかもしれませんが、そうでないなら消してしまった方がよいかもしれません。
ちなみに、公式ドキュメントからその文面を見つけることはできなかったのですが、ネットを探っているとGAEにデプロイして発生した単一リージョンのバケットは課金がされないといった記述をよく見ます。
事実、マルチリージョンのバケットを消してからは通知が来ていません。
GCSの課金が月次の課金だったらわかりませんが、マルチリージョンと単一リージョンと異なるとはいえ、普通に考えて課金のタイミングが異なるとは考えにくいので大丈夫でしょう。
余談
この際に生じた課金額は、一晩で16円でした。
一晩で気が付いたのでそこまでではないですが、一か月間気が付かなかったとかになるとランチ一食分くらいにはなるので気を付けたいですね。