DynamoDBの一番簡単なバックアップ方法
dynamodump という素晴らしいツールを作ってくれてる人がいた。
GitHub - bchew / dynamodump
実行環境
Python 環境が必要。Python 用 AWS SDK の boto というライブラリを利用しているため、pip も入れておくこと。
$ git clone https://github.com/bchew/dynamodump.git $ cd dynamodump $ sudo pip install boto
バックアップの実行
- -m で backup するのか restore するのかを指定
- -r でリージョン名を指定(ap-northeast-1 は東京リージョンのこと)
- -s でバックアップするテーブル名を指定(アスタリスクでワイルドカード指定も可)
- --accessKey と --secretKey で AWS アカウントのアクセスキーとシークレットキーを指定
$ python dynamodump.py -m backup -r ap-northeast-1 -s user --accessKey xxxxx --secretKey xxxxx
本番環境の 7万件で合計 15MB あるテーブルは数秒程度、230万件で合計 350MB あるテーブルは 8 分でバックアップが取れました。
余談
DynamoDB でサービス運用する場合、1つのアカウントで複数のスペースを持てないため、Dev環境・ステージング環境・本番環境も同一の DynamoDB 内におかなければならい 。
そのため、テーブル名の接頭辞で分ける手法が一般的だと思う。
例えば、user・battle・gift という 3 テーブルを利用してる場合、以下のようになる。
- dev-user
- dev-battle
- dev-gift
- staging-user
- staging-battle
- staging-gift
- product-user
- product-battle
- product-gift
dynamodump はワイルドカード指定ができるため、以下のようにするだけで環境別のバックアップが取れる。
$ python dynamodump.py -m backup -s dev-* (以下略)