
Amazon ECR の replication backfill で既存イメージを別リージョンへ複製してみた
はじめに
2026年10月、Amazon ECR が replication backfill に対応し、既存イメージをレプリケーション先へ複製できるようになりました。
この記事では、東京(ap-northeast-1)で作ったリポジトリのイメージを、backfill でバージニア北部(us-east-1)へ複製してみました。
検証の前提
環境
2026年10月28日に AWS CLI 2.39.0 で実行しました。送信元は東京、送信先はバージニア北部で、どちらも同じアカウントです。
送信元のイメージ
検証用リポジトリ backfill-verify/alpine に、Alpine 3.20 / 3.21 / 3.22 の3イメージを、バージョンと同じタグで push しました。サイズは各約4MBです。
レプリケーションルール
リポジトリ名のプレフィックス backfill-verify/ で絞った、バージニア北部向けのルールを追加しました。
replication-config.json と適用コマンド
replication-config.json として保存します。
{
"rules": [
{
"destinations": [
{ "region": "us-east-1", "registryId": "123456789012" }
],
"repositoryFilters": [
{ "filter": "backfill-verify/", "filterType": "PREFIX_MATCH" }
]
}
]
}
aws ecr put-replication-configuration --region ap-northeast-1 --replication-configuration file://replication-config.json
backfill の実行
ジョブの開始
start-replication-backfill に、送信先のリージョンとレジストリIDを --destination で渡します。AWS CLI 2.39.0 の help によると、必須の引数はこれだけで、1回の開始で指定できる送信先は1つです。また、送信先はレジストリのレプリケーション設定に登録済みである必要があります。
aws ecr start-replication-backfill --region ap-northeast-1 --destination region=us-east-1,registryId=123456789012
{
"replicationBackfillId": "<replicationBackfillId>",
"registryId": "123456789012",
"destination": {
"region": "us-east-1",
"registryId": "123456789012"
},
"status": "PREPARING",
"startedAt": "2026-10-28T08:02:46.205000+09:00"
}
AWS CLI の help によると、進行中のジョブは送信先リージョンごとに1件、レジストリ全体で10件までです。同じ送信先リージョンで重ねて開始すると ReplicationBackfillInProgressException が返ります。レジストリ全体で10件を超えると LimitExceededException が返ります。
コンソールからの指定
マネジメントコンソールでは、レプリケーションルールの作成と backfill の指定を、続けて行えます。ルールの編集画面に Backfill のステップがあり、次の3つから選びます。

進捗と結果の取得
CLI で開始したジョブを、開始から約4秒後に list-replication-backfills で確かめると、実行中(IN_PROGRESS)でした。
aws ecr list-replication-backfills --region ap-northeast-1
{
"backfills": [
{
"replicationBackfillId": "<replicationBackfillId>",
"destination": {
"region": "us-east-1",
"registryId": "123456789012"
},
"status": "IN_PROGRESS",
"progress": {
"totalReplicationCount": 6,
"completedReplicationCount": 0,
"failedReplicationCount": 0,
"failureCodes": []
},
"startedAt": "2026-10-28T08:02:46.205000+09:00"
}
],
"registryId": "123456789012"
}
AWS CLI の help によると、複製結果の一覧は、ジョブが終了状態になってから describe-replication-backfill-results で取得できます。完了後に、開始応答の replicationBackfillId を指定して取得した応答は次のとおりです。
aws ecr describe-replication-backfill-results --region ap-northeast-1 --replication-backfill-id <replicationBackfillId>
{
"results": [
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:70dd3b2d5dfe6d5c0f8e750ab65fed2c3511d01c80aaaeb86476aad27a0ca985"
},
"status": "COMPLETE"
},
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:3e07a4f627d12468155eb812785e10f2453a447c346872b47788a62437366764"
},
"status": "COMPLETE"
},
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:45e09956dc667c5eff3583c9d94830261fb1ca0be10a0a7db36266edf5de9e1d",
"imageTag": "3.20"
},
"status": "COMPLETE"
},
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:70dd3b2d5dfe6d5c0f8e750ab65fed2c3511d01c80aaaeb86476aad27a0ca985",
"imageTag": "3.21"
},
"status": "COMPLETE"
},
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:3e07a4f627d12468155eb812785e10f2453a447c346872b47788a62437366764",
"imageTag": "3.22"
},
"status": "COMPLETE"
},
{
"repositoryName": "backfill-verify/alpine",
"imageId": {
"imageDigest": "sha256:45e09956dc667c5eff3583c9d94830261fb1ca0be10a0a7db36266edf5de9e1d"
},
"status": "COMPLETE"
}
],
"replicationBackfillId": "<replicationBackfillId>",
"status": "COMPLETE",
"progress": {
"totalReplicationCount": 6,
"completedReplicationCount": 6,
"failedReplicationCount": 0,
"failureCodes": []
},
"startedAt": "2026-10-28T08:02:46.205000+09:00",
"endedAt": "2026-10-28T08:03:05.464000+09:00",
"failureCode": null,
"registryId": "123456789012",
"destination": {
"region": "us-east-1",
"registryId": "123456789012"
}
}
イメージは3個ですが、totalReplicationCount と results の件数はどちらも6でした。totalReplicationCount は実行中の時点から6でした。results には、3つのダイジェストそれぞれがタグなしとタグ付きの2件ずつ現れています。
startedAt から endedAt までは約19秒でした。
複製結果
ダイジェストの比較
送信先には3イメージが揃い、タグ、ダイジェスト、サイズが送信元と一致しました。
| タグ | 送信元のダイジェスト | 送信先のダイジェスト | サイズ(バイト) |
|---|---|---|---|
| 3.20 | sha256:45e09956dc667c5eff3583c9d94830261fb1ca0be10a0a7db36266edf5de9e1d | sha256:45e09956dc667c5eff3583c9d94830261fb1ca0be10a0a7db36266edf5de9e1d | 4092947 |
| 3.21 | sha256:70dd3b2d5dfe6d5c0f8e750ab65fed2c3511d01c80aaaeb86476aad27a0ca985 | sha256:70dd3b2d5dfe6d5c0f8e750ab65fed2c3511d01c80aaaeb86476aad27a0ca985 | 3974998 |
| 3.22 | sha256:3e07a4f627d12468155eb812785e10f2453a447c346872b47788a62437366764 | sha256:3e07a4f627d12468155eb812785e10f2453a447c346872b47788a62437366764 | 4128008 |
まとめ
従来のレプリケーションは、設定後に push されたイメージだけが対象でした。そのため、既存イメージを送信先へ複製するには、タグを付け直すか、イメージを pull して送信先へ直接 push する必要がありました。
複数のリージョンやアカウントで共通のイメージを利用するプライベートリポジトリで、既存イメージの複製が必要な場合は、今回サポートされた replication backfill をご活用ください。








