

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon ECR でのプライベートイメージレプリケーション
<a name="replication"></a>

リポジトリのレプリケーションをサポートするために、Amazon ECR プライベートレジストリを構成できます。Amazon ECR は、クロスリージョンレプリケーションおよびクロスアカウントレプリケーションの両方をサポートしています。クロスアカウントレプリケーションを実行するには、ターゲットアカウントで、ソースレジストリからのレプリケーションを許可するレジストリのアクセス許可ポリシーを設定する必要があります。詳細については、「[Amazon ECR でのプライベートレジストリのアクセス許可](registry-permissions.md)」を参照してください。

**Topics**
+ [クロスアカウントレプリケーションポリシーの要件](#replication-policy-clarification)
+ [プライベートイメージのレプリケーションに関する考慮事項](#replication-considerations)
+ [Amazon ECR でのプライベートイメージレプリケーションの例](registry-settings-examples.md)
+ [Amazon ECR でのプライベートイメージレプリケーションの設定](registry-settings-configure.md)
+ [Amazon ECR でのプライベートイメージレプリケーション設定の削除](registry-settings-remove.md)

## クロスアカウントレプリケーションポリシーの要件
<a name="replication-policy-clarification"></a>

クロスアカウント ECR レプリケーションを正しく機能させるには、どのアカウントでどのポリシーが設定されているかを理解する必要があります。このセクションでは、送信元アカウントと送信先アカウントの両方のポリシー要件について説明します。

### ポリシー設定の概要
<a name="replication-policy-overview"></a>

クロスアカウント ECR レプリケーションでは、**送信先アカウントのみ**のポリシー設定が必要です。ソースアカウントには、特別なリポジトリポリシーやレジストリポリシーは必要ありません。
+ **ソースアカウント**: レジストリ設定でレプリケーションルールを設定します。ソースリポジトリに追加のポリシーは必要ありません。
+ **送信先アカウント**: ソースアカウントにイメージのレプリケートを許可するレジストリアクセス許可ポリシーを設定します。

### 送信先レジストリポリシーの要件
<a name="destination-registry-policy-requirements"></a>

送信先アカウントは、次のアクションを実行するアクセス許可をソースアカウントに付与するレジストリアクセス許可ポリシーを設定する必要があります。
+ `ecr:ReplicateImage` - ソースアカウントがイメージを送信先レジストリにレプリケートすることを許可します。
+ `ecr:CreateRepository` - リポジトリがまだ存在しない場合、ECR が宛先レジストリにリポジトリを自動的に作成することを許可します。

**重要**  
`ecr:CreateRepository` アクセス許可を付与しない場合は、レプリケーションが成功する前に、レプリケート先アカウントで同じ名前のリポジトリを手動で作成する必要があります。

送信先レジストリポリシーの例:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowCrossAccountReplication",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "ecr:ReplicateImage",
                "ecr:CreateRepository"
            ],
            "Resource": "*"
        }
    ]
}
```

------

### ソースアカウント要件
<a name="source-account-requirements"></a>

ソースアカウントには以下のことが必要です。
+ レジストリ設定でレプリケーションルールを設定して、レプリケート先アカウントとリージョンを指定する。
+ レプリケーションを設定する IAM プリンシパルに必要な ECR アクセス許可があることを確認する。

**ソースリポジトリに追加のポリシーは必要ありません。**ソースリポジトリには、レプリケーション許可を付与するリポジトリポリシーは必要ありません。

### 一般的な誤解
<a name="common-misconceptions"></a>

ECR クロスアカウントレプリケーションポリシーに関する一般的な誤解を以下に示します。
+ **誤解**: ソースリポジトリには、送信先アカウントがイメージをレプリケートできるようにするポリシーが必要です。

  **現実**: ソースリポジトリには、レプリケーションのための特別なポリシーは必要ありません。
+ **誤解**: 送信元アカウントと送信先アカウントの両方にレジストリポリシーが必要です。

  **現実**: レジストリアクセス許可ポリシーが必要なのは、送信先アカウントのみです。
+ **誤解**: リポジトリポリシーとレジストリポリシーは同じものです。

  **現実**: リポジトリポリシーは個々のリポジトリへのアクセスを制御し、レジストリポリシーはレプリケーションなどのレジストリレベルのオペレーションを制御します。

### レプリケーション失敗のトラブルシューティング
<a name="replication-troubleshooting"></a>

クロスアカウントレプリケーションが失敗する場合は、以下を確認してください。
+ 送信先アカウントにレジストリアクセス許可ポリシーが設定されていることを確認します。
+ レジストリポリシーに `ecr:ReplicateImage` アクションと `ecr:CreateRepository` アクションの両方が含まれていることを確認します。
+ 送信元アカウント ID が送信先レジストリポリシーで正しく指定されていることを確認します。
+ 送信先リポジトリが存在することを確認する (`ecr:CreateRepository` が付与されていない場合)
+ CloudTrail ログで失敗した `CreateRepository` コールまたは `ReplicateImage` API コールを確認する

## プライベートイメージのレプリケーションに関する考慮事項
<a name="replication-considerations"></a>

プライベートイメージのレプリケーションを使用する際には、以下の点を考慮する必要があります。
+ レプリケーションの設定後にリポジトリにプッシュまたは復元されたリポジトリコンテンツのみがレプリケートされます。リポジトリ内の既存のコンテンツはいずれも複製されません。レプリケーションがオンになった後にイメージが復元されると、レプリケートされます。レプリケーションがオンになる前に復元された場合、レプリケートされません。
+ レプリケーションが行われても、リポジトリ名はリージョンとアカウント間で同じままです。Amazon ECR はレプリケーション中のリポジトリ名の変更をサポートしていません。
+ レプリケーション用にプライベートレジストリを初めて設定すると、Amazon ECR は、お客様に代わってサービスにリンクされた IAM ロールを作成します。サービスにリンクされた IAM ロールは、レジストリでレポジトリの作成とイメージのレプリケートを行うために必要なアクセス許可を Amazon ECR レプリケーションサービスに付与します。詳細については、「[Amazon ECR でのサービスにリンクされたロールの使用](using-service-linked-roles.md)」を参照してください。
+ クロスアカウントレプリケーションを実行するには、プライベートレジストリのレプリケート先が、ソースレジストリによるそのイメージのレプリケートを許可する必要があります。これは、プライベートレジストリの許可ポリシーを設定することによって許可できます。詳細については、「[Amazon ECR でのプライベートレジストリのアクセス許可](registry-permissions.md)」を参照してください。
+ プライベートレジストリの許可ポリシーが許可を取り消すように変更された場合でも、以前に許可された進行中のレプリケーションは完了することができます。
+ クロスリージョンレプリケーションを行うには、そのリージョン内またはリージョンに対してレプリケーションアクションが発生する前に、ソースアカウントとターゲットアカウントの両方がリージョンにオプトインされている必要があります。詳細については、「Amazon Web Services 全般のリファレンス」の「[AWS リージョンの管理](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html)」を参照してください。
+  AWS パーティション間のクロスリージョンレプリケーションはサポートされていません。たとえば、`us-west-2` のリポジトリは ` cn-north-1` にレプリケートできません。 AWS パーティションの詳細については、*AWS 「 全般のリファレンス*」の[「ARN 形式](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html#arns-syntax)」を参照してください。
+ プライベートレジストリのレプリケーション設定には、すべてのルール (合計で最大 10 個) 全体で最大 25 個の一意のレプリケート先を含めることができます。各ルールには、最大 100 個のフィルターを含めることができます。これは、例えば本番環境やテスト用に使用されるイメージが含まれるリポジトリに対して個別のルールを指定することを可能にします。
+ レプリケーション設定は、リポジトリプレフィックスを指定することによって、プライベートレジストリ内のレプリケートされるリポジトリのフィルタリングをサポートします。例については、「[例: リポジトリフィルターを使用したクロスリージョンレプリケーションの設定](registry-settings-examples.md#registry-settings-examples-crr-filter)」を参照してください。
+ レプリケーションアクションは、イメージのプッシュまたはイメージの復元ごとに 1 回のみ発生します。たとえば、`us-west-2` から ` us-east-1` および `us-east-1` から `us-east-2` へのクロスリージョンレプリケーションを設定した場合、`us-west-2` にプッシュされたイメージは `us-east-1` にのみレプリケートされ、`us-east-2` には再度レプリk-トされません。この動作は、クロスリージョンおよびクロスアカウントのレプリケーションの両方に適用されます。
+ 大部分のイメージは 30 分以内にレプリケートされますが、まれにレプリケーションに時間がかかることがあります。
+ レジストリレプリケーションでは、削除アクションやアーカイブアクションは実行されません。レプリケートされたイメージとリポジトリは、使用されなくなったときに削除またはアーカイブできます。
+ レプリケートするイメージがレプリケート先でアーカイブされている場合、レプリケート先で復元されます。
+ イメージがソースリージョンにアーカイブされている場合、レプリケーション設定で指定されたレプリケート先リージョンにはアーカイブされません。
+ IAM ポリシーやライフサイクルポリシーなどのリポジトリポリシーはレプリケートされず、定義されているリポジトリ以外には影響しません。
+ リポジトリ設定はデフォルトでレプリケートされません。リポジトリ作成テンプレートを使用してリポジトリ設定をレプリケートできます。これらの設定には、タグのミュータビリティ、暗号化、リポジトリのアクセス許可、ライフサイクルポリシーが含まれます。リポジトリ作成テンプレートの詳細については、「[プルスルーキャッシュ、プッシュ時作成、またはレプリケーションアクション中に作成されたリポジトリを制御するテンプレート](repository-creation-templates.md)」を参照してください。
+ リポジトリでタグのイミュータブル性が有効で、既存のイメージと同じタグを使用するイメージをレプリケートする場合、イメージはレプリケートされますが、重複したタグは含まれません。その結果、イメージのタグ付けが解除される可能性があります。
+ イメージをレプリケートするときに、BLOB マウントが設定されている場合、ECR はソースリポジトリのレイヤーがレプリケート先レジストリに既に存在することを確認します。レプリケート先レジストリにレイヤーが既に存在する場合、ECR はそれらのレイヤーをマウントします。

**注記**  
ソースレジストリがレプリケート先レジストリと異なる場合、ECR がレプリケートされたレイヤーをマウントするには、両方のレジストリで BLOB マウントを有効にする必要があります。

# Amazon ECR でのプライベートイメージレプリケーションの例
<a name="registry-settings-examples"></a>

以下の例は、プライベートのイメージレプリケーションの一般的な使用事例を示しています。を使用してレプリケーションを設定する場合は AWS CLI、JSON ファイルを作成する際の出発点として JSON の例を使用できます。 AWS マネジメントコンソールを使用してレプリケーションを設定する場合は、**[確認して送信]** ページでレプリケーションルールを確認すると、同様の JSON が表示されます。

## 例: 単一の送信先リージョンへのクロスリージョンレプリケーションの設定
<a name="registry-settings-examples-crr-single"></a>

次に、単一のレジストリ内でのクロスリージョンレプリケーション設定の例を示します。この例では、アカウント ID が ` 111122223333` であること、およびこのレプリケーション設定が `us-west-2` 以外のリージョンで指定されていることを前提とします。

```
{
    "rules": [
        {
            "destinations": [
                {
                    "region": "us-west-2",
                    "registryId": "111122223333"
                }
            ]
        }
    ]
}
```

## 例: リポジトリフィルターを使用したクロスリージョンレプリケーションの設定
<a name="registry-settings-examples-crr-filter"></a>

以下は、プレフィックス名の値と一致するリポジトリのクロスリージョンレプリケーションを設定する例です。この例は、アカウント ID が ` 111122223333` であること、`us-west-1` 以外のリージョンでこのレプリケーション設定を指定していること、およびプレフィックスが `prod` のリポジトリがあることを前提としています。

```
{
	"rules": [{
		"destinations": [{
			"region": "us-west-1",
			"registryId": "111122223333"
		}],
		"repositoryFilters": [{
			"filter": "prod",
			"filterType": "PREFIX_MATCH"
		}]
	}]
}
```

## 例: 複数の送信先リージョンへのクロスリージョンレプリケーションの設定
<a name="registry-settings-examples-crr-multipledestinations"></a>

次に、単一のレジストリ内でのクロスリージョンレプリケーション設定の例を示します。この例では、アカウント ID が ` 111122223333`であり、 `us-west-1`または `us-west-2` 以外のリージョンでこのレプリケーション設定を指定することを前提としています。

```
{
    "rules": [
        {
            "destinations": [
                {
                    "region": "us-west-1",
                    "registryId": "111122223333"
                },
                {
                    "region": "us-west-2",
                    "registryId": "111122223333"
                }
            ]
        }
    ]
}
```

## 例: クロスアカウントレプリケーションの設定
<a name="registry-settings-examples-crossaccount"></a>

次に、レジストリのクロスアカウントレプリケーション設定の例を示します。この例では、`444455556666` アカウントと `us-west-2` リージョンも対するレプリケーションを設定します。

**重要**  
クロスアカウントレプリケーションを実行するには、ターゲットアカウントで、レプリケーションを許可するレジストリのアクセス許可ポリシーを設定する必要があります。詳細については、「[Amazon ECR でのプライベートレジストリのアクセス許可](registry-permissions.md)」を参照してください。

```
{
    "rules": [
        {
            "destinations": [
                {
                    "region": "us-west-2",
                    "registryId": "444455556666"
                }
            ]
        }
    ]
}
```

## 例: 1 つの設定内での複数のルールの指定
<a name="registry-settings-examples-multiple-rules"></a>

以下は、レジストリに複数のレプリケーションルールを設定する例です。この例では、プレフィックスが のリポジトリを*リージョンに、プレフィックスが のリポジトリをリージョンにレプリケートする 1 つのルールを使用して、111122223333* アカウントのレプリケーションを設定します`test``us-east-2`。 `prod` `us-west-2`レプリケーション設定には最大 10 個のルールを含めることができ、各ルールが最大 25 個の送信先を指定します。

```
{
	"rules": [{
			"destinations": [{
				"region": "us-west-2",
				"registryId": "111122223333"
			}],
			"repositoryFilters": [{
				"filter": "prod",
				"filterType": "PREFIX_MATCH"
			}]
		},
		{
			"destinations": [{
				"region": "us-east-2",
				"registryId": "111122223333"
			}],
			"repositoryFilters": [{
				"filter": "test",
				"filterType": "PREFIX_MATCH"
			}]
		}
	]
}
```

## 例: すべてのレプリケーション設定を削除する
<a name="registry-settings-examples-remove"></a>

レジストリからすべてのレプリケーション設定を削除する例を次に示します。レプリケーション設定を削除するには、空のルール配列を設定する必要があります。

```
{
    "rules": []
}
```

**重要**  
レプリケーション設定を削除しても、以前にレプリケートされたリポジトリやイメージは削除されません。AMI が不要になった場合は、手動で削除する必要があります。

# Amazon ECR でのプライベートイメージレプリケーションの設定
<a name="registry-settings-configure"></a>

プライベートレジストリのリージョンごとのレプリケーションを設定します。クロスリージョンまたはクロスアカウントのレプリケーションを設定できます。

レプリケーションの一般的な使用方法の例については、[Amazon ECR でのプライベートイメージレプリケーションの例](registry-settings-examples.md) を参照してください。

## レジストリのレプリケーション設定を構成するには (AWS マネジメントコンソール)
<a name="registry-settings-configure-console"></a>

1. [https://console.aws.amazon.com/ecr/repositories](https://console.aws.amazon.com/ecr/repositories) で Amazon ECR コンソールを開きます。

1. ナビゲーションバーから、レジストリのレプリケーション設定を構成するリージョンを選択します。

1. ナビゲーションペインで、[**Private registry**] (プライベートレジストリ) を選択します。

1. **プライベートレジストリ**ページで、**設定**を選択し、**レプリケーション設定**で**編集**を選択します。

1. [**Replication**] (レプリケーション) ページで [**Add replication rule**] (レプリケーションルールを追加) をクリックします。

1. [**Destination types**] (送信先タイプ) ページで、クロスリージョンレプリケーションもしくはクロスアカウントレプリケーションのいずれか、またはそれら両方を有効にしてから、[**Next**] (次へ) をクリックします。

1. クロスリージョンレプリケーションを有効にした場合は、[**Configure destination regions**] (送信先リージョンを設定) で、1 つ、または複数の [**Destination regions**] (送信先リージョン) を選択し、[**Next**] (次へ) をクリックします。

1. クロスアカウントレプリケーションを有効にした場合は、[**Cross-account replication**] (クロスアカウントレプリケーション) で、レジストリのクロスアカウントレプリケーション設定を選択します。[**Destination account**] (送信先アカウント) には送信先アカウントのアカウント ID を入力し、レプリケート先にする 1 つ、または複数の [**Destination regions**] (送信先リージョン) を選択します。レプリケーションの送信先として追加のアカウントを設定するには、[**Destination account \$1**] (送信先アカウント \$1) をクリックします。
**重要**  
クロスアカウントレプリケーションを実行するには、ターゲットアカウントで、レプリケーションを許可するレジストリのアクセス許可ポリシーを設定する必要があります。詳細については、「[Amazon ECR でのプライベートレジストリのアクセス許可](registry-permissions.md)」を参照してください。

1. (オプション) [**Add filters**] (フィルターを追加) ページで、レプリケーションルールに対して 1 つ、または複数のフィルターを指定してから、[**Add**] (追加) をクリックします。レプリケーションアクションに関連付けるフィルターごとに、このステップを繰り返します。フィルターはリポジトリ名のプレフィックスとして指定する必要があります。フィルターを追加しない場合、すべてのリポジトリの内容が複製されます。[**Next**] (次へ) をクリックすると、すべてのフィルターが追加されます。

1. [**Review and submit**] (確認して送信) ページでレプリケーションルールの設定を確認してから、[**Submit rule**] (ルールを送信) をクリックします。

## レジストリのレプリケーション設定を構成するには (AWS CLI)
<a name="registry-settings-configure-cli"></a>

1. レジストリ用に定義するレプリケーションルールが含まれた JSON ファイルを作成します。レプリケーション設定には最大 10 個のルールを含めることができ、各ルールが最大 25 個の送信先と 100 個のフィルターを指定します。独自のアカウント内でクロスリージョンレプリケーションを設定するには、独自のアカウント ID を指定します。その他の例については、「[Amazon ECR でのプライベートイメージレプリケーションの例](registry-settings-examples.md)」を参照してください。

   ```
   {
   	"rules": [{
   		"destinations": [{
   			"region": "destination_region",
   			"registryId": "destination_accountId"
   		}],
   		"repositoryFilters": [{
   			"filter": "repository_prefix_name",
   			"filterType": "PREFIX_MATCH"
   		}]
   	}]
   }
   ```

1. レジストリのレプリケーション設定を作成します。

   ```
   aws ecr put-replication-configuration \
        --replication-configuration file://replication-settings.json \
        --region us-west-2
   ```

1. レジストリ設定を確認します。

   ```
   aws ecr describe-registry \
        --region us-west-2
   ```

# Amazon ECR でのプライベートイメージレプリケーション設定の削除
<a name="registry-settings-remove"></a>

プライベートレジストリのレプリケーション設定を削除または無効化するには、空のレプリケーション設定を設定する必要があります。 AWS CLIに専用の削除コマンドはありません。

## レジストリレプリケーション設定を削除するには (AWS マネジメントコンソール)
<a name="registry-settings-remove-console"></a>

1. [https://console.aws.amazon.com/ecr/repositories](https://console.aws.amazon.com/ecr/repositories) で Amazon ECR コンソールを開きます。

1. ナビゲーションバーから、レジストリのレプリケーション設定を削除するリージョンを選択します。

1. ナビゲーションペインで、[**Private registry**] (プライベートレジストリ) を選択します。

1. **プライベートレジストリ**ページで、**設定**を選択し、**レプリケーション設定**で**編集**を選択します。

1. 各ルールの削除オプションを選択して、既存のレプリケーションルールをすべて削除します。

1. **[保存]** を選択して、空のレプリケーション設定を適用します。

## レジストリレプリケーション設定を削除するには (AWS CLI)
<a name="registry-settings-remove-cli"></a>

1. 空のルール配列を持つ JSON ファイルを作成して、すべてのレプリケーション設定を削除します。

   ```
   {
       "rules": []
   }
   ```

1. 空のレプリケーション設定をレジストリに適用します。

   ```
   aws ecr put-replication-configuration \
        --replication-configuration file://empty-replication-settings.json \
        --region us-west-2
   ```

1. レプリケーション設定が削除されていることを確認します。

   ```
   aws ecr describe-registry \
        --region us-west-2
   ```

   出力には、ルールのない空の `replicationConfiguration` が表示されます。

**重要**  
レプリケーション設定を削除しても、以前にレプリケートされたリポジトリやイメージは削除されません。AMI が不要になった場合は、手動で削除する必要があります。