

# DynamoDB でテーブルを復元する
<a name="pointintimerecovery_restores"></a>

DynamoDB テーブルを PITR バックアップまたはオンデマンドバックアップから復元するには、AWS マネジメントコンソール、AWS コマンドラインインターフェイス (AWS CLI)、または DynamoDB API を使用できます。リカバリプロセスでは、新しい DynamoDB テーブルに復元します。

## ポイントインタイムリカバリを使用したテーブルの復元
<a name="pointintimerecovery-pitr-restore"></a>

テーブルは、`EarliestRestoreableDateTime` までの任意の時点に復元できます。

**重要**  
ポイントインタイムリカバリを無効にし、後でテーブルに対して再度有効にした場合は、テーブルを復元できる開始時刻がリセットされます。その結果、`LatestRestorableDateTime` を使用したテーブルの即時復元しかできなくなります。

ポイントインタイムリカバリを使用して復元すると、DynamoDB は、選択した日時 (day:hour:minute:second) の状態を反映して、テーブルデータを新しいテーブルとして復元します。テーブルは、テーブルのプロビジョニングされたスループットを消費することなく復元します。ポイントインタイムリカバリを使用してテーブル全体を復元するか、送信先テーブルの設定を構成することができます。復元済みテーブルで次のテーブル設定を変更できます。
+ グローバルセカンダリインデックス (GSI)
+ ローカルセカンダリインデックス (LSI)
+ 請求モード
+ プロビジョニングされた読み込みおよび書き込みキャパシティ
+ 暗号化設定

**重要**  
テーブル全体の復元を実行すると、送信先テーブルには、バックアップが要求されたときに送信元テーブルが持っていたのと同じプロビジョニングされた読み込みキャパシティユニットと書き込みキャパシティユニットが設定されます。たとえば、テーブルのプロビジョニングされたスループットが 50 読み込みキャパシティーユニットおよび 50 書き込みキャパシティーユニットに最近下げられたとします。その後、このテーブルの状態を 3 週間前に復元し、その時点で、プロビジョニングされたスループットは 100 読み込みキャパシティーユニットと 100 書き込みキャパシティーユニットに設定されました。この場合、DynamoDB はテーブルデータをその時点からのプロビジョンされたスループット (100 読み込み容量単位および 100 書き込み容量単位) を利用してその時点のものに復元します。

また、AWS リージョン間で DynamoDB テーブルデータを復元し、ソーステーブルがあるリージョンとは別のリージョンに、復元したテーブルを作成することもできます。AWS 商用リージョン、AWS 中国リージョン、および AWS GovCloud (US) 間でクロスリージョンの復元を実行できます。送信元リージョンから転送したデータと、送信先リージョンの新しいテーブルの復元に対してのみ料金が発生します。

**注記**  
送信元または送信先リージョンがアジアパシフィック (香港) または中東 (バーレーン) の場合、クロスリージョンの復元はサポートされません。

復元済みテーブルで、一部またはすべてのインデックスの作成を除外すると、復元はより高速でコスト効率が高くなります。以下は、復元されたテーブルで手動で設定する必要があります。
+ 自動スケーリングポリシー
+ AWS Identity and Access Management ポリシー
+ Amazon CloudWatch Events のメトリクスとアラーム
+ タグ
+ ストリーム設定
+ 有効期限 (TTL) 設定
+ ポイントインタイムリカバリ設定

テーブルの復元にかかる時間は、複数の要因に基づきます。テーブルのサイズに常に関連するとは限りません。

# 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 ポリシーでも、同様の問題が発生する可能性があります。  
復元オペレーション完了後は、アクセス権限の変更または削除のみ行うことができます。