AWS DynamoDBでシステムを組むとテーブルは当然1つ2つでは済まず、システムとしてたくさんのテーブルを作ることになります。システムをテスト用や本番環境などで別リージョンにコピーを作らないといけないこともあり、ボタンひとつで簡単にコピーできればいいのですがそういったツールもなく手作業になっています。AWSのCLIコマンドを組み合わせればある程度テーブル定義の取得から別リージョンに新たにテーブル作成することができます。
テーブル一覧を取得
aws dynamodb list-tables
テーブル定義を取得
aws dynamodb describe-table --table-name テーブル名 > 出力ファイル名.json
テーブルリストが取得できるので上記のdescribe-tableで定義を取得しJSONファイルを保存します。このdescribe-table情報はテーブル作成で要らない情報も入っていますのでそれを編集します。下記のElementを削除します。
['TableStatus', 'TableSizeBytes','TableId','TableArn', 'ItemCount','CreationDateTime', 'NumberOfDecreasesToday','IndexStatus','IndexSizeBytes','IndexArn']
テーブル作成
describe-tableのJSONが綺麗に修正できたらcreate-tableを実行します。
aws dynamodb create-table --table-name テーブル名 --cli-input-json file://テーブル定義.json
この手順で別リージョンにコピーできるのですがdescribe-tableの編集が面倒です。なのでわたしの場合Node.jsで組んで簡単に引越しできるようにしました。
https://github.com/mojeld/copyDynamoDBTabledefinitionToAnotherRegion
node index.js ap-northeast-1 us-west-2
上記のようにソースリージョンとコピー先リージョンを指定するとコピーできます。