ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

Artifatct Registryのクリーンアップポリシーを設定する

参考: クリーンアップ ポリシーを構成する  |  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まで節約しました。地味に節約できて満足です。