web-dev-qa-db-ja.com

DynamoDBで1つのテーブルを別のテーブルにコピーする

DynamoDBで1つのテーブルを新しいテーブルに同じようにコピーする最良の方法は何ですか?

(私は原子性について心配していません)。

23
ensnare

AWS Pipelineは、この目的に使用できるテンプレート「CrossRegion DynamoDB Copy」を提供します

参照: http://docs.aws.Amazon.com/datapipeline/latest/DeveloperGuide/dp-crossregion-ddb-create.html

結果は次のような単純なパイプラインです。

enter image description here

CrossRegionと呼ばれますが、宛先テーブル名が異なる限り、同じリージョンに簡単に使用できます(テーブル名はアカウントとリージョンごとに一意であることに注意してください)

17

バックアップを作成し(backupsオプション)、新しいテーブル名でテーブルを復元します。これにより、すべてのデータが新しいテーブルに取り込まれます。注:テーブルのサイズによってはかなり時間がかかります

15

python script、 dynamodb-copy-table を使用して、資格情報がいくつかの環境変数(AWS_ACCESS_KEY_IDおよびAWS_SECRET_ACCESS_KEY )、そしてそれは完璧に機能しました。宛先テーブルも作成してくれました。

python dynamodb-copy-table.py src_table dst_table

デフォルトのリージョンはus-west-2であり、AWS_DEFAULT_REGION環境変数で変更します。

8
Rohmer

Scan を使用してデータを読み取り、新しいテーブルに保存できます。

AWSフォーラムで、AWSチームの男がEMRを使用して別のアプローチを投稿しました: テーブルを複製するにはどうすればよいですか?

7
Chen Harel

このノードのjsモジュールを使用: copy-dynamodb-table

0
Ezzat

2017年11月29日にGlobal Tablesが導入されました。これは、ユースケースによっては役立つ場合がありますが、元の質問とは異なる場合があります。 ブログ投稿 からの抜粋をいくつか示します。

グローバルテーブル– 2つ以上のAWSリージョン間で自動的に複製されるテーブルを作成できるようになりました。マルチマスター書き込みを完全にサポートし、クリック。これにより、レプリケーションプロセスを管理する必要なく、グローバルユーザーベース向けに高速で大規模にスケーリングされたアプリケーションを構築できます。

...

既存のコードを変更する必要はありません。指定されたリージョンのいずれかのDynamoDBエンドポイントに書き込みリクエストと最終的に一貫した読み取りリクエストを送信するだけです(強い一貫性のある読み取りに関連付けられている書き込みは、共通のエンドポイントを共有する必要があります)。舞台裏では、DynamoDBはマルチマスター書き込みを実装し、特定のアイテムへの最後の書き込みが優先されるようにします。グローバルテーブルを使用する場合、各アイテムには、最新の書き込みの時刻を表すタイムスタンプ属性が含まれます。更新はDynamoDBストリームを介して非同期で他のリージョンに伝播され、通常1秒以内に完了します(これは新しいReplicationLatencyPendingReplicationCountメトリック)。

0
mkobit

以前の返信で述べたように、データパイプラインテンプレートは存在しません。

このスレッドで他のいくつかの命題を試した後、データを移動するためのNodeJSスクリプトを作成しました。多分それはあなたのために働くことができますか?あなたが試したいなら、私は私のアプローチを文書化しました ここの私のブログに

0
T Vernon