Closed2

Artifact Registryの古いコンテナイメージをCloud Buildから自動削除する

catnosecatnose

Cloud Build経由でCloud Runにアプリケーションをデプロイしていると、Artifact Registry上にコンテナイメージがどんどん溜まっていき、地味に料金がかかる。

Artifact Registryには最近リポジトリのクリーンアップ ポリシーという機能が追加されたようだが、2023年2月時点では細かな削除設定が出来ない(「◯日後に削除する」という設定のみ)ため、別の方法を検討することにした。

catnosecatnose

gcr-cleanerを使う

Google Cloudが公開しているgcr-cleanerを使うと色々と細かな設定ができる。

https://github.com/GoogleCloudPlatform/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にクローズされました