

# S3 Tables レプリケーションの設定
<a name="s3-tables-replication-setting-up"></a>

レプリケーションを設定して、ソーステーブルから最大 5 つのレプリケート先テーブルバケットにテーブルレプリカを自動的に作成できます。レプリケーションは、バケットレベル (バケット内のすべてのテーブルに適用) またはテーブルレベル (特定のテーブル用) で設定できます。このトピックでは、Amazon S3 コンソールまたは AWS コマンドラインインターフェイス (AWS CLI) を使用してレプリケーションを設定する方法について説明します。

レプリケーション設定の詳細については、以下のトピックを参照してください。

**Topics**
+ [

## レプリケーションを設定するための前提条件
](#s3-tables-replication-prerequisites)
+ [

## レプリケーション設定について
](#s3-tables-replication-understanding-configurations)
+ [

## バケットレベルとテーブルレベルのレプリケーションの選択
](#s3-tables-replication-choosing-configuration)
+ [

## Amazon S3 コンソールを使用したレプリケーションの設定
](#s3-tables-replication-console)
+ [

## AWS CLI を使用してレプリケーションを設定する
](#s3-tables-replication-cli)

## レプリケーションを設定するための前提条件
<a name="s3-tables-replication-prerequisites"></a>

レプリケーションセットを設定する前に、次のものが準備されていることを確認してください。

### 必要なリソース
<a name="s3-tables-replication-required-resources"></a>
+ **ソーステーブルバケット** – レプリケートするテーブルを含むテーブルバケット (複数可)
+ **宛先テーブルバケット (複数可)** – テーブルをレプリケートする 1 つ以上のテーブルバケット (最大 5 つの宛先テーブルバケット)
+ **ソーステーブル (複数可)** – レプリケートするソーステーブルバケット内の既存のテーブル
+ **IAM ロール (複数可)** – ユーザーに代わってテーブルをレプリケートするアクセス許可を Amazon S3 に付与する IAM ロール

### 必要なアクセス許可
<a name="s3-tables-replication-required-permissions"></a>

レプリケーションの設定に使用する IAM ID には、次のアクセス許可が必要です。

**バケットレベルのレプリケーションの場合:**
+ ソーステーブルバケットの `s3tables:PutTableBucketReplication`
+ ソーステーブルバケットの `s3tables:GetTableBucketReplication`
+ レプリケーション IAM ロールの `iam:PassRole`

**テーブルレベルのレプリケーションの場合:**
+ ソーステーブルの `s3tables:PutTableReplication`
+ ソーステーブルの `s3tables:GetTableReplication`
+ レプリケーション IAM ロールの `iam:PassRole`

**クロスアカウントレプリケーションの場合:**
+ 送信先アカウントのバケットポリシーからのアクセス許可

### クロスアカウントレプリケーションの追加要件
<a name="s3-tables-replication-cross-account-requirements"></a>

レプリケート元テーブルバケットとレプリケート先テーブルバケットが異なる AWS アカウントにある場合は、以下も必要です。
+ テーブルをレプリケートするアクセス許可をソースアカウントに付与するレプリケート先テーブルバケットのバケットポリシー
+ 送信先アカウント ID とテーブルバケット Amazon リソースネーム (ARN)

### 暗号化されたテーブルの追加要件
<a name="s3-tables-replication-encrypted-requirements"></a>

AWS KMS でレプリカテーブルを暗号化する場合:
+ 送信先リージョンの KMS キー
+ IAM レプリケーションロールで KMS キーを使用するアクセス許可
+ レプリケーションロールにデータの暗号化を許可する KMS キーポリシー

## レプリケーション設定について
<a name="s3-tables-replication-understanding-configurations"></a>

レプリケーション設定は、Amazon S3 がソーステーブルバケットからテーブルをレプリケートする方法を定義します。レプリケーションは次の 2 つのレベルで設定できます。

### バケットレベルのレプリケーション
<a name="s3-tables-replication-bucket-level"></a>

バケットレベルのレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。バケットレベルのレプリケーションを設定すると、Amazon S3 はバケット内に作成された既存のテーブルと新しいテーブルを自動的にレプリケートします。

バケットレベルのレプリケーションは次の場合に使用します。
+ バケット内のすべてのテーブルをレプリケートする
+ すべてのテーブルで一貫したレプリケーション動作が必要
+ 1 つの設定で管理を簡素化したい場合

### テーブルレベルのレプリケーション
<a name="s3-tables-replication-table-level"></a>

テーブルレベルのレプリケーション設定は、特定のテーブルに適用されます。テーブルレベルの設定は、その特定のテーブルのバケットレベルの設定を上書きします。

次の場合は、テーブルレベルのレプリケーションを使用します。
+ 特定のテーブルのみをレプリケートする
+ テーブルごとに異なるレプリケーション先が必要です
+ 特定のテーブルのバケットレベルの設定を上書きする場合

### レプリケーション設定要素
<a name="s3-tables-replication-configuration-elements"></a>

各レプリケーション設定には以下が含まれます。
+ **IAM ロール** – Amazon S3 がレプリケーションオペレーションを実行するために引き受けるロール
+ **ルール** – 1 つ以上のレプリケーションルール (起動時に 1 つのルールに制限されます)。各ルールには以下が含まれます。
  + **送信先** – 送信先テーブルバケット ARN のリスト (最大 5 つの送信先)
  + **ステータス** – ルールが有効か無効か
+ **バージョントークン** – 設定の更新時に書き込みの競合を防ぐために使用されるトークン

## バケットレベルとテーブルレベルのレプリケーションの選択
<a name="s3-tables-replication-choosing-configuration"></a>

### 設定の優先順位
<a name="s3-tables-replication-configuration-precedence"></a>

バケットレベルとテーブルレベルの両方の設定が存在する場合:
+ テーブルレベルの設定は、その特定のテーブルに対して優先されます。
+ 他のテーブルはバケットレベルの設定に従います。

## Amazon S3 コンソールを使用したレプリケーションの設定
<a name="s3-tables-replication-console"></a>

この手順では、Amazon S3 コンソールを使用してレプリケーションを設定する方法を示します。

### バケットレベルのレプリケーションを設定するには
<a name="s3-tables-replication-bucket-level-console"></a>

この手順では、Amazon S3 コンソールを使用してテーブルバケットレプリケーション設定を作成する方法を示します。テーブルバケットレプリケーション設定は、ソーステーブルバケット内のすべてのテーブルに適用されます。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ナビゲーションペインで、**[テーブルバケット]** を選択します。

1. **[テーブルバケット]** リストで、レプリケーションを設定するバケットの名前を選択します。

1. **[管理]** タブを選択します。

1. **[テーブルバケットレプリケーション設定]** セクションで、**[テーブルバケットレプリケーション設定の作成]** を選択します。

1. **[送信先]** セクションで、レプリケーションの送信先を設定します。

   1. **[テーブルバケット ARN]** フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。`arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      または、**[S3 を参照]** を選択してアカウントからテーブルバケットを選択します。

   1. (オプション) 送信先を追加するには、**[送信先の追加]** を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。

1. **[IAM ロール]** セクションで、レプリケーションロールを設定します。

   1. **[IAM ロールの選択方法]** で、以下のいずれかのオプションを選択します。
      + **[新しい IAM ロールの作成]** – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
      + **[既存の IAM ロールから選択]** – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
      + **[IAM ロールの ARN の入力]** – 既存の IAM ロールの ARN を手動で入力します。

   1. **[既存の IAM ロールから選択]** を選択した場合は、**[IAM ロール]** ドロップダウンリストからロールを選択します。

   1. (オプション) **[表示]** を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。

1. **[複製設定を作成]** を選択します。

   レプリケーション設定を作成すると、Amazon S3 は最初のバックフィルプロセスを開始します。**[テーブルレプリケーションのステータス]** セクションでレプリケーションステータスをモニタリングできます。これにより、レプリケーションステータス、レプリケート先テーブル ARN、最後にレプリケートされたメタデータなど、各レプリケート先に関する情報が表示されます。

### テーブルレベルのレプリケーションを設定するには
<a name="s3-tables-replication-table-level-console"></a>

この手順では、Amazon S3 コンソールを使用してテーブルレベルのレプリケーション設定を作成する方法を示します。テーブルレプリケーション設定は、特定のテーブルに適用され、そのテーブルのバケットレベルのレプリケーション設定を上書きします。

1. AWS マネジメントコンソール にサインインし、Amazon S3 コンソール [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) を開きます。

1. ナビゲーションペインで、**[テーブルバケット]** を選択します。

1. **[テーブルバケット]** リストで、レプリケートするテーブルが含まれるテーブルバケットの名前を選択します。

1. [**Tables**] (テーブル) タブを選択します。

1. **[テーブル]** リストで、レプリケートするテーブルのリンクを選択します。

1. **[管理]** タブを選択します。

1. **[テーブルレプリケーション設定]** セクションで、**[テーブルレプリケーション設定の作成]** を選択します。

1. **[送信先]** セクションで、レプリケーションの送信先を設定します。

   1. **[テーブルバケット ARN]** フィールドに、レプリケート先テーブルバケットの ARN を入力します。形式は次のとおりです。`arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      または、**[S3 を参照]** を選択してアカウントからテーブルバケットを選択します。

   1. (オプション) 送信先を追加するには、**[送信先の追加]** を選択します。合計 5 つの送信先に対して、最大 4 つのテーブルバケットを追加できます。

1. **[IAM ロール]** セクションで、レプリケーションロールを設定します。

   1. **[IAM ロールの選択方法]** で、以下のいずれかのオプションを選択します。
      + **[新しい IAM ロールの作成]** – Amazon S3 は、レプリケーションに必要なアクセス許可を持つ新しいロールを作成します。
      + **[既存の IAM ロールから選択]** – 必要なレプリケーションアクセス許可を持つ既存のロールを選択します。
      + **[IAM ロールの ARN の入力]** – 既存の IAM ロールの ARN を手動で入力します。

   1. **[既存の IAM ロールから選択]** を選択した場合は、**[IAM ロール]** リストからロールを選択します。

   1. (オプション) **[表示]** を選択して、IAM コンソールで選択したロールのアクセス許可を確認します。

1. **[複製設定を作成]** を選択します。

### 次に起こること
<a name="s3-tables-replication-what-happens-next"></a>

レプリケーション設定の作成後:
+ Amazon S3 は最初のバックフィルプロセスを開始し、各レプリケート先バケットにレプリカテーブルを作成します
+ バックフィルが開始されるとレプリケーションステータスが **[レプリケート中]** に変わります
+ **[管理]** タブでレプリケーションの進行状況をモニタリングできます
+ 初期レプリケーション時間は、ソーステーブルのサイズによって異なります

## AWS CLI を使用してレプリケーションを設定する
<a name="s3-tables-replication-cli"></a>

この手順では、AWS CLI を使用してレプリケーションを設定する方法を示します。アカウント ID、リージョン、バケット名を実際の値に置き換えます。すべての送信先バケットをアクセス許可に追加します。

### ステップ 1: レプリケーション用の IAM ロールを作成する
<a name="s3-tables-replication-create-iam-role"></a>

まず、Amazon S3 がテーブルをレプリケートするために引き受けることができる IAM ロールを作成します。

1. S3 Tables がロールを引き受けることを許可する信頼ポリシードキュメントを作成します。これを `trust-policy.json` として保存します。

   ```
   {
     "Version": "2012-10-17"		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "replication.s3tables.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

1. IAM ロールの作成:

   ```
   aws iam create-role \
       --role-name S3TablesReplicationRole \
       --assume-role-policy-document file://trust-policy.json \
       --description "Role for S3 Tables replication"
   ```

1. レプリケーションアクセス許可を付与するアクセス許可ポリシーを作成します。これを `replication-permissions.json` として保存します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:GetTable",
                   "s3tables:GetTableMetadataLocation",
                   "s3tables:GetTableMaintenanceConfiguration",
                   "s3tables:GetTableData"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source/table/*"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:ListTables"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-source"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination"
           },
           {
               "Effect": "Allow",
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:444455556666:bucket/amzn-s3-demo-table-bucket-destination/table/*"
           }
       ]
   }
   ```

1. アクセス許可ポリシーをロールにアタッチします:

   ```
   aws iam put-role-policy \
       --role-name S3TablesReplicationRole \
       --policy-name S3TablesReplicationPermissions \
       --policy-document file://replication-permissions.json
   ```

1. (オプション) KMS 暗号化を使用する場合は、ポリシーに KMS アクセス許可を追加します。

   ```
   {
     "Effect": "Allow",		 	 	 
     "Action": [
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:Encrypt"
   
     ],
     "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
   },
   {
     "Effect": "Allow",
     "Action": [
       "kms:Decrypt",
       "kms:GenerateDataKey"
     ],
     "Resource": [
       "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
     ]
   }
   ```

### (クロスアカウントのみ) ステップ 2: 送信先バケットポリシーを設定する
<a name="s3-tables-replication-cross-account-policy"></a>

別の AWS アカウントにレプリケートする場合、レプリケート先アカウントはレプリケート元アカウントにアクセス許可を付与する必要があります。

1. 送信先アカウントで、送信先テーブルバケットのバケットポリシーを作成します。これを `destination-bucket-policy.json` として保存します。

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:PutTableData",
                   "s3tables:GetTableData",
                   "s3tables:UpdateTableMetadataLocation",
                   "s3tables:PutTableMaintenanceConfiguration"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination/table/*"
           },
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::444455556666:role/cross-account-test"
               },
               "Action": [
                   "s3tables:CreateTable",
                   "s3tables:CreateNamespace"
               ],
               "Resource": "arn:aws:s3tables:us-east-2:111122223333:bucket/amzn-s3-demo-table-bucket-cross-account-destination"
           }
       ]
   }
   ```

1. S3 Tables API を使用してポリシーを適用します。

   ```
   aws s3tables put-table-bucket-policy \
       --table-bucket-arn arn:aws:s3tables:us-west-2:444455556666:bucket/amzn-s3-demo-table-bucket-cross-account-destination \
       --policy file://destination-bucket-policy.json \
       --profile destination-account
   ```

1. ソース KMS キーを変更して、S3 Tables のレプリケーションとメンテナンスを許可します。

   ```
   {
     "Version": "2012-10-17",		 	 	 
     "Id": "key-consolepolicy-3",
     "Statement": [
           {
               "Sid": "allow replication to decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           },
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-east-1:111122223333:key/SOURCE-KEY-ID"
           }
     ]
   }
   ```

1. 同様に、送信先 KMS キーポリシーに許可を追加します

   ```
   {
       "Version": "2012-10-17",		 	 	 
       "Id": "key-policy-3",
       "Statement": [
           {
               "Sid": "allow maintenance",
               "Effect": "Allow",
               "Principal": {
                   "Service": "maintenance.s3tables.amazonaws.com"
               },
               "Action": [
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           },
           {
               "Sid": "allow replication to encrypt/decrypt",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "replication_role_arn"
               },
               "Action": [
                   "kms:Encrypt",
                   "kms:Decrypt",
                   "kms:GenerateDataKey"
               ],
               "Resource": "arn:aws:kms:us-west-2:444455556666:key/DESTINATION-KEY-ID-1"
           }
       ]
   ```

### ステップ 3: レプリケーション設定を作成する
<a name="s3-tabales-replication-cli"></a>

AWS CLI を使用して、テーブルバケットレベルまたはテーブルレベルでレプリケーション設定を作成できます。詳細については、次の手順を参照してください。

#### バケットレベルのレプリケーション設定を作成する
<a name="s3-tables-replication-bucket-level-cli"></a>

このアプローチを使用して、バケット内のすべてのテーブルをレプリケートします。

1. レプリケーション設定ファイルを作成します。これを `bucket-replication-config.json` として保存します。  
**Example : 同じアカウント内の単一の送信先**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           }
         ]
       }
     ]
   }
   ```  
**Example : リージョン間で複数の送信先**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:ap-south-1:111122223333:bucket/amzn-s3-demo-table-bucket-apac"
           }
         ]
       }
     ]
   }
   ```  
**Example : クロスアカウントレプリケーション**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-east-1:444455556666:bucket/amzn-s3-demo-table-bucket-partner"
           }
         ]
       }
     ]
   }
   ```

1. バケットレベルのレプリケーション設定を適用します。

   ```
   aws s3tables put-table-bucket-replication \
       --table-bucket-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket \
       --configuration file://bucket-replication-config.json
   ```

   正常な出力:

   ```
   {
     "versionToken": "3HL4kqtJl40Nr8X8gdRQBpUMLUo",
     "status": "Success"
   }
   ```

#### テーブルレベルのレプリケーション設定を作成する
<a name="s3-tables-replication-table-level-cli"></a>

このアプローチを使用して、特定のテーブルをレプリケートするか、バケットレベルのレプリケーションを上書きします。

1. レプリケーション設定ファイルを作成します。これを `table-replication-config.json` として保存します。  
**Example : シングルテーブルレプリケーション**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-analytics-bucket"
           }
         ]
       }
     ]
   }
   ```  
**Example : 複数の送信先を持つテーブル**  

   ```
   {
     "role": "arn:aws:iam::111122223333:role/S3TablesReplicationRole",
     "rules": [
       {
         "destinations": [
           {
             "destinationTableBucketARN": "arn:aws:s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket-dr"
           },
           {
             "destinationTableBucketARN": "arn:aws:s3tables:eu-west-1:111122223333:bucket/amzn-s3-demo-table-bucket-eu"
           }
         ]
       }
     ]
   }
   ```

1. テーブルレベルのレプリケーション設定を適用します。

   ```
   aws s3tables put-table-replication \
       --table-arn arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-table-bucket/table/amzn-s3-demo-table-bucket-sales-data \
       --configuration file://table-replication-config.json
   ```

   正常な出力:

   ```
   {
     "versionToken": "xT2LZkFZ0UuTC2h8XqtGLx2Ak6M",
     "status": "Success"
   }
   ```