

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

# 教學課程：建立多帳戶全域資料表
<a name="V2globaltables_MA.tutorial"></a>

本節提供step-by-step說明。 DynamoDB AWS 

## 使用 DynamoDB 主控台建立多帳戶全域資料表
<a name="create-ma-gt-console"></a>

請依照下列步驟，使用 建立多帳戶全域資料表 AWS 管理主控台。下列範例會在美國建立具有複本資料表的全域資料表。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)：// 開啟第一個帳戶的 DynamoDB 主控台 （例如 *111122223333*)。

1. 在此範例中，請從導覽列的區域選擇器選擇**美國東部 (俄亥俄)**。

1. 在主控台左側的導覽窗格中，選擇 **Tables** (資料表)。

1. 選擇 **Create Table** (建立資料表)。

1. 在**建立資料表**頁面上：

   1. 對於 **Table name** (資料表名稱)，請輸入 **MusicTable**。

   1. 對於 **Partition key (分割區索引鍵)**，請輸入 **Artist**。

   1. 對於**排序索引鍵**，請輸入 **SongTitle**。

   1. 保留其他預設設定，並選擇**建立資料表**。

1. 將下列資源政策新增至資料表

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

****  

   ```
   {
   "Version":"2012-10-17",		 	 	 
   "Statement": [
       {
           "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
           "Effect": "Allow",
           "Action": [
               "dynamodb:ReadDataForReplication",
               "dynamodb:WriteDataForReplication",
               "dynamodb:ReplicateSettings"
           ],
           "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
           "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
           "Condition": {
               "StringEquals": {
                   "aws:SourceAccount": ["444455556666","111122223333"],
                   "aws:SourceArn": [
                       "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
                       "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable"
                   ]
               }
           }
       },
       {
           "Sid": "AllowTrustedAccountsToJoinThisGlobalTable",
           "Effect": "Allow",
           "Action": [
               "dynamodb:AssociateTableReplica"
           ],
           "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
           "Principal": {"AWS": ["444455556666"]}
       }
   ]
   }
   ```

------

1. 此新資料表會做為新全域資料表中的第一個複本資料表。這是您稍後新增其他複本資料表的原型。

1. 等待資料表變為**作用中**。對於新建立的資料表，從**全域資料表**索引標籤導覽至**設定複寫**，然後按一下**啟用**。

1. 此帳戶的登出 （此處為 *111122223333*)。

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)：// 開啟第二個帳戶的 DynamoDB 主控台 （例如 *444455556666*)。

1. 在此範例中，從導覽列的區域選擇器中選擇**美國東部 （維吉尼亞北部）**。

1. 主控台會確認選取區域中沒有同名的資料表。若有同名的資料表，您必須先刪除現有的資料表，才可在該區域中建立新的複本資料表。

1. 在**建立資料表**附近的下拉式清單中，選擇**從另一個帳戶建立**

1. 在**從另一個帳戶建立資料表**頁面上：

   1. 新增 **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**做為來源資料表的資料表 Arn。

   1. 在**複本資料表 ARNs** 中，再次新增來源資料表的 ARN**arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**。如果多帳戶全域資料表中已有多個複本，您必須將每個現有複本新增至ReplicaTableARN。

   1. 保留其他預設設定，然後選擇**提交**。

1. 音樂資料表 **（以及任何其他複本資料表） 的全域**資料表索引標籤會顯示資料表已在多個區域中複寫。

1. 若要測試複寫：

   1. 您可以使用此資料表存在複本的任何區域

   1. 選擇**探索資料表項目**。

   1. 選擇 **Create item** (建立項目)。

   1. 為 **Artist** 輸入 **item\$11**，為 **SongTitle** 輸入 **Song Value 1**。

   1. 選擇 **Create item** (建立項目)。

   1. 切換到其他區域來驗證複寫：

   1. 確認 Music 資料表包含您建立的項目。

