我想将所有DynamoDB表格复制到另一个AWS账户,但不使用S3来保存数据。我看到有通过数据管道复制带有数据的表格的解决方案,但是它们都使用S3来保存数据。由于表格包含大量数据,因此S3写入和读取过程可能需要时间,所以我想跳过S3步骤,直接从一个账户复制表格到另一个账户。
我想将所有DynamoDB表格复制到另一个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
模块
npm i copy-dynamodb-table
import boto3
import json
from dynamodb_json import json_util as djson
from copy import deepcopy
REGION = 'eu-west-1'
# init your sessions to the different accounts (session_a and session_b)
dynamo_a = session_a.client('dynamodb', region_name=REGION)
dynamo_b = session_b.resource('dynamodb', region_name=REGION)
table = dynamo_b.Table('abc')
result_data = table.scan()
result_item = []
result_item.extend(result_data['Items'])
while 'LastEvaluatedKey' in result_data:
result_data = my_table.scan(
FilterExpression=filter_expression,
ExclusiveStartKey=result_data['LastEvaluatedKey']
)
result_item.extend(result_data['Items'])
translated_items = []
for r in result_item:
updated_item = deepcopy(r)
translated_items.append(updated_item)
for r in translated_items:
item = json.loads(djson.dumps(r))
dynamo_a.put_item(TableName='def', Item=item)
S3绝对不是瓶颈。 我几乎可以说,对于99%的用例,您应该使用AWS建议的最佳实践“Data Pipeline + S3”进行操作。 我在这里提供了更详细的答案:https://dev59.com/fqzka4cB1Zd3GeqP72Wk#57465721
真正的问题是,您是否组织其他系统和客户端以实时读取/写入数据的方式进行迁移,而不会导致停机时间。 如果这是您对任务时间表最担心的问题-那么您需要设计自定义解决方案,以确保所有写入都进入两个帐户中的DDB表,并将读取数据的客户端切换到目标DDB表,然后再最终切换写入数据的客户端。 也有一些其他类型的迁移计划可供选择。