[アップデート] Amazon ECR のイメージタグのミュータビリティ設定機能が除外フィルターをサポートしました
いわさです。
コンテナイメージを運用する際に同じタグでプッシュする latest 運用というものがあります。
楽にデプロイできる反面、トレーサビリティの問題で運用上の問題が生じやすいという課題があります。
そのため、AWS のコンテナレジストリ Amazon Elastic Container Registry (ECR) では、リポジトリごとにタグのミュータビリティ設定を行うことができ、同じタグでプッシュされたものを拒否することができます。
先日のアップデートで、この ECR リポジトリのミュータビリティ設定でタグの除外設定を行うフィルターが追加されました。
これによって、例えば運用環境用のタグでは従来どおり上書きを許可したくないが、機能ブランチ開発時は同一タグのプッシュを許可したいなど、例外を設定することで様々なタグ運用のユースケースに柔軟に対応できるようになります。
リポジトリの設定
今回のアップデートで、リポジトリの新規作成/編集時のイメージタグミュータビリティ設定に次のように除外フィルター機能が追加されました。
この機能はイメージタグの上書きを許可しつつ例外を設定したり、上書きを許可しない設定で例外を許可するなど、どちらのパターンでも適用が可能です。
今回は基本的にタグ上書きを許可しない設定にした上で、dev-hoge
というタグだけは許可するような設定をしてみたいと思います。
対象のタグを入力してフィルターを追加ボタンを押します。
そうすると適用できるようになります。フィルターの追加やリポジトリの更新を忘れないようにしましょう。
なお、今回は単一のタグをフィルターに設定しましたが、ワイルドカードを最大2tuまで含めることができます。
フィルターの最大数が 5 つまでです。
除外ルールに一致しない場合
まずは従来どおりタグのミュータビリティ設定によって拒否されるパターンを試してみます。
v1 というタグイメージがプッシュ済みの状態で、同一タグでプッシュしてみます。
% docker build -t hoge0724immutabletag .
% docker tag hoge0724immutabletag:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:v1
% docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:v1
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag]
81b3f4a69684: Layer already exists
tag invalid: The image tag 'v1' already exists in the 'hoge0724immutabletag' repository and cannot be overwritten because the tag is immutable.
タグが上書きできないからということで、拒否されましたね。
期待どおりの挙動です。
除外ルールに一致するタグの場合
このリポジトリがイメージタグの上書きができない状態であることが確認出来ました。
ここで除外ルールに一致するタグを設定してみます。
まずは初回のプッシュをします。
% docker tag hoge0724immutabletag:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:dev-hoge
% docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:dev-hoge
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag]
81b3f4a69684: Layer already exists
dev-hoge: digest: sha256:fbae9c2fb9a7a067c7a8503adf256cdb8fbf9977d255bb875bd773fda65f2541 size: 527
dev-hoge タグのイメージをプッシュしました。
もう一度同じタグでプッシュしてみましょう。
% docker build -t hoge0724immutabletag .
% docker tag hoge0724immutabletag:latest 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:dev-hoge
% docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag:dev-hoge
The push refers to repository [123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/hoge0724immutabletag]
81b3f4a69684: Layer already exists
dev-hoge: digest: sha256:a9398ff07c8fec86662ef063212648676076eb36ff61fe640d03e202811da756 size: 527
%
今度は拒否されずに成功しましたね。
dev-hoge タグイメージのプッシュ日時やダイジェストが更新されたことが確認できると思います。
さいごに
本日は Amazon ECR のイメージタグのミュータビリティ設定機能が除外フィルター機能をサポートしたので試してみました。
同一リポジトリ内で、本番運用環境のタグでは latest 運用を拒否しつつ、一部のタグについては許可したいケースに対応できそうですね。