## 使用 建立多帳戶全域資料表 AWS CLI
<a name="ma-gt-cli"></a>

下列範例示範如何使用 建立多帳戶全域資料表 AWS CLI。這些範例示範設定跨帳戶複寫的完整工作流程。

------
#### [ CLI ]

使用下列 AWS CLI 命令建立具有跨帳戶複寫的多帳戶全域資料表。

```
# STEP 1: Setting resource policy for the table in account 111122223333

cat > /tmp/source-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable"
                    ]
                }
            }
        },
        {
            "Sid": "AllowTrustedAccountsToJoinThisGlobalTable",
            "Effect": "Allow",
            "Action": [
                "dynamodb:AssociateTableReplica"
            ],
            "Resource": "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable",
            "Principal": {"AWS": ["444455556666"]}
        }
    ]
}
EOF

# Step 2: Create a new table (MusicTable) in US East (Ohio), 
#   with DynamoDB Streams enabled (NEW_AND_OLD_IMAGES),
#   and Settings Replication ENABLED on the account 111122223333

aws dynamodb create-table \
    --table-name MusicTable \
    --attribute-definitions \
        AttributeName=Artist,AttributeType=S \
        AttributeName=SongTitle,AttributeType=S \
    --key-schema \
        AttributeName=Artist,KeyType=HASH \
        AttributeName=SongTitle,KeyType=RANGE \
    --billing-mode PAY_PER_REQUEST \
    --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES \
    --global-table-settings-replication-mode ENABLED \
    --resource-policy file:///tmp/source-resource-policy.json \
    --region us-east-2 


# Step 3: Creating replica table in account 444455556666

# Resource policy for account 444455556666
cat > /tmp/dest-resource-policy.json << 'EOF'
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "DynamoDBActionsNeededForSteadyStateReplication",
            "Effect": "Allow",
            "Action": [
                "dynamodb:ReadDataForReplication",
                "dynamodb:WriteDataForReplication",
                "dynamodb:ReplicateSettings"
            ],
            "Resource": "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
            "Principal": {"Service": ["replication.dynamodb.amazonaws.com"]},
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": ["444455556666","111122223333"],
                    "aws:SourceArn": [
                        "arn:aws:dynamodb:us-east-1:444455556666:table/MusicTable",
                        "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable"
                    ]
                }
            }
        }
    ]
}
EOF

# Execute the replica table creation
aws dynamodb create-table \
    --table-name MusicTable \
    --global-table-source-arn "arn:aws:dynamodb:us-east-2:111122223333:table/MusicTable" \
    --resource-policy file:///tmp/dest-resource-policy.json \
    --global-table-settings-replication-mode ENABLED \
    --region us-east-1

# Step 4: View the list of replicas created using describe-table
aws dynamodb describe-table \
    --table-name MusicTable \
    --region us-east-2 \
    --query 'Table.{TableName:TableName,TableStatus:TableStatus,MultiRegionConsistency:MultiRegionConsistency,Replicas:Replicas[*].{Region:RegionName,Status:ReplicaStatus}}'

# Step 5: To verify that replication is working, add a new item to the Music table in US East (Ohio)
aws dynamodb put-item \
    --table-name MusicTable \
    --item '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-2

# Step 6: Wait for a few seconds, and then check to see whether the item has been 
# successfully replicated to US East (N. Virginia) and Europe (Ireland)
aws dynamodb get-item \
    --table-name MusicTable \
    --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-1

aws dynamodb get-item \
    --table-name MusicTable \
    --key '{"Artist": {"S":"item_1"},"SongTitle": {"S":"Song Value 1"}}' \
    --region us-east-2

# Step 7: Delete the replica table in US East (N. Virginia) Region
aws dynamodb delete-table \
    --table-name MusicTable \
    --region us-east-1

# Clean up: Delete the primary table
aws dynamodb delete-table \
    --table-name MusicTable \
    --region us-east-2
```

------