

# 자습서: 다중 계정 글로벌 테이블 생성
<a name="V2globaltables_MA.tutorial"></a>

이 섹션에서는 여러 AWS 계정에 걸쳐 있는 DynamoDB 글로벌 테이블을 생성하기 위한 단계별 지침을 제공합니다.

## DynamoDB 콘솔을 사용하여 다중 계정 글로벌 테이블 생성
<a name="create-ma-gt-console"></a>

다음 단계에 따라 AWS Management Console을 사용하여 다중 계정 글로벌 테이블을 생성합니다. 다음 예제에서는 미국의 복제본 테이블로 글로벌 테이블을 만듭니다.

1. AWS Management Console에 로그인하고 첫 번째 계정(예: *111122223333*)에 대해 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 이 예제에서는 탐색 모음의 리전 선택기에서 **미국 동부(오하이오)**를 선택합니다.

1. 콘솔 왼쪽의 탐색 창에서 **테이블**을 선택합니다.

1. **Create Table(테이블 생성)**을 선택합니다.

1. **테이블 생성** 페이지에서 다음을 수행합니다.

   1. **테이블 이름**에 **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 Management Console에 로그인하고 두 번째 계정(예: *444455556666*)에 대해 DynamoDB 콘솔([https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/))을 엽니다.

1. 이 예제에서는 탐색 모음의 리전 선택기에서 **미국 동부(버지니아 북부)**를 선택합니다.

1. 콘솔은 선택한 리전에 동일한 이름의 테이블이 존재하지 않는지 확인합니다. 이름이 동일한 테이블이 있는 경우 해당 리전에서 새 복제본 테이블을 생성하려면 먼저 기존 테이블을 삭제해야 합니다.

1. **테이블 생성** 근처의 드롭다운에서 **다른 계정에서 생성**을 선택합니다.

1. **다른 계정에서 테이블 생성** 페이지에서 다음을 수행합니다.

   1. 소스 테이블에 대한 테이블 ARN으로 **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**을 추가합니다.

   1. **복제본 테이블 ARN**에서 소스 테이블의 ARN **arn:aws:dynamodb:us-east-2:*111122223333*:table/MusicTable**을 다시 추가합니다. 다중 계정 글로벌 테이블의 일부로 이미 여러 복제본이 있는 경우 모든 기존 복제본을 ReplicaTableARN에 추가해야 합니다.

   1. 기타 기본 설정을 유지하고 **제출**을 선택합니다.

1. 음악 테이블의 **글로벌 테이블** 탭 및 다른 복제본 테이블의 글로벌 테이블 탭은 테이블이 여러 리전에서 복제되었음을 나타냅니다.

1. 복제를 테스트하려면 다음을 수행합니다.

   1. 이 테이블에 복제본이 있는 모든 리전을 사용할 수 있습니다.

   1. **테이블 항목 탐색**을 선택합니다.

   1. **항목 생성**을 선택합니다.

   1. **Artist**에 **item\$11**을 입력하고 **SongTitle**에는 **Song Value 1**을 입력합니다.

   1. **항목 생성**을 선택합니다.

   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
```

------