Amazon DynamoDBのデータをエクスポートする方法はいろいろとあります。
Pythonを使ったツールだとdynamodb-json、DynamoDBtoCSV あたりが星多めですね。
本記事ではシェルスクリプトでJSON形式でデータをエクスポート・インポートする手軽な方法をまとめます。
使用ツール
実行前確認
下のコマンドでテーブル内容を取得できることを確認します(追加で指定が必要な環境もあります)。
aws dynamodb scan --table-name [テーブル名]
エクスポート
AWS CLIを使ってJSON形式でエクスポートするシェルスクリプトです。
--queryを使って特定のデータのみを出力することも可能です。
export-data.sh
# 第一引数でテーブル名をセット
table_name=${1:-null}
if [ $table_name = "null" ]; then
echo "export-data.sh [table_name]"
exit
fi
# AWS CLIでエクスポート
aws dynamodb scan \
--table-name ${table_name} \
--output json \
> ${table_name}.json
テーブル構造が簡単で、Excelなどで編集したい場合は、下のように列名を指定してCSV形式で出力することもできます(Number列 「id」、String列「name」の例)。
CSV形式でエクスポート
aws dynamodb scan \
--table-name ${table_name} \
--query "Items[*].[id.N,name.S]" \
--output json \
| jq -r '.[] | @csv' \
> ./${table_name}.csv
インポート
インポートはひと手間かかり、ファイルを一行ずつ読み込んでアップサートすることになります。
import-data.sh
# 第一引数でテーブル名をセット
table_name=${1:-null}
# テーブル名指定で1テーブルのみ処理
if [ $table_name != "null" ]; then
while IFS= read -r item; do
aws dynamodb put-item --table-name "${table_name}" --item "$item"
done< <(jq -c '.Items[]' < "./${table_name}.json")
exit
fi
参考
シェルスクリプトでテーブルスキーマごと複製したい場合は下の記事が参考になります。