Amazon Web Services ブログ
新機能 – Amazon DynamoDBに継続的バックアップとPoint-In-Time-Recovery(PITR)機能が追加されました
Amazon DynamoDBチームはencryption at restに引き続き新しい機能を発表しました。AWS re:Invent 2017 では、グローバルテーブルの作成と DynamoDBテーブルのオンデマンドバックアップとリストアを発表しました。そして今日、継続的バックアップとしてPITR(ポイントインタイムリカバリ)を利用出来るようになりました。
AWS Management Consoleからワンクリックするか、簡単なAPIコール、またはAWSコマンドラインインターフェイス(CLI)を使用して継続的バックアップを有効にすることができます。DynamoDBはPITRが有効になってから35日以内であれば1秒単位でデータをバックアップし、1秒単位でリストアできます。誤った書き込みや削除を防ぐためにこの機能を構築しました。開発者がステージングではなくプロダクションに対してスクリプトを実行した場合や誤ったDeleteItemを実行した場合はPITRでカバー出来ます。その為予測できないようなシナリオにも利用出来ます。オンデマンドバックアップはアーカイブ目的のために必要なタイミングを指定できますが、PITRは偶発的なデータ消失に対する追加の保険として機能します。これがどのように機能するか見てみましょう。
継続的バックアップ
マネジメントコンソールでこの機能を有効にするには、テーブルに移動して[ バックアップ ]タブを選択します。そこから、Enableをクリックするだけで有効になります。また、UpdateContinuousBackups API呼び出しを使用して継続的バックアップを有効にすることもできます。
継続的バックアップを有効にした後、最も遠い復元日と最新の復元日時を確認出来ます。
削除したい古いユーザーデータがたくさんある、というシナリオを例にとってみます。
私はlast_updateに格納されている日付に基づいてアクティブなユーザーだけに通知を送信したいと考えました。そしてサービスを使用していないユーザーを削除するために簡単なPythonスクリプトを書くことに決めました。
import boto3
table = boto3.resource("dynamodb").Table("VerySuperImportantTable")
items = table.scan(
FilterExpression="last_update >= :date",
ExpressionAttributeValues={":date": "2014-01-01T00:00:00"},
ProjectionExpression="ImportantId"
)['Items']
print("Deleting {} Items! Dangerous.".format(len(items)))
with table.batch_writer() as batch:
for item in items:
batch.delete_item(Key=item)
すばらしい!これでサービスに2013年以来ログインしていない厄介な非アクティブユーザをすべて削除するはず・・・CTRL + C CTRL + C CTRL + C CTRL + C(現在実行中のコマンドを中断する)ギャー!どこが間違っているのかわかりますか?最も重要なユーザーを削除しました!しまった!2014-01-01T00:00:00より以前のユーザーを消そうとして、その逆をやってしまいました!早く!Jeff barr(解説:Chief Evangelist for AWSで筆者の上司)が見る前に、私はテーブルを復元するつもりです。(Boto 3ではless-thanの意味でltと表記出来るので記号を逆に考えてしまうタイプミスを防ぐことができますね。DynamoDBの条件:
Attr("last_update").lt("2014-01-01T00:00:00")
リストア
幸いにもテーブルを復元するのは簡単です。コンソールでは、自分のテーブルのBackupsタブに移動し、Restore to point-in-timeをクリックします。
そして時間を指定します(今回は誤った削除スクリプトを実行する数秒前)と、復元する新しいテーブルの名前を指定します。
今回のような比較的小さく均等に分散したテーブルの場合、リストアは非常に高速です。
テーブルのリストアに要する時間は複数の要因に基づくので、復元時間は必ずしもテーブルのデータ容量と常に一緒とは限りません。データセットがプライマリキーに均等に分散されている場合は並列化によりリストアが高速化されます。
Learn More & Try It Yourself
この新機能については、こちらのドキュメントでさらに詳しく知ることができます。
継続的バックアップの価格はリージョンによって異なり、現在のテーブルのサイズとすべてのインデックスが対象となります。
いくつかの注意点:
PITRは暗号化が有効なテーブルでも動作します。
PITRを無効にして後で再び有効にすると、復元可能な開始時刻がリセットされます。
オンデマンドバックアップと同様に、この機能を有効にしてもパフォーマンスや可用性に影響はありません。
DynamoDB Streams、TTL設定、PITR設定、タグ、Amazon CloudWatchアラーム、AutoScalingポリシーは復元されたテーブルにコピーされません。
すべてのPITR APIコールがAWS CloudTrailに記録されているため、Jeffにテーブル全体を復元していることがバレてしまいました。
Twitterやコメントで継続的バックアップとPITRの使い方をぜひ教えてください。 – Randall
(元記事はこちら 翻訳者: Solution Architect 成田)