[アップデート] Amazon ECR のストレージコストを削減できる「アーカイブストレージクラス」がサポートされました
いわさです。
Amazon Elastic Container Registry(Amazon ECR)は AWS マネージドなコンテナレジストリです。
その料金体系は保存されたコンテナイメージが使用しているストレージ容量と、リポジトリから転送されたデータ量によって決まります。
先日の Amazon ECR のアップデートで新たにストレージクラスの概念が追加されました。
これまで東京リージョンであればストレージコストは 1 ヶ月あたり 0.1 USD/GB だったのですが、このアーカイブ機能を使うと一定以上の総容量を超えたものからストレージ単価が安くなります。
東京リージョンの場合だと以下のようになっています。
- 最初の 150 TB までは、月あたり 0.1 USD/GB
- それ以上は、月あたり 0.07 USD/GB
あってるのかな。150 TB までは標準ストレージと同じ単価みたいです。
本日は Amazon ECR のアーカイブストレージ周りを少し触ってみたので紹介します。
アーカイブする
アーカイブですが、明示的に設定が必要です。
手動でアーカイブも出来ますし、ライフサイクルポリシーを使って自動でのアーカイブも出来ます。
まずは手動アーカイブを試してみます。
プライベートレジストリの適当なリポジトリでイメージ詳細画面を開きましょう。

イメージ詳細画面の右上に「アーカイブ」のボタンがありますね。こちらをポチっと押します。

ストレージクラスを ARCHIVE に変更するか聞かれますので、確認ボタンを押します。

そうすると先程選択した latest タグのイメージがイメージ一覧から消えましたね。どこか行っちゃった。

よく見てみると、先ほどは存在していなかった「アーカイブされたイメージ」というタブが表示されています。
どうやらアーカイブされたイメージが存在するリポジトリではこのタブが表示されるみたいです。
このタブを開くと、アーカイブされたイメージを確認することが出来ました。

ちなみに CloudTrail のログを見てみるとアーカイブ操作を行ったときにUpdateImageStorageClassアクションが実行されていました。
新しく API が追加されているみたいですね。
{
"eventVersion": "1.11",
:
"eventTime": "2025-11-19T20:37:45Z",
"eventSource": "ecr.amazonaws.com",
"eventName": "UpdateImageStorageClass",
"awsRegion": "ap-northeast-1",
"requestParameters": {
"repositoryName": "hoge0619img",
"imageId": {
"imageDigest": "sha256:38ae575e06c02d4c7177bf08ebb2a646bf29b3904f9da5f1f6cda9a9165813f3"
},
"targetStorageClass": "ARCHIVE"
},
"responseElements": {
"registryId": "123456789012",
"repositoryName": "hoge0619img",
"imageId": {
"imageDigest": "sha256:38ae575e06c02d4c7177bf08ebb2a646bf29b3904f9da5f1f6cda9a9165813f3"
},
"imageStatus": "ARCHIVED"
},
:
}
ライフサイクルポリシー
Amazon ECR にはライフサイクルポリシーという機能がこれまでもありました。
以前まではライフサイクルポリシーを使うと条件に一致するイメージを自動で削除することが出来ました。
今回のアップデートで削除だけでなくアーカイブも出来るようになっています。見てみましょう。

こちらですね。
アクションに「アーカイブ」が追加されています。
また、一致条件に「イメージがアーカイブされてから経過した日数」というものも追加されています。

数日経過後にアーカイブし、アーカイブされてから数年経ったら削除するとか、そういう組み合わせもできるみたいです。
アーカイブされたイメージを使うには
このアーカイブされたイメージですが、そのまま標準ストレージのようにプルしてくることは出来ません。
事前に標準ストレージへの復元が必要です。S3 Glacier Deep Archive のような感じです。そして復元には数分時間がかかります。やってみましょう。
アーカイブされたイメージを選択して「リストア」ボタンがありますので、そちらを押します。


そうするとイメージのステータスが「アクティベーション」に変化しました。
復元操作が行われているようです。ここで数分待機します。
なお、料金ページに小さく記載されているのですがアーカイブストレージから標準ストレージへのリストアには GB あたりの料金が発生します。

ちなみにこのタイミングのアクションもUpdateImageStorageClassが実行されていました。
{
"eventVersion": "1.11",
:
"eventTime": "2025-11-19T20:47:12Z",
"eventSource": "ecr.amazonaws.com",
"eventName": "UpdateImageStorageClass",
"requestParameters": {
"repositoryName": "dotnet-generic-28d92cb8",
"imageId": {
"imageDigest": "sha256:f42aaf61a6eb7f1d2d036acbf877b4a24a964211d5f899a8a1b269d82bc0e037"
},
"targetStorageClass": "STANDARD"
},
"responseElements": {
"registryId": "123456789012",
"repositoryName": "dotnet-generic-28d92cb8",
"imageId": {
"imageDigest": "sha256:f42aaf61a6eb7f1d2d036acbf877b4a24a964211d5f899a8a1b269d82bc0e037"
},
"imageStatus": "ACTIVATING"
},
:
}
私が試した際には 7~8分程度で復元が完了しました。
復元後はイメージタブに表示されるようになりました。

