NTT DATA TECH
🐈

DynamoDBのポイントインタイムリカバリ(PITR)の落とし穴

に公開

はじめに

あるシステム開発の中で、Amazon DynamoDBのバックアップ・リストア方式の1つであるポイントインタイムリカバリ(PITR)について検討していたのですが、検討当初に想定していなかった制約に直面しました。本記事では、まずPITRの概要を簡潔に説明し、その後、制約と注意点について重点的に解説します。

なお、DynamoDBにおけるPITRとそれ以外のバックアップ・リストア方式の比較は、以下の記事に分かりやすくまとまっているため、本記事では詳細な比較は省略します。

https://techblog.asia-quest.jp/202302/five-dynamodb-restore-methods-from-an-operational-perspective

対象読者

  • 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)ポリシーやタグベースのアクセス制御の修正が必要になる
  • 外部監視ツールの設定変更が必要になる

これらのデメリットを解消するような処理方式も考えられますが、
様々な制約から、別のテーブル名でのリストアが許容できず、同じテーブル名でのリストアが必要なケースもあるかもしれません。

そのような場合には、以下の手順で同じテーブル名でのリストアを行う必要があります。

  1. 別のテーブル名でリストア
  2. 既存のテーブルを削除
  3. 元のテーブル名でリストア

ただし、図のように2段階(別名→元名)に分けてリストアする必要があるため、処理時間が2倍近くかかります。
DynamoDBのテーブルに格納するデータ数が大規模な場合、1回のリストア時間も長くなるため、要件次第ではRTOを満たせなくなる可能性がある点に注意が必要です。

リストア時点以外のバックアップデータが失われる

前述の通りPITRには、

  • PITRが有効なテーブルを削除するとテーブルが削除される直前のスナップショットを除いて、取得済みのバックアップも削除されてしまう
  • スナップショットを使用してテーブルをリストアしても、PITRの過去35日間の継続的なバックアップは復元されない

という制約があります。そのため、PITRでの別テーブル名でのリストア時に既存のテーブルを削除することで、リストアした時点以外のバックアップが失われます。これにより、リストアした時点に不具合があった場合に、他の時点に戻すことができなくなります。

そこで、PITRを用いて同じテーブル名でのリストアを行いたい場合、たとえば以下ような対策を行い、リストアが上手くいかなかった場合にも備える必要があります。

  • 別テーブル名で複数時点をリストア
  • 別のバックアップ方式(AWS Backupなど)を併用

まとめ

今回はDynamoDBのバックアップ機能の1つであるPITRの制約と注意点についてまとめました。他にもAWS BackupやS3へのエクスポート/インポートなどの方式もあるため、要件と比較して最適な方式を選定するのが望ましいです。

参考

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/PointInTimeRecovery_Howitworks.html

https://techblog.asia-quest.jp/202302/five-dynamodb-restore-methods-from-an-operational-perspective

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています