💡 はじめに
GCPでコンテナを使った開発をしていると、気づいたらArtifact Registryにイメージがたまりすぎて課金が膨らんでいた...という経験はありませんか?
自分も以前、上司に言われ調べてみると、CI/CDで毎回作られるイメージが削除されずに溜まり続けていました。
この記事では、その解決策としてCloud Buildのパイプラインに古いイメージの自動削除を組み込む方法を紹介します。
💰️ Artifact Registryのコスト問題
Artifact Registryは便利ですが、保存量に応じて課金されます。アジアリージョンだと1GBあたり月額約15円。
少額に思えても、CI/CDでイメージを日々生成していると、数ヶ月で数十GBになることも珍しくありません。
結果として、知らないうちに月数百円〜数千円の無駄な出費が発生していることも...⚠️
🚀 解決策:gcr-cleanerでイメージを自動削除
Cloud Buildのパイプラインに「gcr-cleaner」というツールを組み込むことで、デプロイ時に古いイメージを自動削除できます。
実装は超簡単!cloudbuild.yamlに以下のステップを追加するだけです✨️
// ビルド、プッシュ、デプロイのステップは割愛
# 古いイメージの削除
- id: delete-old-images
name: asia-docker.pkg.dev/gcr-cleaner/gcr-cleaner/gcr-cleaner-cli:latest
args:
- --repo=asia-northeast1-docker.pkg.dev/$PROJECT_ID/$_REPOSITORY/$_SERVICE_NAME
- --keep=3
- --tag-filter-any=.*
たったこれだけで、最新の3つだけを残して他のイメージは自動的に削除されます🙆♂️
🔧 設定のポイント
主な設定項目はこの3つ
--repo: 対象となるリポジトリ
--keep: 残すイメージの数(例:1なら最新の1つだけ残す)
--tag-filter-any: 削除対象のタグパターン(.はすべてのタグが対象)
💡 必要に応じたカスタマイズ
開発環境なら --keep=3 など多めに
本番環境ならロールバック用に --keep=5 くらい
--tag-filter-any=^dev-.* とすれば dev- で始まるタグだけ削除
📈 導入してわかった効果
自分のPでは導入後、Artifact Registry関連のコストが月額約2,000円から300円程度まで下がりました!✨
小規模プロジェクトでもこの差ですから、大規模な環境なら効果はもっと大きいはず。
何より、手動でイメージ削除する手間がなくなったのが最高です。
デプロイするだけで勝手にきれいになるので、運用の手間も減りました!
✅ まとめ
GCPでコンテナを使った開発をしているなら、この設定は入れておいて損はありません。たった数行の追加で継続的なコスト削減になります。
まだ導入していない方は、ぜひ試してみてください!