Noh | エンジニア向け情報共有コミュニティ
Signup / Login

GCP で Artifact Registry の請求が毎日来ていて高いなら古いコンテナイメージが残っているせいかもしれない

gcp

投稿日: 2024/03/26

更新日: 2024/03/27

GCPの請求を見たときに Artifact Registry というサービス名で毎日20円ほど請求が来ていて、月に数百円程度払っていました。いまさらながらにおかしいぞと思い確認すると、Cloud BuildでCloud Run にデプロイしたときに作られるコンテナイメージがArtifact Registry上にかなり溜まっていました。

このArtifact Registry上のイメージたちは自分で設定しないと自動で削除してくれないので、管理画面上からの設定方法を紹介します。

この記事の対象読者

  • Artifact Registry というサービス名で毎日請求が来ていて地味に負担になってる人
  • Artifact Registry に溜まっているイメージを定期的に削除したい人
  • クリーンアップポリシーで定期削除の設定をしたがうまく削除されない人

以前はgcr-cleanerを使ってcloudbuild.yamlなどに設定を追加して削除する方法が主流でしたが、現在は Artifact Registry 自体にクリーンアップ ポリシー機能があるようなのでそちらを使います。
Artifact Registry のクリーンアップ ポリシーは2024年3月時点でプレビュー版のようですが、gcr-cleaner のReadmeには以下のように書いてあり、今後はこちらを使う方がよさそうな感じがします。

Caution

The functionality provied by this tool is now built directly into Artifact Registry! We are no longer accepting bug reports or feature requests.

注意

このツールによって提供される機能は、現在Artifact Registryに直接組み込まれています!バグレポートや機能リクエストは受け付けておりません。

注意点

初めに注意点ですが、設定をしてもすぐに削除されないです。ポリシーの適用スケジュールとしてドキュメントに以下のように書いてあり、設定してすぐには実行されないので待ちましょう。

Artifact Registry では、定期的に実行されるバックグラウンド ジョブを使用して、クリーンアップ ポリシーに一致するアーティファクトを削除、保持します。変更は約 1 日以内に有効になります。

手順

今回は最新のイメージ2つだけを残し、それより古いものは定期的に削除されるように設定します。間違って必要なイメージを削除するとCloud Runにデプロイしてるサービスに影響するので注意してやってください。僕は安くしたくて2つにしましたが、自身の使い方に合わせて多少余裕を持たせておくといいです。

GCPの管理画面を開いてArtifact Registry -> リポジトリ -> リポジトリ名(今回は cloud-run-source-deploy ) -> リポジトリの編集 -> イメージ名 と進みます。そうすると上にリポジトリの編集ボタンがあるので押します。

クリーンアップ ポリシーの項目でアーティファクトを削除が選択されてることを確認します(ドライランしたい場合の説明は省きます)。

クリーンアップ ポリシーを追加をクリックして、以下の2つのポリシーを追加します。

1つ目は最新2つのイメージを保持する設定です。

2つ目は(保持する設定をしたのも以外の)すべてのイメージを削除する設定です。

保持する設定だけでは削除されないことが追加の注意点です。

しばらくしてイメージ一覧を確認すると、自動的に削除されてるのが確認できます。
参考までに僕の場合は設定してから1時間くらいで削除されたと思います。

参考

クリーンアップ ポリシーの公式ドキュメントはこちら

https://cloud.google.com/artifact-registry/docs/repositories/cleanup-policy

クリーンアップポリシーの管理をjsonに書いてコマンドで適用する方法はこちら

gcr-cleanerを使ってcloudbuild.yamlなどに設定を追加して削除する方法はこちら

yosi

Noh を作ってるエンジニア。

目次