web-dev-qa-db-ja.com

タグなしの画像をAWS ECR Container Registryから削除する方法

Amazon ECRにイメージをプッシュするときに、タグがリポジトリ内にすでに存在する場合、古いイメージはレジストリ内に残りますが、タグなしの状態になります。

だから私がドッカーならimage/haha:1.0.0 2回目にこれを実行すると(何かが変更された場合)、最初の画像のタグが解除されますAWS ECR

タグなしの画像からすべてのレジストリを安全にクリーンアップする方法はありますか?

16
Andrea Baccega

私は実際にaws cliを使用して1行のソリューションを偽造しました

aws ecr describe-repositories --output text | awk '{print $5}' | while read line; do  aws ecr list-images --repository-name $line --filter tagStatus=UNTAGGED --query 'imageIds[*]' --output text | while read imageId; do aws ecr batch-delete-image --repository-name $line --image-ids imageDigest=$imageId; done; done

それがしていることは:

  • すべてのリポジトリを取得する
  • 各リポジトリについて、tagStatus=UNTAGGED
  • 各イメージ+リポジトリに対してbatch-delete-imageを発行します
12
Andrea Baccega

ループなしで、1回のリクエストですべての画像を削除できます。

IMAGES_TO_DELETE=$( aws ecr list-images --region $ECR_REGION --repository-name $ECR_REPO --filter "tagStatus=UNTAGGED" --query 'imageIds[*]' --output json )

aws ecr batch-delete-image --region $ECR_REGION --repository-name $ECR_REPO --image-ids "$IMAGES_TO_DELETE" || true

まず、タグ付けされていない画像のリストをjson形式で取得します。

[ {"imageDigest": "sha256:..."}, {"imageDigest": "sha256:..."}, ... ]

次に、そのリストをbatch-image-deleteに送信します。

タグの付いていない画像がない場合のエラーコードを回避するには、最後の|| trueが必要です。

22
nfvs

ECRはライフサイクルポリシーをサポートするようになりました( https://docs.aws.Amazon.com/AmazonECR/latest/userguide/LifecyclePolicies.html )。これを使用して、タグ付けされていない画像を自動的に削除できます。

コンソールを使用してライフサイクルポリシープレビューを設定する

https://console.aws.Amazon.com/ecs/ でAmazon ECSコンソールを開きます。

ナビゲーションバーから、ライフサイクルポリシーのプレビューを実行するリポジトリを含むリージョンを選択します。

ナビゲーションペインで、[リポジトリ]を選択し、リポジトリを選択します。

[すべてのリポジトリ:repository_name]ページで、ドライランライフサイクルルール、追加を選択します。

ライフサイクルポリシールールの次の詳細を入力します。

[ルールの優先度]に、ルールの優先度の数値を入力します。

「ルールの説明」に、ライフサイクルポリシールールの説明を入力します。

[画像ステータス]で、[タグ付き]または[タグなし]を選択します。

イメージステータスにタグ付きを指定した場合は、タグプレフィックスリストで、オプションでライフサイクルポリシーでアクションを実行するイメージタグのリストを指定できます。タグなしを指定した場合、このフィールドは空でなければなりません。

一致基準について、カウントタイプ、カウント数、およびカウントユニット(該当する場合)の値を選択します。

保存を選択します

手順5〜7を繰り返して、追加のライフサイクルポリシールールを作成します。

ライフサイクルポリシーのプレビューを実行するには、[結果を保存してプレビュー]を選択します。

[イメージ結果のプレビュー]で、ライフサイクルポリシープレビューの影響を確認します。

プレビュー結果に満足している場合は、[ライフサイクルポリシーとして適用]を選択して、指定したルールでライフサイクルポリシーを作成します。

ここから: https://docs.aws.Amazon.com/AmazonECR/latest/userguide/lpp_creation.html

13
Lorant Onodi

ライフサイクルポリシーを設定することは、間違いなくこれを管理する最良の方法です。つまり、削除したい画像がたくさんある場合は、batch-delete-imagesの最大値が100であることを覚えておいてください。これは、タグの付いていない画像の数が100を超えるためです。

IMAGES_TO_DELETE=$( aws ecr list-images --repository-name $ECR_REPO --filter "tagStatus=UNTAGGED" --query 'imageIds[0:100]' --output json )
echo $IMAGES_TO_DELETE | jq length # Gets the number of results
aws ecr batch-delete-image --repository-name $ECR_REPO --image-ids "$IMAGES_TO_DELETE" --profile qa || true
5
Ken J