Closed2
Artifact Registryの古いコンテナイメージをCloud Buildから自動削除する
Cloud Build経由でCloud Runにアプリケーションをデプロイしていると、Artifact Registry上にコンテナイメージがどんどん溜まっていき、地味に料金がかかる。
Artifact Registryには最近リポジトリのクリーンアップ ポリシーという機能が追加されたようだが、2023年2月時点では細かな削除設定が出来ない(「◯日後に削除する」という設定のみ)ため、別の方法を検討することにした。
gcr-cleanerを使う
Google Cloudが公開しているgcr-cleanerを使うと色々と細かな設定ができる。
Cloud Buildから古いイメージを削除するには以下のようなステップを追加すればOK。自分のプロジェクトでは、Cloud BuildでCloud Runにデプロイを行っていたため、このデプロイ完了の次のステップで古いイメージの削除を行うようにした。
cloudbuild.yaml
steps:
- id: delete-old-images
# 公開されているgcr-cleanerのイメージを使う
name: asia-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli:latest
args:
# 削除するリポジトリ名
- --repo=$_ARTIFACT_RESISTRY_IMAGE_REPO
# 最新の3つだけを残す場合
- --keep=3
# 削除対象とするタグの正規表現。ここではすべてのイメージを対象とする
- --tag-filter-any=.*
👆 $_ARTIFACT_RESISTRY_IMAGE_REPO
という変数の部分は具体的にはasia-docker.pkg.dev/my-project/my-repo/my-image
のようなArtifact Registryのリポジトリのパスが入るイメージ。
Cloud Buildのサービスアカウントにロールを追加
なおCloud BuildからArtifact Registryのリポジトリを操作することになるため、CloudBuildのサービスアカウントにroles/artifactregistry.repoAdmin
ロールを追加しておく必要がある。
このスクラップは2023/02/23にクローズされました