Firebaseのバックエンドの利用料金のポリシーの変更
Firebaseでバックエンド機能(ファンクション/functions)を利用する場合、2020年8月頃だと思いますが利用のポリシーが変更になっています。
Firebaseでファンクション(functions)でNodeのバージョン10を使用する場合、無料プラン(Spark)から従量制プラン(Blaze)に変更しないとインターネットに公開(デプロイ)できなくなっていました。
通常の開発環境では、Node.jsのバージョンが14とか15を使っている場合がほとんどなので、デプロイしようとするとエラーになるのでこの辺りはすぐに気づきました。
Googleのサイトによれば、Node.jsのバージョン8は2021年2月15日以降はデプロイが停止されて、2021年3月15日以降は実行もできなくなるとされています。2020年11月現在は、Node.jsバージョン8でデプロイすれば無料で使えるはずです。(試していないので実際に無料でデプロイ可能かはわかりません)
従量性プランでも無料枠があります
従量制プラン(Blaze)でも無料枠があるので、プランを変更しても無料枠内ならば無料で利用可能だと思っていました。元々、Firebaseの利用量は余り多くないので、すっかり無料で運用できていると思っていました。ところが、この数か月、微妙な額(数セント=数円)の使用量が発生していたので気になって調べてみました。
Firebase functions使用時は無料枠でカバーされない所がある!
よく調べてみると、実はFirebaseのファンクション(functions)を使用した場合には、無料枠でカバーされない部分があることがわかりました。
まずは、GoogleのFirebaseのサポートに記述があります。
これを読むと2020年8月17日以降のデプロイメントの操作に少額の料金が発生すると書かれています。ファンクションのコンテナに使用するストレージ(artifactsに分類されているストレージ)に対する料金のようです。例として、ファンクション(functions)で1GBのストレージを使用していると月額2.6セントの料金が発生すると書かれています。開発用のエミュレータ(ローカルサーバ)の利用は無料プランでも可能ですし、デプロイを実行する必要はないので、コスト削減のために利用を推奨しているようです。
ファンクション(functions)は、無料枠のないストレージ(Container Registry)に保存されるためこのための料金が発生するようです。Googleのドキュメントによれば、1GBで月額2.6セントとなっています。
また、ファンクション(functions)をデプロイする際の処理時間(CPU使用時間)に対しても課金されますが、これには無料枠があるため、1日にデプロイする回数に気をつければ料金は発生しないようです。ただし、この料金も通常の処理時間の場合は、数セントで収まります。(参考:よくある質問)
(*)なお、日本語のドキュメントと英語のドキュメントでは違いがある場合があります。詳細を知りたい場合、英語のドキュメントも併せてチェックすることをお勧めします。
Firebase functionsの無料枠の利用量の算定方法
Firebaseのほとんどの利用量の算定は、基本はプロジェクト毎になっています。 プロジェクトを分ければ、利用量が分散するのでデータベースやストレージなどアプリ間で共有する必要がない場合にはプロジェクトを分けるのは料金抑制の一つの方法だと考えていました。
この機会によく料金体系を調べてみると、Firebaseのファンクション(functions)は別の体系で料金が計算されることもわかりました。
基本は、請求先のアカウント毎に計算すると書かれています。 つまり、同一請求先で作成しているプロジェクト全体の使用量の合計が無料枠の算定対象になります。 従ってプロジェクトを分けていても、同じアカウントで支払いの設定をしている場合は、余り利用料金の抑制には効果がないという事になります。(参考:よくある質問)
実用上は余り問題はありません!
以上の事が今回の詳細の調査で分かりましたが、請求額は月額でせいぜい数セント(数円)なので、運用上は全く問題のない範囲です。また、これらはデプロイ時の処理時間や実装したファンクション(functions)が使用するストレージ容量に関連した料金になるので、実際の運用でアクセスが爆発的に多いサイトでもこの部分の料金が爆発的に大きくなるとは考えにくいといえます。
バックエンドの処理(ファンクション/functions)を利用したブログの実装で、使用しているストレージが現在約1.3GBですので、発生している料金は数セントです。(2020年11月20日現在の11月分のデプロイの処理時間を含めた使用料が4セントです)
請求先アカウントの作成が問題になる場合
請求先アカウントの作成にはクレジットカードなどが必要になります。 従って、クレジットカードを持たない学生さんなどが、ファンクション(functions)を利用したい場合にはアカウントの作成が問題になる可能性は残ります。そうした場合は、親などにアカウントの設定で協力が得られないと利用が難しい場合もあるといえます。
Firebaseのポリシーの変更には注意が必要!
どのサービスを利用する場合も同じことが言えますが、料金体系などのポリシーの変更には注意をすることが大切です。Firebaseの場合2020年の早い時期には依然あった月額固定のサービスが停止しました。 このサービスは一定量の使用料のサービスを月額固定で提供するというものでしたが、現在は全ての有料サービスは従量制のプランに移行しています。2020年11月現在、従量制サービスの上限を設定して利用料金の上限を固定するような仕組みはありません。一定の使用額になった時点で通知や警告を受け取る仕組みはありますが、利用料金の上限を設定する事は現状ではできません。
現実の運用上でのコストを考えた場合、こうしたプランの変更は多くの場合には使用料が同程度の場合余り大きな影響はありませんが、注意を払う必要はあるかと思います。
まとめ
Firebaseのファンクション(関数/functions)に関連した利用料金の体系を調査しました。 調査の結果、Firebaseのファンクションをインターネットで公開(デプロイ)する場合には、完全な無料枠の範囲ではできないことがわかりました。従量制のプラン(Blaze)に切り替える他に、数セント(数円)ですが、利用料金が発生する事がわかりました。
実際の運用では大きな問題になる額ではありませんが、あれっと思った方は、無料枠でカバーされないファンクション(function)の実行環境を置く場所の料金です。その他、1日に何回もデプロイすると処理時間のお金も発生します。
また本文では触れていませんが、ファンクションを置くサーバーの場所(リジョン/region)も利用料金に関係しています。ファンクションをデプロイした後はこの場所の変更はできないので、利用者のいるリジョンを考慮して場所を決める必要もあるようです。