参考: クリーンアップ ポリシーを構成する | Artifact Registry のドキュメント | Google Cloud
Artifatct Registryに保存するコンテナイメージが地味にコストになっていたので、不要な古いバージョンのイメージを消したいと思いクリーンアップポリシーを設定しました。
Terraformで書くとこんな感じです。 cleanup_policies
ブロックでそれぞれ定義できます。
resource "google_artifact_registry_repository" "this" { project = var.project_id location = var.region repository_id = var.repository_id format = "DOCKER" # 30日は保持する # 5世代は保持する # それ以外は削除する cleanup_policies { action = "KEEP" id = "keep-30d" condition { newer_than = "2592000s" # 30 days } } cleanup_policies { action = "KEEP" id = "keep-5gen" most_recent_versions { keep_count = 5 } } cleanup_policies { action = "DELETE" id = "delete-any" condition { } } }
action="KEEP"になっているものが保持ポリシー、aciont="DELETE"となっているものが削除ポリシーです。
自分は最初、5世代残す保持ポリシーだけ設定していて、いつまで経っても5世代より古いものが削除されずなぜだ?となってました。削除ポリシーを設定しない限り削除されることはないという大ポカでした。 なお、設定後すぐ削除されるわけではなく、1日1回任意のタイミングで削除ジョブが実行されるようです。
削除ポリシーよりも保持ポリシーが優先されます。上記では以下の条件となっています。
- 5世代は保持する
- 作成されて30日までは保持する
- 全て削除する。
この場合、5世代は必ず保持されて、5世代超えていても30日以内なら保持されて、それ以外のものは削除されるものとなります。
そんな感じで、ポリシー設定する前は100GBあったレジストリのサイズを9GBまで節約しました。地味に節約できて満足です。