AWS BackupでDynamoDBを日次バックアップ&リストアしてみた

AWS Backupを使ってDynamoDBを定期的にバックアップしてみました。35日以上の期間でもバックアップ&リストアできるようになっています。
2019.02.15

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

まいど、大阪の市田です。 今回は、AWS BackupでDynamoDBをバックアップ&リカバリして気になる点を確認してみました。

これまでDynamoDBのバックアップとしては、オンデマンドバックアップ、継続的バックアップが存在していましたが、35日以上過去のデータを保存する場合は、Lambdaなどを使ってオンデマンドバックアップを実行する必要がありました。

ところがAWS Backupを使うと、Lambdaを使わずに簡単に定期バックアップを取得することができるようになりました。 早速試してみたいと思います。

DynamoDBテーブル作成

今回はバージニア北部リージョンで、下記のようなDynamoDBテーブルを作成します。 (2019年2月時点で、AWS Backupは東京リージョン未対応です。)

01-dynamotb-table

下記のように、TTLやAutoScalingを設定したテーブルを用意します。

02-dynamodb-ttl-asg-2

バックアップ設定はデフォルトの「無効」のままとします。

03-dynamodb-backup-disable-default

タグは下記のように設定します。下記のタグを指定してバックアップしたいと思います。

  • キー:backup
  • 値:aws-backup

04-tag-dynamodb

AWS Backupの設定

次に、AWS Backupにてバックアッププランを作成します。

05-create-backup-plans

今回は新規にプランを作成します。

06-build-new-plan

日次でバックアップしたいので下記のようにDailyで設定します。 バックアップウィンドウの指定は、日本時間で「AM01:30に開始」としました。

07-backup-rule-config

続けてVaultを作成します。KMSはデフォルトのものを利用しています。

08-create-backup-vault

作成したVaultを指定して、バックアッププランを作成します。

09-create-plan

バックアップ対象のアサイン

作成したプランにバックアップ対象リソースを関連付けます。

10-assign-resource

リソースのアサインはタグで指定してみました。対象のDynamoDBに付けたタグを設定します。

11-assign-tag

バックアップ取得

指定した時間帯になるまで待機します。該当ジョブのStatusがCompletedになればバックアップ完了です。

12-completed-backup-job

Vaultの画面でもバックアップできていることが確認できます。

13-vault

DynamoDBのコンソール上でも、バックアップが取得されていることが分かります。 (下記では、日本時間の午前 01:30と08:30に2度取得しています)

14-backup-data-dynamodb-console

リストア時の注意点

AWS BackupによるDynamoDBのバックアップでは、従来からある「オンデマンドバックアップと復元」が実行される形になります。

そのため、下記の設定については復元されず、リストア後に再設定が必要となる点に注意しましょう。 後ほど実際にリストアして確認したいと思います。

  • Auto scaling policies
  • IAM policies
  • Cloudwatch metrics and alarms
  • Tags
  • Stream settings
  • Time to Live (TTL) settings

再設定が必要になる項目については、予めAWS CLIなどで設定できるように用意しておくと、リストア作業も楽になるかと思います。

参考ページ:

リストア

それでは、取得したバックアップからDynamoDBテーブルをリストアしてみます。 AWS Backupの画面のVaultからリストアしたいバックアップを選択して「Restore」をクリックします。

14-restore-vault

リストアするテーブル名を入力してリストアを実行します。AutoScalingは無効になっていることが分かります。 (同じテーブル名を指定するとリストアジョブが失敗します。)

15-restore-valut-01

16-restore-vault-02

リストアのジョブが完了するまで気長に待ちます。

なお、テーブルのリストア(復元)にかかる時間はテーブルサイズとは直接的な関係性はありません。つまり、サイズが大きくても小さなサイズと同じくらいの時間で完了できることもあります。

ここでは詳細については触れないので、下記ドキュメントを参照いただければと思います。 バックアップおよび復元: 仕組み - Amazon DynamoDB

17-pending-resotore-jobs

StatusがCompletedになればリストア完了です。

18-completed-restore

DynamoDBを確認すると最初のデータを保持した状態で、テーブルがリストアできています。

19-restore-items

やはりTTLやAutoScalingは設定されていません。

20-resore-table-02

タグも設定されていない状態になります。

21-restore-tag

最後に

AWS Backupにより35日以上の期間でも定期的にバックアップ取得が簡単にできるようになりました。 再設定する項目がある点に注意しつつ、ぜひ利用いただければと思います。

以上です。