DynamoDBのポイントインタイムリカバリ(PITR)の落とし穴
はじめに
あるシステム開発の中で、Amazon DynamoDBのバックアップ・リストア方式の1つであるポイントインタイムリカバリ(PITR)について検討していたのですが、検討当初に想定していなかった制約に直面しました。本記事では、まずPITRの概要を簡潔に説明し、その後、制約と注意点について重点的に解説します。
なお、DynamoDBにおけるPITRとそれ以外のバックアップ・リストア方式の比較は、以下の記事に分かりやすくまとまっているため、本記事では詳細な比較は省略します。
対象読者
- DynamoDBのバックアップ・リストア方式を検討されている方
- PITRの細かな制約や注意点について知りたい方
記事を読むメリット
- PITRの仕様を知ることができる
- PITRの制約を踏まえた注意点を知ることができる
結論
PITRを使用して同じテーブル名でリストアする場合は、以下の2点に注意する必要があります。
- リストアに3つのステップが必要になる
- リストア時点以外のバックアップデータが失われる
PITRとは
PITRは、DynamoDBテーブルの継続的なバックアップ機能であり、過去35日間の指定した過去の時点にデータを復元できます。アプリケーションやユーザによる誤操作、意図しない削除からのリカバリ手段として活用されます。
特徴
- 対象のテーブルでPITRを有効化するだけで使用可能
- 継続的なバックアップの期間は1~35日間の任意の値に設定可能
- 1秒単位で復元するバックアップを選択可能
- 最も新しいバックアップは現在時刻の5分前
- 一部の設定はリストア後のテーブルで復元できないため、再設定する必要がある(TTL、PITRの有効化設定など)
料金
- 他のバックアップ形式と比較して安い
- テーブルのサイズに基づいて課金されるため、継続的なバックアップの期間は料金に影響しない
PITRの制約と注意点
本題であるPITRの制約と注意点をまとめます。
DynamoDBおよびPITRの制約は以下です。
- テーブル名はアカウントとリージョンで一意
- 一度作成したテーブルの名前を変更することはできない
- バックアップを用いたテーブルの新規作成しかできない
- PITRが有効なテーブルを削除するとテーブルが削除される直前のスナップショットを除いて、取得済みのバックアップも削除されてしまう
- スナップショットを使用してテーブルをリストアしても、PITRの過去35日間の継続的なバックアップは復元されない
そのため、PITRを使用して同じテーブル名でリストアする場合は、以下の2点に注意する必要があります。
- リストアに3つのステップが必要になる
- リストア時点以外のバックアップデータが失われる
それぞれ詳細に説明します。
リストアに3つのステップが必要になる
前述の通り、DynamoDBやPITRでは、同一テーブル名の作成やテーブル名の変更ができないため、
PITRによるリストアは、別テーブル名の新規作成という形式で行う必要があります。
一方、別テーブル名によるリストアには、以下のようなデメリットも存在します。
- アプリケーション側での接続切り替え作業が必要になる
- Amazon Web Services(AWS) Backupのリソース割り当てで指定するテーブル名の変更が必要になる
- AWS Identity and Access Management(IAM)ポリシーやタグベースのアクセス制御の修正が必要になる
- 外部監視ツールの設定変更が必要になる
これらのデメリットを解消するような処理方式も考えられますが、
様々な制約から、別のテーブル名でのリストアが許容できず、同じテーブル名でのリストアが必要なケースもあるかもしれません。
そのような場合には、以下の手順で同じテーブル名でのリストアを行う必要があります。
- 別のテーブル名でリストア
- 既存のテーブルを削除
- 元のテーブル名でリストア
ただし、図のように2段階(別名→元名)に分けてリストアする必要があるため、処理時間が2倍近くかかります。
DynamoDBのテーブルに格納するデータ数が大規模な場合、1回のリストア時間も長くなるため、要件次第ではRTOを満たせなくなる可能性がある点に注意が必要です。
リストア時点以外のバックアップデータが失われる
前述の通りPITRには、
- PITRが有効なテーブルを削除するとテーブルが削除される直前のスナップショットを除いて、取得済みのバックアップも削除されてしまう
- スナップショットを使用してテーブルをリストアしても、PITRの過去35日間の継続的なバックアップは復元されない
という制約があります。そのため、PITRでの別テーブル名でのリストア時に既存のテーブルを削除することで、リストアした時点以外のバックアップが失われます。これにより、リストアした時点に不具合があった場合に、他の時点に戻すことができなくなります。
そこで、PITRを用いて同じテーブル名でのリストアを行いたい場合、たとえば以下ような対策を行い、リストアが上手くいかなかった場合にも備える必要があります。
- 別テーブル名で複数時点をリストア
- 別のバックアップ方式(AWS Backupなど)を併用
まとめ
今回はDynamoDBのバックアップ機能の1つであるPITRの制約と注意点についてまとめました。他にもAWS BackupやS3へのエクスポート/インポートなどの方式もあるため、要件と比較して最適な方式を選定するのが望ましいです。
参考

NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。