DynamoDBのお手軽バックアップ
アプリの状態だけ保持しているようなあまり大きくないDynamoDBのテーブルを
バックアップするのにDataPipeline使うのもどうかと思うのでツール作ろうかと考えていたら
既にあった。
使ってみたら結構便利だったので使い方をまとめます。
AmazonLinuxへインストール
このツールはAWSのpython向けSDKであるboto
を利用しますが、
AmazonLinuxにはpython + botoが初めから入っています。
dynamodumpをgitからチェックアウトするだけで使う準備は完了です。
$ yum -y install git $ git clone https://github.com/bchew/dynamodump.git $ cd dynamodump
バックアップ
バックアップ対象のDynamoDBテーブルへの読み込み権限があれば、
以下の3つのオプションのみでバックアップが取得できます。
パラメータ名 | 値 |
---|---|
-m (Mode) | backup |
-r (Region) | ap-northeast-1 |
-s (SrcTable) | 対象のテーブル名 |
$ python dynamodump.py -m backup -r ap-northeast-1 -s my-table INFO:root:Starting backup for my-table.. INFO:root:Dumping table schema for my-table INFO:root:Dumping table items for my-table INFO:root:Backup for my-table table completed. Time taken: 0:00:00 $ tree . |-- LICENSE |-- README.md |-- dump | `-- my-table | |-- data | | `-- 0001.json | `-- schema.json |-- dynamodump.py `-- requirements.txt
リストア
リストアはバックアップ時と同じパラメータでも実行可能です。
しかしそのまま実行すると前処理でテーブルを削除してしまうので、
データだけを戻したい場合は--dataOnly
オプションを指定します。
パラメータ名 | 値 |
---|---|
-m (Mode) | restore |
-r (Region) | ap-northeast-1 |
-s (SrcTable) | 対象のテーブル名 |
--dataOnly | スキーマの作成/削除を行わない |
$ python dynamodump.py -m restore -r ap-northeast-1 -s my-table INFO:root:my-table table is being deleted.. INFO:root:my-table table deleted! INFO:root:Starting restore for my-table to my-table.. INFO:root:Creating my-table table with temp write capacity of 25 INFO:root:Waiting for my-table table to be created.. [CREATING] INFO:root:my-table created. INFO:root:Restoring data for my-table table.. INFO:root:Processing 0001.json of my-table INFO:root:Updating my-table table read capacity to: 1, write capacity to: 1 INFO:root:Restore for my-table to my-table table completed. Time taken: 0:00:21
$ python dynamodump.py -m restore -r ap-northeast-1 -s my-table --dataOnly INFO:root:Starting restore for my-table to my-table.. INFO:root:Restoring data for my-table table.. INFO:root:Processing 0001.json of my-table INFO:root:Restore for my-table to my-table table completed. Time taken: 0:00:01
S3へ定期バックアップするように設定する
cronでも良いと思いますが今回はJenkinsを使用してジョブを定義しました。
Git:RepositoryURL
にhttps://github.com/bchew/dynamodump.git
を指定して、
シェルの実行
で以下のように定義するのがオススメです。
対象のバケット名やテーブルはお好みで変更してください。
BUCKET_NAME=yustam-dynamo-backup ARCHIVE_NAME=dump_`date +%Y%m%d%H%M`.tgz python dynamodump.py -m backup -r ap-northeast-1 -s my-table tar czf $ARCHIVE_NAME ./dump rm -rf ./dump aws s3 cp $ARCHIVE_NAME s3://$BUCKET_NAME/dynamo/$ARCHIVE_NAME rm -f $ARCHIVE_NAME exit 0;
ビルドトリガ
を定期的に実行
にして好きな時間に動かしたらいいと思います。