DynamoDBテーブルから何らかの形式でデータをエクスポートすることは可能ですか?
具体的なユースケースは、本番dynamodbデータベースからデータをエクスポートし、そのデータをローカルdynamodbインスタンスにインポートして、アプリケーションが本番データの代わりにデータのローカルコピーを使用できるようにすることです。
link をDynamoDBのローカルインスタンスとして使用します。
DynamoDBtoCSV という名前のツールがあります
すべてのデータをCSVファイルにエクスポートするために使用できます。ただし、他の方法では、独自のツールを作成する必要があります。私の提案は、この機能をツールに追加し、Gitリポジトリに貢献することです。
別の方法は、このタスクにAWS Data Pipelineを使用することです(AWSインフラストラクチャの外部からデータを読み取るためのすべてのコストを節約できます)。アプローチは似ています:
DynamoDBインターフェイスからS3にエクスポートします。
次に、sedを使用してJsonに変換します。
sed -e 's/$/}/' -e $'s/\x02/,"/g' -e $'s/\x03/":/g' -e 's/^/{"/' <exported_table> > <exported_table>.json
/ aws cli および jq を使用して、テーブルからsomeデータ(多くの場合、ローカルでprodデータのサンプルを取得したいだけです)をエクスポートする方法を示します。当然のことながらmy-prod-table
というprodテーブルとmy-local-table
というローカルテーブルがあるとします。
データをエクスポートするには、次を実行します。
aws dynamodb scan --table-name my-prod-table \
| jq '{"my-local-table": [.Items[] | {PutRequest: {Item: .}}]}' > data.json
基本的に、prodテーブルをスキャンし、スキャンの出力を batchWriteItem の形式に整形して、結果をファイルにダンプします。
ローカルテーブルにデータをインポートするには、次を実行します。
aws dynamodb batch-write-item \
--request-items file://data.json \
--endpoint-url http://localhost:8000
注:batch-write-item
要求にはいくつかの制限があります-BatchWriteItem操作には、最大25個の個別のPutItemおよびDeleteItem要求を含めることができ、最大16 MBのデータを書き込むことができます。 (個々のアイテムの最大サイズは400 KBです。).
これにより、すべてのアイテムがJSONドキュメントとしてエクスポートされます
aws dynamodb scan --table-name TABLE_NAME > export.json
私の簡単なnode.jsスクリプトを試してください dynamo-archive 。 JSON形式でエクスポートおよびインポートします。
シンプルなインポート/エクスポート(DynamoDB Localを介したラウンドトリップを含む)に最適な最新ツールは、次のとおりですPythonスクリプト:
https://github.com/bchew/dynamodump
このスクリプトは、スキーマのエクスポート/インポートおよびデータのインポート/エクスポートをサポートします。また、効率的な操作のためにバッチAPIを使用します。
開発目的でDynamoDBテーブルからDynamoDBローカルにデータを取得するためにこれを正常に使用しましたが、私のニーズにはかなりうまくいきました。
開発者のエクスポートを支援するユーティリティクラスを作成しました。これは、AWSのデータパイプライン機能を使用したくない場合に使用できます。 git hub repoへのリンクは- here です
Javaを使用してこれを行う場合は、 DynamodbToCSV4j があります。
JSONObject config = new JSONObject();
config.put("accessKeyId","REPLACE");
config.put("secretAccessKey","REPLACE");
config.put("region","eu-west-1");
config.put("tableName","testtable");
d2csv d = new d2csv(config);