JAWS-UG金沢のもくもく会に参加してきました。で、最近ECRのコンソールにライフサイクルポリシーというメニューが追加されてたのが気になっていたので軽く触ってみました。
Amazon ECRのライフサイクルポリシーでコンテナイメージのクリーンアップ | Amazon Web Services ブログ
ライフサイクルポリシーを使うことで、古い又は使われていないイメージを自動的に削除することで、コンテナイメージのレポジトリをきれいに保つことができるようになりました。
なるほど。たしかに、リポジトリ当たりのイメージ数制限がある(上限申請可)ので古くなったイメージを自動的に削除してほしい。今まではcron等でAPI叩いて行う感じのものが良い感じに自動化できるので良さそう。
Amazon ECR ライフサイクルポリシー - Amazon ECR
コンソールには Dry run of lifecycle rules
と Lifecycle policy
というメニューが増えていた。ポリシーを作成して、dry runののち正式に適用することができる。
ルールの追加画面。キモとなるのは Match criteria という項目。ここでイメージの削除条件を決める。
条件は Image count more than
もしくは Since image pushed
を選択できる。前者は指定した数(=n)を超えてイメージが存在しているときに最新n個のイメージは残りその他のイメージは削除される。後者はpushされてからn日を超えたイメージは全て削除される。
この時点ではラベルの通り作成したルールは未保存状態なので、 Save and perform dry run
をクリックする。
すると、ルールを適用する場合に削除されるイメージの一覧が表示される。この時点ではリポジトリに全部で4個のイメージが存在しており、その中でタグがついてないものは3個であった。このため、タグのない(=untagged)2個を超える分がここでは表示されている。dry runしてみて良さげであれば Apply as lifecycle policy
をクリックして実際に適用することができる。
これは、クリック直後のリポジトリ内のイメージ一覧であるが変化はなかった。
ライフサイクルポリシーの作成後、影響を受けるイメージは 24 時間以内に有効期限切れになります。
ドキュメントを見ると即時削除されるわけではないので気長に待ちましょう。
時間が経ってからコンソールを確認すると設定したポリシーが実行されたログが残っていた。
リポジトリ内のイメージを見ると確かにタグの無いイメージは2個になっている。素晴らしい。
今回はお試しで簡易に確認するため制限数を少なくしたが、90日とか180日とかプロジェクトのライフサイクルに合わせて設定しておけば、docker pushしようとしたらリポジトリいっぱいでした〜みたいなトラブルを避けられるのでいいなと感じた。