こんにちは、岩城です。
本日、表題のアップデートがありましたので紹介します。
忙しい人向けまとめ
- ライフサイクルポリシーに`タグ付き(ワイルドカードマッチング)が追加された
- ワイルドカードに指定できるのは
*(アスタリスク)
のみ - 1つのタグに含められるワイルドカードは3つまで、4つ登録しようとするとエラーになる
- 従来の
タグ付け済み
は`タグ付き(プレフィックマッチング)というメニューに変わった - CloudFormationにも対応している
やってみた
マネジメントコンソール
実際にやってみます。
本エントリでは検証用にリポジトリを作成しました。レポジトリの作成が終わったらライフサイクルポリシーの画面に遷移し、ルールを作成します。
イメージのステータスにタグ付き(ワイルドカードマッチング)
が追加され、従来のタグ付け済み
からタグ付け(プレフィックマッチング)
に変わっていました。
ワイルドカードマッチング用のタグ指定フォームに、ワイルドカード含むタグの文字列のリストを指定します。
なお、コンソールに記載はありませんが、公式ドキュメントに1つのタグに含められるワイルドカードは3つまで、4つ以上は無効と記載がありました。
この点の動作確認も行うため、以下のタグパターンを指定するライフサイクルポリシーをそれぞれ作成しました。
prod*
test-1*linux
test-2*1*2*3
test-3*1*2*3*
test-4*1*2*3*4*
単一のライフサイクルポリシーで複数タグを指定することもできるのですが、指定したタグすべてに一致するイメージが対象となります。
感覚的には、どれか一つでも該当するイメージが対象となるような気がするかも知れませんが、そうではないので注意しましょう(私はハマりました)。
test-4*1*2*3*4*
を指定したライフサイクルポリシー作成しようとすると、
Invalid parameter at 'LifecyclePolicyText' failed to satisfy constraint: 'Lifecycle policy validation failure: Invalid tag pattern provided. Total number of * must not exceed 4'
とエラーが出力されました。ドキュメントどおりですね。
検証用のライフサイクルポリシーの準備が整いました。
指定したタグに合うように適当にイメージをプッシュして動作確認をします。なお、本エントリでは動作確認をすぐ行うため、ライフサイクルルールで保存するイメージ数を1つとしています。
実はライフサイクルルールはルールに一致したイメージがあっても即座に当該イメージを削除せず、24時間以内に削除するというふわっとした仕様です。
すぐに動作確認したいので、テストライフサイクルールの機能を使い、DryRunして意図した動作になるか確認します。
私のイメージタグの命名センスが絶望的で分かりづらいのですが、古いイメージが各ルールによって選出されているのが分かると思います。
CloudFormation
CloudFortmationにも対応しているのを確認しました。
AWSTemplateFormatVersion: 2010-09-09
Description: test lifecycle policy
Resources:
Repository:
Type: AWS::ECR::Repository
Properties:
EncryptionConfiguration:
EncryptionType: KMS
ImageTagMutability: IMMUTABLE
LifecyclePolicy:
LifecyclePolicyText: |
{
"rules": [
{
"rulePriority": 1,
"description": "CloudFormation",
"selection": {
"tagStatus": "tagged",
"tagPatternList": ["test5*"],
"countType": "imageCountMoreThan",
"countNumber": 1
},
"action": {
"type": "expire"
}
}
]
}
RegistryId: !Ref AWS::AccountId
RepositoryName: devio-test-iwaki-2
おわりに
私自身、普段コミットハッシュ値をそのままタグに指定しているので、タグの文字列を気にしてライフサイクルルールを作成したことがありませんでした。
検証する上でワイルドカードマッチングやプレフィックスマッチング、単一のライフサイクルルールないで複数タグ指定は想像していた動作じゃなかったりと、色々と知れて良かったです。
本エントリがどなたかのお役に立てれば幸いです。