

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 S3 Tables 複寫
<a name="s3-tables-replication-setting-up"></a>

您可以設定複寫，將資料表複本從來源資料表自動建立到最多五個目的地資料表儲存貯體。您可以在儲存貯體層級 （套用至儲存貯體中的所有資料表） 或資料表層級 （適用於特定資料表） 設定複寫。本主題說明如何使用 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>
+ **來源資料表儲存貯**體 – 包含您要複寫之資料表的資料表儲存貯體 （資料表儲存貯體）
+ **目的地資料表儲存貯體 (**一或多個） – 您要複寫資料表的資料表儲存貯體 （最多 5 個目的地資料表儲存貯體）
+ **來源資料表 (Source table)** – 要複寫的來源資料表儲存貯體中的現有資料表
+ **IAM 角色 (IAM)** – 授予 Amazon S3 代表您複寫資料表許可的 IAM 角色

### 所需的許可
<a name="s3-tables-replication-required-permissions"></a>

您用來設定複寫的 IAM 身分必須具有下列許可：

**對於儲存貯體層級複寫：**
+ `s3tables:PutTableBucketReplication` 來源資料表儲存貯體上的
+ `s3tables:GetTableBucketReplication` 來源資料表儲存貯體上的
+ `iam:PassRole` 適用於複寫 IAM 角色

**對於資料表層級複寫：**
+ `s3tables:PutTableReplication` 來源資料表上的
+ `s3tables:GetTableReplication` 來源資料表上的
+ `iam:PassRole` 適用於複寫 IAM 角色

**對於跨帳戶複寫：**
+ 目的地帳戶儲存貯體政策的許可

### 跨帳戶複寫的其他需求
<a name="s3-tables-replication-cross-account-requirements"></a>

如果您的來源和目的地資料表儲存貯體位於不同的 AWS 帳戶中，您也需要：
+ 目的地資料表儲存貯體上的儲存貯體政策，授予來源帳戶複寫資料表的許可
+ 目的地帳戶 ID 和資料表儲存貯體 Amazon Resource Name (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 如何從來源資料表儲存貯體複寫資料表。複寫可以設定為兩個層級：

### 儲存貯體層級複寫
<a name="s3-tables-replication-bucket-level"></a>

儲存貯體層級複寫組態會套用至來源資料表儲存貯體中的所有資料表。當您設定儲存貯體層級複寫時，Amazon S3 會自動複寫儲存貯體中建立的任何現有資料表和新資料表。

在下列情況下使用儲存貯體層級複寫：
+ 您想要複寫儲存貯體中的所有資料表
+ 您希望所有資料表的複寫行為一致
+ 您想要透過單一組態簡化管理

### 資料表層級複寫
<a name="s3-tables-replication-table-level"></a>

資料表層級複寫組態會套用至特定資料表。資料表層級組態會覆寫該特定資料表的儲存貯體層級組態。

在下列情況下使用資料表層級複寫：
+ 您想要僅複寫特定資料表
+ 您需要不同資料表的不同複寫目的地
+ 您想要覆寫特定資料表的儲存貯體層級組態

### 複寫組態元素
<a name="s3-tables-replication-configuration-elements"></a>

每個複寫組態都包含：
+ **IAM 角色** – Amazon S3 執行複寫操作時擔任的角色
+ **規則** – 一或多個複寫規則 （啟動時僅限 1 個規則）。每個規則都包含：
  + **目的地 – **目的地資料表儲存貯體 ARNs的清單 （最多 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 管理主控台 ，並在 [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)：// 開啟 Amazon S3 主控台。

1. 在導覽窗格中，選擇**資料表儲存貯**體。

1. 在**資料表儲存貯**體清單中，選擇您要設定複寫的資料表儲存貯體名稱。

1. 選擇 **Management** (管理) 標籤，

1. 在**資料表儲存貯體複寫組態**區段中，選擇**建立資料表儲存貯體複寫組態**。

1. 在**目的地**區段中，設定複寫目的地：

   1. 在**資料表儲存貯體 ARN** 欄位中，輸入目的地資料表儲存貯體的 ARN。格式是： `arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      或者，選擇**瀏覽 S3**，從您的帳戶中選取資料表儲存貯體。

   1. （選用） 若要新增其他目的地，請選擇**新增目的地**。您最多可以新增 4 個資料表儲存貯體，總共 5 個目的地。

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 管理主控台 ，並在 https：//[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/) 開啟 Amazon S3 主控台。

1. 在導覽窗格中，選擇**資料表儲存貯**體。

1. 在**資料表儲存貯**體清單中，選擇包含您要複寫之資料表的資料表儲存貯體名稱。

1. 選擇 **Tables** (資料表) 索引標籤。

1. 在**資料表**清單中，選擇您要複寫的資料表名稱。

1. 選擇 **Management** (管理) 標籤，

1. 在**資料表複寫組態**區段中，選擇**建立資料表複寫組態**。

1. 在**目的地**區段中，設定複寫目的地：

   1. 在**資料表儲存貯體 ARN** 欄位中，輸入目的地資料表儲存貯體的 ARN。格式是： `arn:aws:s3tables:region:account-id:bucket/table-bucket-name`

      或者，選擇**瀏覽 S3**，從您的帳戶中選取資料表儲存貯體。

   1. （選用） 若要新增其他目的地，請選擇**新增目的地**。您最多可以新增 4 個資料表儲存貯體，總共 5 個目的地。

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。將帳戶 IDs、區域和儲存貯體名稱取代為您的實際值。將所有目的地儲存貯體新增至許可。

### 步驟 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"
   }
   ```