

# DynamoDB 테이블을 특정 시점으로 복원
<a name="PointInTimeRecovery.Tutorial"></a>

Amazon DynamoDB의 PITR(특정 시점으로 복구)을 통해 DynamoDB 테이블 데이터를 지속적으로 백업할 수 있습니다. DynamoDB 콘솔이나 AWS Command Line Interface(AWS CLI)를 사용하여 테이블을 특정 시점으로 복원할 수 있습니다. 특정 시점으로 복구 프로세스는 새 테이블로 복원합니다.

AWS CLI를 사용하려면 먼저 구성을 해야 합니다. 자세한 내용은 [DynamoDB 액세스](AccessingDynamoDB.md) 섹션을 참조하세요.

**Topics**
+ [DynamoDB 테이블을 특정 시점으로 복원(콘솔)](#restoretabletopointintime_console)
+ [테이블을 특정 시점으로 복원(AWS CLI)](#restorepointintime_cli)

## DynamoDB 테이블을 특정 시점으로 복원(콘솔)
<a name="restoretabletopointintime_console"></a>

다음은 DynamoDB 콘솔을 사용하여 `Music`이라는 기존 테이블을 특정 시점으로 복원하는 방법을 보여 주는 예입니다.

**참고**  
이 절차에서는 특정 시점으로 복구를 활성화했다고 가정합니다. `Music` 테이블에 대해 활성화하려면 **백업(Backups)** 탭의 **특정 시점으로 복구(PITR)(Point-in-time recovery (PITR))** 섹션에서 **편집(Edit)**을 선택한 다음 **특정 시점으로 복구 활성화(Enable point-in-time-recovery)** 옆의 확인란을 선택합니다.

**테이블을 특정 시점으로 복원하려면**

1. AWS Management Console에 로그인하고 [https://console.aws.amazon.com/dynamodb/](https://console.aws.amazon.com/dynamodb/)에서 DynamoDB 콘솔을 엽니다.

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

1. 테이블 목록에서 `Music` 테이블을 선택합니다.

1. `Music` 테이블에 있는 **백업(Backups)** 탭의 **특정 시점으로 복구(PITR)(Point-in-time recovery (PITR))** 섹션에서 **복원(Restore)**을 선택합니다.

1. 새 테이블 이름에 **MusicMinutesAgo**를 입력합니다.
**참고**  
테이블을 동일한 AWS 리전 또는 소스 테이블이 속하는 리전과 다른 리전에 복원할 수 있습니다. 복원된 테이블에 보조 인덱스가 생성되지 않도록 제외할 수도 있습니다. 또한 다른 암호화 모드를 지정할 수 있습니다.

1. 복원 가능한 시간을 확인하려면 복원 날짜 및 시간을 **가장 빠른 시간(Earliest)**로 설정합니다. 그런 다음 **복원(Restore)**을 선택하여 복원 프로세스를 시작합니다.

   복원 중인 테이블은 상태가 **복원 중**으로 표시됩니다. 복원 프로세스가 완료되면 `MusicMinutesAgo` 테이블의 상태가 **Active**로 변경됩니다.

## 테이블을 특정 시점으로 복원(AWS CLI)
<a name="restorepointintime_cli"></a>

다음은 AWS CLI를 사용하여 `Music`이라는 기존 테이블을 특정 시점으로 복원하는 방법을 보여 주는 절차입니다.

**참고**  
이 절차에서는 특정 시점으로 복구를 활성화했다고 가정합니다. 다음 명령을 실행하여 `Music` 테이블에 대해 이 기능을 활성화하세요.  

```
aws dynamodb update-continuous-backups \
    --table-name Music \
    --point-in-time-recovery-specification PointInTimeRecoveryEnabled=True
```



**테이블을 특정 시점으로 복원하려면**

1. `Music` 명령으로 `describe-continuous-backups` 테이블에 대해 특정 시점으로 복구가 활성화되었는지 확인합니다.

   ```
   aws dynamodb describe-continuous-backups \
       --table-name Music
   ```

   연속 백업(테이블 생성 시 자동으로 활성화) 및 특정 시점으로 복구가 활성화되었습니다.

   ```
   {
       "ContinuousBackupsDescription": {
           "PointInTimeRecoveryDescription": {
               "PointInTimeRecoveryStatus": "ENABLED", 
               "EarliestRestorableDateTime": 1519257118.0, 
               "LatestRestorableDateTime": 1520018653.01
           }, 
           "ContinuousBackupsStatus": "ENABLED"
       }
   }
   ```

1. 테이블을 특정 시점으로 복원합니다. 이 경우 `Music` 테이블은 동일한 AWS 리전의 `LatestRestorableDateTime`(\$15분 전)으로 복원됩니다.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time
   ```
**참고**  
 특정 시점으로 복원할 수도 있습니다. 그러려면 `--restore-date-time` 인수를 사용하여 명령을 실행하고 타임스탬프를 지정합니다. 구성된 복구 기간 내의 원하는 시점을 지정할 수 있으며, 1\$135일 사이의 값으로 설정할 수 있습니다. 예를 들어, 다음 명령은 테이블을 `EarliestRestorableDateTime`으로 복원합니다.  

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicEarliestRestorableDateTime \
       --no-use-latest-restorable-time \
       --restore-date-time 1519257118.0
   ```
 원한다면 특정 시점으로 복원할 때 `--no-use-latest-restorable-time` 인수를 지정할 수 있습니다.

1. 사용자 지정 테이블 설정을 통해 특정 시점으로 테이블을 복원합니다. 이 경우 `Music` 테이블은 `LatestRestorableDateTime`(\$15분 전)으로 복원됩니다.

   다음과 같이 복원된 테이블에 다른 암호화 모드를 지정할 수 있습니다.
**참고**  
`sse-specification-override` 파라미터는 `sse-specification-override` 명령에 사용된 `CreateTable` 파라미터와 동일한 값을 사용합니다. 자세한 내용은 [DynamoDB의 암호화된 테이블 관리](encryption.tutorial.md)를 참조하세요.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time \
       --sse-specification-override Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
   ```

   테이블을 소스 테이블이 속하는 리전과 다른 AWS 리전에 복원할 수 있습니다.
**참고**  
`sse-specification-override` 파라미터는 교차 리전 복원에는 필수지만 소스 테이블과 동일한 리전으로 복원하는 경우에는 선택 사항입니다.
교차 리전 복원에는 `source-table-arn` 파라미터를 제공해야 합니다.
명령줄에서 교차 리전 복원을 수행할 때는 기본 AWS 리전을 원하는 대상 리전으로 설정해야 합니다. 자세한 내용은 *AWS Command Line Interface 사용 설명서*의 [명령줄 옵션](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-options.html)을 참조하세요.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-arn arn:aws:dynamodb:us-east-1:123456789012:table/Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time \
       --sse-specification-override Enabled=true,SSEType=KMS,KMSMasterKeyId=abcd1234-abcd-1234-a123-ab1234a1b234
   ```

   복원된 테이블에 대한 결제 모드와 프로비저닝된 처리량을 재정의할 수 있습니다.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time \
       --billing-mode-override PAY_PER_REQUEST
   ```

   복원된 테이블에 일부 또는 전체 보조 인덱스가 생성되지 않도록 제외할 수 있습니다.
**참고**  
복원된 새 테이블에 일부 또는 전체 보조 인덱스가 생성되지 않도록 제외하는 경우 복원이 보다 빠르고 비용 효율적일 수 있습니다.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time \
       --global-secondary-index-override '[]'
   ```

   다른 재정의 조합을 사용할 수 있습니다. 예를 들어, 다음과 같이 단일 글로벌 보조 인덱스를 사용하는 동시에 프로비저닝된 처리량을 변경할 수 있습니다.

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --billing-mode-override PROVISIONED \
       --provisioned-throughput-override ReadCapacityUnits=100,WriteCapacityUnits=100 \
       --global-secondary-index-override IndexName=singers-index,KeySchema=["{AttributeName=SingerName,KeyType=HASH}"],Projection="{ProjectionType=KEYS_ONLY}",ProvisionedThroughput="{ReadCapacityUnits=50,WriteCapacityUnits=50}" \
       --sse-specification-override Enabled=true,SSEType=KMS \
       --use-latest-restorable-time
   ```

복원을 확인하려면 `describe-table` 명령을 사용하여 `MusicEarliestRestorableDateTime` 테이블을 명시합니다.

```
aws dynamodb describe-table --table-name MusicEarliestRestorableDateTime
```

복원 중인 테이블은 상태가 **생성 중**이 되고, 복원 진행 중에 **true**가 표시됩니다. 복원 프로세스가 완료되면 `MusicEarliestRestorableDateTime` 테이블의 상태가 **Active**로 변경됩니다.

**중요**  
복원을 진행하는 동안 IAM 엔터티(예: 사용자, 그룹 또는 역할)에 복원 수행 권한을 부여하는 AWS Identity and Access Management(IAM) 정책을 수정하거나 삭제하지 마세요. 그러면 예기치 않은 동작이 발생할 수 있습니다. 예를 들어 테이블 복원 중에 테이블에 대한 쓰기 권한을 삭제한다고 가정해 보겠습니다. 기본 `RestoreTableToPointInTime` 작업에서 복원된 데이터를 해당 테이블에 쓸 수 없게 됩니다. 대상 복원 테이블에 액세스하기 위한 소스 IP 제한 관련 IAM 정책은 유사한 문제의 이유가 될 수 있습니다.  
복원 작업이 완료되어야 권한을 수정하거나 삭제할 수 있습니다.