Amazon ECR の replication backfill で既存イメージを別リージョンへ複製してみた

Amazon ECR の replication backfill で既存イメージを別リージョンへ複製してみた

Amazon ECR の replication backfill で、レプリケーションの設定前に push した既存イメージを東京からバージニア北部へ複製しました。backfill を実行すると、送信元と同じダイジェストのイメージが送信先に揃いました。
2026.10.28

はじめに

2026年10月、Amazon ECR が replication backfill に対応し、既存イメージをレプリケーション先へ複製できるようになりました。

https://aws.amazon.com/about-aws/whats-new/2026/10/replication-backfill-amazon-ecr/

この記事では、東京(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つから選びます。

ECR のレプリケーションルール編集画面の Backfill ステップ。Don't backfill、Backfill all destinations、Backfill selected destinations の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 をご活用ください。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事