Cloud Functions for FirebaseとContainer RegistryとCloud Storage
ストレージの使用量がやたら多いので色々調べてみたときの備忘録。
Container Registryをきれいにしたらかなり下がった(*´ω`*)
各バケットの用途
見てみると、色んなバケットが利用されている。
- デフォルトのバケット(GAE)
<project-id>.appspot.com
staging.<project-id>.appspot.com
- Cloud Functionsで利用
gcf-sources-<project-number>-asia-northeast1
gcf-sources-<project-number>-us-central1
- Container Registryで利用
asia.artifacts.<project-id>.appspot.com
us.artifacts.<project-id>.appspot.com
ずば抜けて容量が多いのは、Container Registoryで使われている
asia.artifacts.<project-id>.appspot.com
。。
デフォルトのバケット(GAE)
App Engineで作成されるバケットたち。
<project-id>.appspot.com
- デフォルトのバケット
staging.<project-id>.appspot.com
- デプロイ時に使用する一時ストレージ
このあたりに書かれている感じ。
Cloud Functionsで利用
gcf-sources-<project-number>-<region>
中を見てみるとデプロイしたソースが配置されているよう。
公式ドキュメントの以下に流れが書いてあった。
・Cloud Functions イメージのビルド
また、Cloud Functions for Firebaseの流れはこちら。
・Cloud Functions for Firebase | Firebase Documentation
- 関数のソースコードをデプロイするとFirebase CLIによって関数コードの.zipを作成
- Firebaseプロジェクト内のCloud Storageバケット(
gcf-sources-*
)にアップロード- Cloud Buildが関数のソースコードを取得してビルド
- ビルドされた関数コードのコンテナイメージ(
gcf
)は、
プロジェクト内の非公開のContainer Registryリポジトリにアップロード新しい関数が展開- 更新されたコードをデプロイすると、Cloud StorageとContainer Registryのビルドアーティファクトが更新され、
新しいインスタンスに置き換えられる- 更新された際、古いバージョンのインスタンスがクリーンアップされる
Container Registryを見てみると、
asia.gcr.io/<project-id>/gcf/<region>/<uuid>
の配下にイメージが作られているよう。
タグをみると、extensionのイメージもあるっぽい。
gcf配下以外にもCloud Run用にCloud Build内で利用したイメージも含まれていた。
Container Registryで利用
Container Registryに保存されてるコンテナイメージのよう。
<region>.artifacts.<project-id>.appspot.com
Container Registry側を見てみると、
asia.gcr.io/<project-id>/gcf/<region>
配下にイメージが配置されてる。
Cloud Storage側にも該当のファイルが存在を確認。
ただ、Cloud Runのイメージ関連のファイルはなさそうだった。。
イメージを削除してStorage容量を抑える
いくつか記事をみていると、Cloud Storageのライフサイクルを使って削除する方法が書かれているけど、
Stack Overflowや公式ドキュメントでは推奨されていないっぽい。
- Container Registry の概要 | Container Registry のドキュメント | Google Cloud
- イメージの管理 | Container Registry のドキュメント | Google Cloud
- Cloud Functions のトラブルシューティング | Google Cloud Functions に関するドキュメント
Cloud Functions
Stack Overflowにある通り、firebase-tools@9.14.0で対応されているよう。
デプロイ時にContainer Registryから削除してくれるっぽい。
firebase-toolsのバージョンを確認すればOK
Cloud Run+Cloud Build
色々見てると、Container Registryのベストプラクティスの中に、
推奨される方法が書かれていた。
「非公式のツールだけど、gcr-cleanerを使うといいよ」らしい。
・ GoogleCloudPlatform/gcr-cleaner: Delete untagged image refs in Google Container Registry or Artifact Registry
Firebase Extensions
あまり情報がないので、削除していいか不安。。
gcr-cleanerを使えばよいのかは今度確認する。
とりあえず、古いCloud Run用のイメージを削除したらかなり減った。。 これでだいぶコストが下げれる。。(*´ω`*)
参考にしたサイト様
- Cloud Functions for Firebaseの利用で、異様にGCPのStorageが消費されると思ったら..
- 勝手に増えていくCloud Storageのコンテナイメージを自動で削除する | SERVERSUS
- GAE/Go + Cloud Build でデプロイを自動化しよう - Qiita
- Cloud Functions for Firebaseを使用した時に、Cloud Storageのストレージ容量が圧迫される問題について調べた
- google cloud storage - Bucket of Staging files after deploying an app engine - Stack Overflow
- Firebase storage artifacts - Stack Overflow
- Cloud Functions イメージのビルド | Google Cloud Functions に関するドキュメント