ドキュメントによると通常で最大 20 分程度かかるがそれよりも早く完了する場合があるとのことです。[1]
また、リポジトリのスキャンやレプリケーションが有効になっている場合は、復元時にそれらの操作も実行されます。
AWS CLI でアーカイブされたイメージを取得する
AWS CLI でイメージ一覧を確認してみたところ、普通の方法だとアーカイブされたイメージが取得出来ませんでした。追加のオプション指定が必要なようです。
本日時点の最新版 v2.32.0 で試してみます。
ここでは次のようにイメージタブに2つのイメージがあり、アーカイブされたイメージが1つあるリポジトリで確認をしてみます。


まず、通常のlist-imagesやdescribe-imagesを使ってみた結果はこんな感じです。アクティブなイメージだけ取得されていることがわかりますね。
ただし、describe-imagesでは以前までは存在していなかったimageStatusが追加されていることが確認できます。
% aws ecr list-images --repository-name hoge0619img
{
"imageIds": [
{
"imageDigest": "sha256:d78f489f08108d86cf9dd48621a7258bcdaf231fe4d1f6492dc3829bdd4af834"
},
{
"imageDigest": "sha256:eda3d693920e4a06832a88e9c8dc9dcd796f14bc748d93d719713f64b352888a",
"imageTag": "latest"
}
]
}
% aws ecr describe-images --repository-name hoge0619img
{
"imageDetails": [
{
"registryId": "123456789012",
"repositoryName": "hoge0619img",
"imageDigest": "sha256:d78f489f08108d86cf9dd48621a7258bcdaf231fe4d1f6492dc3829bdd4af834",
"imageSizeInBytes": 51001235,
"imagePushedAt": "2025-06-19T05:31:50.882000+09:00",
"imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
"artifactMediaType": "application/vnd.docker.container.image.v1+json",
"lastRecordedPullTime": "2025-06-19T05:31:58.136000+09:00",
"imageStatus": "ACTIVE"
},
{
"registryId": "123456789012",
"repositoryName": "hoge0619img",
"imageDigest": "sha256:eda3d693920e4a06832a88e9c8dc9dcd796f14bc748d93d719713f64b352888a",
"imageTags": [
"latest"
],
"imageSizeInBytes": 51032807,
"imagePushedAt": "2025-06-19T05:49:38.619000+09:00",
"imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
"artifactMediaType": "application/vnd.docker.container.image.v1+json",
"lastRecordedPullTime": "2025-06-19T05:49:45.099000+09:00",
"imageStatus": "ACTIVE"
}
]
}
これらの API はオプションで以前からfilterを指定して条件を指定することが出来たのですが、今回のアップデートでフィルターパラメータにもimageStatusが追加されています。
ここでARCHIVEDを指定することでアーカイブされたイメージを取得することが出来ました。
% aws ecr describe-images --repository-name hoge0619img --filter imageStatus=ARCHIVED
{
"imageDetails": [
{
"registryId": "123456789012",
"repositoryName": "hoge0619img",
"imageDigest": "sha256:38ae575e06c02d4c7177bf08ebb2a646bf29b3904f9da5f1f6cda9a9165813f3",
"imageSizeInBytes": 50787328,
"imagePushedAt": "2025-06-19T05:07:42.128000+09:00",
"imageManifestMediaType": "application/vnd.docker.distribution.manifest.v2+json",
"artifactMediaType": "application/vnd.docker.container.image.v1+json",
"lastRecordedPullTime": "2025-06-19T05:07:49.543000+09:00",
"imageStatus": "ARCHIVED",
"lastArchivedAt": "2025-11-20T05:37:45.116000+09:00"
}
]
}
% aws ecr list-images --repository-name hoge0619img --filter imageStatus=ARCHIVED
{
"imageIds": [
{
"imageDigest": "sha256:38ae575e06c02d4c7177bf08ebb2a646bf29b3904f9da5f1f6cda9a9165813f3"
}
]
}
さいごに
本日は Amazon ECR のストレージコストを削減できる「アーカイブストレージクラス」がサポートされたので使ってみました。
150 TB までは標準ストレージと単価が同じみたいなので、ECR のストレージコストで月額 15,000 ドル使っているようであれば採用の余地がある感じでしょうか。
正直その規模で使っているのを私は見たことがないので、どれだけの人が恩恵を受けれるのだろうか。
アーカイブストレージクラスにそれなりに制約があるので、150TB以上と言わずに最初から単価が安めだと採用シーンが多そうです。






