

# 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` テーブルで有効にするには、[**バックアップ**] タブの [**ポイントインタイムリカバリ (PITR)**] セクションで、[**編集**] を選択してから、[**ポイントインタイムリカバリを有効にする**] の横にあるチェックボックスをオンにします。

**テーブルをポイントインタイムに復元するには**

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

1. コンソールの左側のナビゲーションペインで、[**テーブル**] を選択します。

1. テーブルのリストで、[`Music`] テーブルを選択します。

1. `Music` テーブルの [**バックアップ**] タブの [**ポイントインタイムリカバリ (PITR)**] セクションで、[**復元**] を選択します。

1. 新しいテーブルの名前に **MusicMinutesAgo** と入力します。
**注記**  
テーブルは、同じ AWS リージョンまたは送信元テーブルが存在する別のリージョンに復元できます。復元済みテーブルで、セカンダリインデックスの作成を除外することもできます。また、別の暗号化モードを指定することもできます。

1. 復元可能な時刻を確認するには、[復元日時] を [**最も早い**] に設定します。次に、[**復元**] を選択して復元プロセスを開始します。

   復元中のテーブルのステータスは、[**Restoring (復元中)**] と表示されます。復元プロセスが終了すると、`MusicMinutesAgo` テーブルのステータスは [**アクティブ**] に変わります。

## テーブルを特定の時点に復元する (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` (最大 5 分前) に復元されます。

   ```
   aws dynamodb restore-table-to-point-in-time \
       --source-table-name Music \
       --target-table-name MusicMinutesAgo \
       --use-latest-restorable-time
   ```
**注記**  
 特定の時点に復元することもできます。そのためには、`--restore-date-time` 引数を使用してコマンドを実行し、タイムスタンプを指定します。設定したリカバリ期間内の任意の時点を指定できます。この値は 1～35 日の間の任意の値に設定できます。たとえば、次のコマンドでは `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` に復元されます (5 分前まで)。

   復元済みテーブルに対して、次のように別の暗号化モードを指定できます。
**注記**  
`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
```

復元中のテーブルは、ステータスが [**Creating (作成中)**]、復元中に [**true**] として表示されています。復元プロセスが終了すると、`MusicEarliestRestorableDateTime` テーブルのステータスは [**アクティブ**] に変わります。

**重要**  
復元中は、復元を目的とした、IAM エンティティ (例: ユーザー、グループ、ロール) を付与する AWS Identity and Access Management (IAM) ポリシーの変更や削除を行わないでください。行った場合、予期しない動作が発生する場合があります。たとえば、テーブルの復元中にテーブルの書き込み権限を削除したとします。この場合、基本となる `RestoreTableToPointInTime` オペレーションを使用しても、復元されたデータをテーブルに書き込むことはできません。復元先のターゲットテーブルにアクセスするための送信元 IP 制限を含む IAM ポリシーでも、同様の問題が発生する可能性があります。  
復元オペレーション完了後は、アクセス権限の変更または削除のみ行うことができます。