2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

✨️ GCPのArtifact Registryで発生する無駄な課金を防ぐ方法

Posted at

💡 はじめに

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でコンテナを使った開発をしているなら、この設定は入れておいて損はありません。たった数行の追加で継続的なコスト削減になります。
まだ導入していない方は、ぜひ試してみてください!

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?