DynamoDBで1つのテーブルを新しいテーブルに同じようにコピーする最良の方法は何ですか?
(私は原子性について心配していません)。
AWS Pipelineは、この目的に使用できるテンプレート「CrossRegion DynamoDB Copy」を提供します
参照: http://docs.aws.Amazon.com/datapipeline/latest/DeveloperGuide/dp-crossregion-ddb-create.html
結果は次のような単純なパイプラインです。
CrossRegionと呼ばれますが、宛先テーブル名が異なる限り、同じリージョンに簡単に使用できます(テーブル名はアカウントとリージョンごとに一意であることに注意してください)
バックアップを作成し(backupsオプション)、新しいテーブル名でテーブルを復元します。これにより、すべてのデータが新しいテーブルに取り込まれます。注:テーブルのサイズによってはかなり時間がかかります
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
環境変数で変更します。
Scan を使用してデータを読み取り、新しいテーブルに保存できます。
AWSフォーラムで、AWSチームの男がEMRを使用して別のアプローチを投稿しました: テーブルを複製するにはどうすればよいですか?
このノードのjsモジュールを使用: copy-dynamodb-table
2017年11月29日にGlobal Tablesが導入されました。これは、ユースケースによっては役立つ場合がありますが、元の質問とは異なる場合があります。 ブログ投稿 からの抜粋をいくつか示します。
グローバルテーブル– 2つ以上のAWSリージョン間で自動的に複製されるテーブルを作成できるようになりました。マルチマスター書き込みを完全にサポートし、クリック。これにより、レプリケーションプロセスを管理する必要なく、グローバルユーザーベース向けに高速で大規模にスケーリングされたアプリケーションを構築できます。
...
既存のコードを変更する必要はありません。指定されたリージョンのいずれかのDynamoDBエンドポイントに書き込みリクエストと最終的に一貫した読み取りリクエストを送信するだけです(強い一貫性のある読み取りに関連付けられている書き込みは、共通のエンドポイントを共有する必要があります)。舞台裏では、DynamoDBはマルチマスター書き込みを実装し、特定のアイテムへの最後の書き込みが優先されるようにします。グローバルテーブルを使用する場合、各アイテムには、最新の書き込みの時刻を表すタイムスタンプ属性が含まれます。更新はDynamoDBストリームを介して非同期で他のリージョンに伝播され、通常1秒以内に完了します(これは新しいReplicationLatencyとPendingReplicationCountメトリック)。
以前の返信で述べたように、データパイプラインテンプレートは存在しません。
このスレッドで他のいくつかの命題を試した後、データを移動するためのNodeJSスクリプトを作成しました。多分それはあなたのために働くことができますか?あなたが試したいなら、私は私のアプローチを文書化しました ここの私のブログに 。