こんにちは。最近ジムに通い始めた島村です。
これまでジムは通ったことはなかったのですが、
効率よく筋肉を刺激することができて楽しく過ごせています。
この調子で筋肉を大きくしていけたらと思います。
さて、今回はECRのライフサイクルポリシーの機能の解説と
実際に試して機能を試していきたいと思います。
ECRライフサイクルポリシーとは何か
まず、ECRのライフサイクルポリシーはプライベートリポジトリごとに設定が可能です。
※パブリックリポジトリでは設定することができません。
ライフサイクルを定義することで、条件に合致したイメージを削除することが可能です。
リポジトリ内のイメージを効率よく整理することができるようになります。
ライフサイクルポリシーの判定条件
ライフサイクルポリシーは2種類のどちらかの判定条件で設定できます。
1.イメージ数(imageCountMoreThan)
2.プッシュしてからの日数(sinceImagePushed)
いずれの条件もイメージのプッシュされた日付で判定されています。
イメージ数が1の条件であれば、プッシュされた日付の最新のものだけが残ります。
プッシュしてからの日数であれば、指定した日数よりも古い日付のイメージは全て期限切れになります。
ライフサイクルポリシーの評価順序
ライフサイクルポリシーにはルールの優先度があります。
ルールの評価自体は同時に行われますが、ポリシー適用は優先度を見ています。
わかりにくいので、公式ドキュメントの例を見たいと思います。
以下のような条件で考えていきます。
リポジトリのコンテンツ
Image A, Taglist: ["beta-1", "prod-1"], Pushed: 10 days ago Image B, Taglist: ["beta-2", "prod-2"], Pushed: 9 days ago Image C, Taglist: ["beta-3"], Pushed: 8 days ago
ライフサイクルポリシー
{ "rules": [ { "rulePriority": 1, "description": "Rule 1", "selection": { "tagStatus": "tagged", "tagPrefixList": ["prod"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } }, { "rulePriority": 2, "description": "Rule 2", "selection": { "tagStatus": "tagged", "tagPrefixList": ["beta"], "countType": "imageCountMoreThan", "countNumber": 1 }, "action": { "type": "expire" } } ] }
優先度1のルールの条件に合致するイメージはどれになるのでしょうか。
答えはImage-Aのみになります。
prodのタグがついているもので、古いプッシュ日付なのでImage-Aだけになりますね。
優先度2のルールを見てみましょう。
betaタグのものが対象になります。今回の場合はImage-AとImage-Bが条件に当てはまります。
betaタグの場合、imageCountMoreThanでCountNumberが1のため、最新であるImage-Cだけが残るようになります。
ただし、ここで優先度が適用されます。
優先度1のルールではImage-Aだけが当てはまり、優先度2のルールではImage-A,Bが対象でした。
優先度1のルールはprodかつ古い日付のものとなるため、Image-Aだけが適用されImage-Aだけが削除対象となります。
優先度2のルールではImage-Bも削除対象として判定はされるものの、優先度1のルールには当てはまらないので削除対象にはならないというわけです。
ライフサイクルポリシーの適用時の注意点
ECRのライフサイクルポリシーは設定後、即座に反映されます。
テストをせずに実行してしまうと削除を想定していないイメージまで消えてしまう可能性があります
ECRライフサイクルポリシーにはポリシーのテストルール機能があります。
テストルールを定義することで条件に合致するイメージを事前に特定しておき、問題なければ
テストルールをライフサイクルポリシーとして定義しましょう。
試してみる
ライフサイクルポリシーを試してみます。
dockerイメージは手元で適当に作成して、アップロードしておきました。
上が一番新しいイメージで、下に行けば行くほど古いイメージです
この状態でライフサイクルルールを構成していきます。
対象となるリポジトリを選択し、[アクション]→[ライフサイクルポリシー]を選択します。
まずは、テストルールを作成していきます。
ルールの定義を設定していきます。
今回は簡単に定義を行います
タグ指定はせずに全てのイメージを対象とし、条件はイメージ数とします。
以下の通りとなるかと思います。
設定が完了したら、テストルールを実行します
[テストの保存と実行]を選択します。
結果には一番古いイメージが削除されると出力されていますね。
このルールを本番ルールにしたいと思います。
[ライフサイクルポリシーとして適用]を選択します。
本番ルールを追加して15分以内にイメージが削除されました。
※24時間以内の削除が仕様なので、15分以内で削除されるとは限りません。
最後に
いかがでしたでしょうか。
リポジトリは運用が続くにつれ、肥大化していきます。
ライフサイクルポリシーを使用して効率よく整理していきましょう。
参考
島村 輝 (Shimamura Hikaru) 記事一覧はコチラ
最近ECS周りをキャッチアップ中。趣味は車・バイク全般。
一応、AWS12冠です。