はじめに
Amazon ECRのライフサイクルルールを設定する際「どの項目をどういった値にするとどんな判定がされるのか」「and? or?」などで混乱することがあります。
テストルールを作成してプレビューすることもできますが、そのためにはある程度散乱したイメージファイルが溜まっていないと期待に見合った境界値設定ができているのか確認できません。
ここではライフサイクルルールを追加の画面における各種項目値についての注意点をまとめました。
設定単位
- リポジトリ単位で異なるルールリストを作成できます
- 逆に言えばリポジトリ単位で作成する必要があります
- 作成したルールは JSON 形式で確認、コピペ可能です
ルールの優先度
- 必ずしも連番である必要はありません
ルールの説明 - オプション
- 未入力も可
イメージタグのステータス
タグ付き(ワイルドカードマッチング)
ワイルドカードを使ったタグ条件を指定できます
- ワイルドカード
*は0文字以上の文字に一致します- 例)
-
prod*とした場合の適用例:prodprod1repo-productionなど
-
- 例)
-
?(任意の1文字)は使えません - 複数の条件を組み合わせることも可能です
- 上記例では
ver*.*.0*-developの2つのタグがイメージを条件としています
- 上記例では
or ではなく and 条件となります
「両方のタグが付いている単一のイメージ」が対象になります。「どっちかのタグがあれば対象(or)」ではないため、orにしたい場合はルール自体を2つに分ける必要があります。
タグ付き(プレフィックスマッチング)
先頭文字列を使ったタグ条件を指定できます
- こちらも複数の条件を組み合わせることも可能です
or ではなく and 条件となる点はワイルドカードマッチングと同じです
1つのイメージファイルに単一のタグしか付けていない運用の場合は
プレフィックスマッチングで2つ以上のフィルターを指定することはないかと思います
タグなし
現時点でタグがついていないことを条件として指定できます
すべて
全てです。タグが付いていようがいまいが対象とします
一致条件
イメージが作成されてから経過した日数
最後に記録されたプル時刻から経過した日数
こちらの条件を使った場合、ルールアクションとして「失効」させることはできません
一度もプルされていないイメージ(「最後にプルされた時刻」が「-」)でも対象とされました。
その場合は「プッシュされた日時」を基準値として利用しているようです。
イメージがアーカイブされてから経過した日数
こちらの条件を使った場合、ルールアクションとして「アーカイブ」させることはできません。そりゃそう。
90 日以上の数値でなければ登録できません
アクションまでの日数
JSON を直接編集するなどすれば 90 日未満の日数でも保存可能かもしれません。(試してませんが)
但し アーカイブしてから90日以内に削除しても、90日分フルで料金を請求されます。
これはAWSのストレージサービス(S3 Glacierなど)でよく見られる仕様で、アーカイブストレージの単価を安く設定している代わりにすぐに消されると採算が取れないため、このようなルールが設けられています。
具体例でシミュレーション
ケースA:アーカイブして100日で削除
- 100日間分のストレージ料金が請求されます
- 実日数分なので損はありません
ケースB:アーカイブして30日で削除
- 30日間分の料金だけでなく、残りの60日間分も「早期削除料金」として請求されます
- 結果として 90日間ずっと置いておいたのと同じ金額を支払うことになります
イメージ数
タグステータスで絞り込んだリストを「プッシュされた日時」降順に並び替えた結果、指定値を超えたファイルが対象となります
ルールアクション
が失効
イメージを削除します
をアーカイブ
イメージをアーカイブストレージクラスに移動します
アーカイブストレージとは?
ECRにはこれまで1種類の保存場所(標準)しかありませんでしたが、現在は2つの「階層(クラス)」を使い分けることができます。
| ストレージクラス | 特徴 | コスト | 用途 |
|---|---|---|---|
| 標準 (Standard) | すぐにプル(取得)できる | 高め | 開発中、本番稼働中のイメージ |
| アーカイブ (Archive) | プルする前に「復元」が必要 | 約1/10と格安 | 監査用、バックアップ用、古い年月タグ |
ライフサイクルルールで action に「アーカイブ(Archive)」を指定すると、イメージは以下のような状態になります。
- 直接プルできなくなる
- docker pull しようとしてもエラーになります
- 復元(Restore)が必要
- 再び使うには、マネジメントコンソール等から「復元」リクエストを出し、数時間待つ必要があります
- ストレージ料金が激減する
- 保管料が大幅に安くなります










