我想将所有dynamoDB表复制到另一个没有s3的aws帐户来保存数据。我看到了使用数据管道复制表的解决方案,但所有都使用s3来保存数据。我想跳过s3步骤,因为该表包含大量数据,因此s3写入和s3读取过程可能需要一些时间。所以我需要直接将表从一个帐户复制到另一个帐户。
如果你不介意使用Python,并添加boto3库(sudo python -m pip install boto3),那么我会这样做(我假设你知道如何分别填写代码中的键,区域和表名) :
import boto3
import os
dynamoclient = boto3.client('dynamodb', region_name='eu-west-1',
aws_access_key_id='ACCESS_KEY_SOURCE',
aws_secret_access_key='SECRET_KEY_SOURCE')
dynamotargetclient = boto3.client('dynamodb', region_name='us-west-1',
aws_access_key_id='ACCESS_KEY_TARGET',
aws_secret_access_key='SECRET_KEY_TARGET')
dynamopaginator = dynamoclient.get_paginator('scan')
tabname='SOURCE_TABLE_NAME'
targettabname='TARGET_TABLE_NAME'
dynamoresponse = dynamopaginator.paginate(
TableName=tabname,
Select='ALL_ATTRIBUTES',
ReturnConsumedCapacity='NONE',
ConsistentRead=True
)
for page in dynamoresponse:
for item in page['Items']:
dynamotargetclient.put_item(
TableName=targettabname,
Item=item
)
试试这个nodejs
module
npm i copy-dynamodb-table
使用boto对Amazon DynamoDB进行简单备份和还原
https://github.com/bchew/dynamodump
可以执行以下操作:
读取和写入S3不会成为您的瓶颈。
虽然从Dynamo扫描速度非常快,但将项目写入目标表的速度会很慢。每个分区每秒最多只能写入1000个项目。所以,我不担心中间S3存储。
但是,数据管道也不是将表复制到另一个表的最有效方法。
如果您需要快速的转移,那么您最好的选择是实施自己的解决方案。根据所需的传输吞吐量配置目标表(但要注意不需要的分区拆分),然后使用多个线程写入并行扫描,这也会写入目标表。
Java中有一个开源实现,您可以将其用作AWS实验室存储库中的起点。
您可以使用DynamoDb Streams和Lambda来实现此目的。 http://searchaws.techtarget.com/tip/DynamoDB-Streams-keep-database-tables-in-sync