AQ Tech Blog

運用観点で選ぶDynamoDBのリストア方法5選 | AQ Tech Blog

作成者: takeshi.yoshida|2023年02月16日

はじめに

以前、大量のデータがあるDynamoDBのリストア方法を考える機会がありました。

DynamoDBのリストア自体はDynamoDBの機能(オンデマンドバックアップ、ポイントインタイムリカバリ)やAWS Backupを利用すれば実現できます。

しかし、テーブル名はAWS アカウントとリージョンで一意という制約があるため、リストア元のテーブルが存在する場合、リストアされたテーブルの名前は別名である必要があります。 そのため、単純にリストアしただけでは、別名となったテーブルで運用する事となるため、アプリケーション側に大きな影響を与えます。

当記事では、アプリケーション側の影響が少ないDynamoDBのリストア方法を中心に紹介し、運用観点から見たそれぞれのパターンのメリット・デメリットをまとめてみます。

最初に断っておきますが、当記事執筆時点(2022年11月)でスマートな解決方法はありません。

アプリケーション側で工夫するか、クラウド側で工夫するか、そのどちらかになります。

当記事の対象者

DynamoDBのリストア方法を検討中の方。

前提

リストア方法をご紹介する前に、DynamoDBには以下の仕様と制約があります。

・既存のテーブルにリストアされない

(テーブルが新規作成され、そのテーブルにリストアされる)

・テーブル名はAWS アカウントとリージョンで一意

・テーブル名の編集が出来ない

 

したがって、既存のテーブル、もしくは既存のテーブル名を利用し続ける場合、一工夫が必要となります。

これから挙げさせていただく方法はどれもメリット・デメリットがあり、ベストな方法はありません。

テーブルがどのくらいのデータ量か、システムのRPO・RTOがどのように定義されているのかを考慮して、DynamoDBのリストア方法を検討してください。

リストア方法

今回は下記の5つの方法をご紹介します。

①別名でリストアされたテーブルを運用する

②ツール利用して、リストアされたテーブルからデータをエクスポートし、リストア元のテーブルにデータをインポートする

③S3へのエクスポート機能、S3からのインポート機能を利用する

④リストア元のテーブルを削除した後、バックアップからリストア元のテーブル名でリストアする

⑤リストアを2回実施する

 

①別名でリストアされたテーブルを運用する

冒頭で紹介しました一番シンプルな方法です。

DynamoDBの機能(オンデマンドバックアップ、ポイントインタイムリカバリ)、AWS Backupを利用して、テーブルをリストアします。別名で作成されたテーブルを運用していきます。

メリット

・シンプル

デメリット

・アプリケーション側の影響が非常に大きい

・(リストア元のテーブルをCloudFormationで作成していた場合)

テーブル名が別名になったことによりCloudFormationの管理から外れる

→CloudFormationのインポート機能を利用すればこの問題は解決

・リストアによって外れる設定を手動で設定し直す必要がある。

リストアによって外れる設定は以下の通り。

・Auto Scaling ポリシー

・AWS Identity and Access Management (IAM) ポリシー

・Amazon CloudWatch メトリクスおよびアラーム

・タグ

・ストリーム設定

・有効期限 (TTL) 設定

・ポイントインタイムリカバリ設定

引用:ポイントインタイムリカバリ: 仕組み - Amazon DynamoDB

 

②ツール利用して、リストアされたテーブルからデータをエクスポートし、リストア元のテーブルにデータをインポートする

EC2上でPythonなどで作成したツールを利用して、リストアされたテーブルからデータをエクスポートします。その後、エクスポートしたデータをリストア元のテーブルにインポートし、リストア元のテーブルを引き続き利用していく方法です。

メリット

・既存のテーブルを利用できるため、アプリケーション側の影響が少ない

・CloudFormationの管理から外れない

デメリット

・リストア地点より以降に書き込みがされたデータは残り続けるため、厳密なリストアとは言えない

・エクスポートするデータ量に合わせて、一時的にデータを格納するEC2のストレージも拡張しなければならない。

・データ量に比例してエクスポート、インポートにかかる時間が増える

 

③S3へのエクスポート機能、S3からのインポート機能を利用する

S3へのエクスポート機能でデータをエクスポートします。既存テーブルを削除後、S3からのインポート機能で同名のテーブルを作成する方法です。

メリット

・既存のテーブル名を利用できるため、アプリケーション側の影響が少ない

・CloudFormationの管理から外れない

・②の方法より安価

・35日以内の特定地点のデータをエクスポートすることができる

デメリット

・既存のテーブルを削除するため、ダウンタイムが発生する

・S3からのインポート機能に1TBの制限がある

参考:インポート形式のクォータと検証

・データ量に比例してエクスポート、インポートにかかる時間が増える

 

④リストア元のテーブルを削除した後、バックアップからリストア元のテーブル名でリストアする

オンデマンドバックアップかAWS Backupによるバックアップを取得した後、

バックアップからリストア元のテーブル名でリストアする方法です。

メリット

・データ量による制限がない

・既存のテーブル名を利用できるため、アプリケーション側の影響が少ない

・テーブル名が変わらないため、リストアによって外れる設定を手動によって設定しなおせば、CloudFormationによる管理を維持できる。

デメリット

・ポイントインタイムリカバリが利用できない

・既存のテーブルを削除するため、ダウンタイムが発生する

・リストアによって外れる設定を手動によって設定し直す必要がある

 

⑤リストアを2回実施する

ポイントインタイムリカバリでリストアした後、リストア元のテーブルを削除。リストアされたテーブルから元のテーブル名で再度リストアする方法です。

メリット

・シンプル

・データ量による制限がない

・既存のテーブル名を利用できるため、アプリケーション側の影響が少ない

・テーブル名が変わらないため、リストアによって外れる設定を手動によって設定しなおせば、CloudFormationによる管理を維持できる

・35日以内の特定地点のデータをリストアすることができる

デメリット

・既存のテーブルを削除するため、ダウンタイムが発生する

・2回テーブルを作成する事となるため、非常にコストがかかる

・リストアによって外れる設定を手動によって設定し直す必要がある

・1回目のリストア地点より前の地点でリストアすることができない

最後に

今回はDynamoDBのリストア方法を5つご紹介しました。

この記事が少しでもお役に立てたのなら幸いです。