尋常でないもふもふ

a software engineer blog

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-* (以下略)