くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Cloud Functions for FirebaseとContainer RegistryとCloud Storage

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にデプロイすると、Cloud Storageバケットに保存
  • 次にCloud Buildによって、コードは自動的にコンテナイメージに構築され、イメージレジストリにpush
  • 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公式ドキュメントでは推奨されていないっぽい。

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用のイメージを削除したらかなり減った。。 これでだいぶコストが下げれる。。(*´ω`*)

参考にしたサイト様