Cloud Functionsでプロジェクトの費用が発生したので設定を見直し Node.jsを利用する際は注意が必要
先日、ポートフォリオで使用しているCloud Functionsの関数を修正してデプロイし直しましたが、その時の操作がきっかけで、Firebaseのプロジェクトに費用が発生するようになりました。
これまで無料で利用できていたので、突然の費用発生に驚きましたが、原因の調査やサポートに問い合わせてみた結果、理由が判明したので、記録として残しておきます。
目次
- プロジェクトの費用
- 費用が発生した原因
- 改善方法
- そもそも無料枠は?
- 最後に
- 参考リンク
プロジェクトの費用
プロジェクトに費用が発生したことに気が付いたのは3月の中旬、設定している予算アラート(1円設定)によって、メールが飛んできた時でした。
これまで無料枠内で利用していて、最近になって関数をデプロイし直したとはいえ、2~3行のコードを追加しただけだったので、メールが送られてきた当初はなにかの間違いだろう、と考えていましたが、どうやら違うようだったので、数日経った後に調査を開始。
そもそも、プロジェクトの費用のグラフを見て変だと思ったのは、なぜか使用した覚えのないCloud Storageに費用が発生している点でした。
Firebaseのコンソールからでは保存されたファイルも確認できず、Cloud Storageの利用にまったく身に覚えがなかったので、初めてFirebaseのサポートにメールで連絡して確認することに。
費用が発生した原因
サポートへ連絡してから2~3日後に返答がありました。
返信の内容によるとCloud FunctionsでNode.js 10 以降を利用している場合、ランタイム(Node.js用)構築の最近の変更によって、デプロイ時のタイミングで、プロジェクト配下のCloud Storageにバケットが作成されてしまうとのこと。
Node.js 10への移行はだいぶ前に行っていて、その間、費用は発生していなかったので、今回はランタイム構築の方法が変わってしまったことによって、費用が発生したようです。
バケットの内容はGoogle Cloud ConsoleのCloud Storageから確認可能(Firebaseのコンソールからじゃない点に注意)。
「asia.artifacts~」と「gcf-sources-~」というのが今回の対象になります。
とくに「asia.artifacts~」という名前のバケットには100MBを超えるファイルが格納されているので、これが保存バイト数が大きくなっている原因になります。
改善方法
そもそも無料枠は?
Cloud Functionsには無料枠が用意されているので、今回のように、勝手に使われているCloud Storageによって費用が発生するのは、正直、詐欺に近い気分です。
そもそもCloud Storageにも無料枠があるのでは、と思って確認してみると、どうやら米国のリージョンだけ?のよう。
これまでCloud Functionsは東京リージョンを使用していましたが、上記の対応でも費用が発生するようであれば、米国リージョンを利用するように変更することで改善されるかもしれません。
ただ、Firebaseの使用量と請求額には「無料枠上限」が表示されているんですけどね...。
とりあえず今回の請求額である2円は勉強代として支払っておきます。
最後に
今回、Firebaseのプロジェクトで費用が発生したことに気づいたのは、予算のアラートを設定したことが大きく、設定していなかったら、金額が僅かなので発見が遅れていたと思います。
個人利用のプロジェクトであっても、予算アラートは面倒臭がらずにきちんと設定しておくことをオススメします。