将dynamoDB表复制到另一个没有S3的aws帐户

问题描述 投票:10回答:5

我想将所有dynamoDB表复制到另一个没有s3的aws帐户来保存数据。我看到了使用数据管道复制表的解决方案,但所有都使用s3来保存数据。我想跳过s3步骤,因为该表包含大量数据,因此s3写入和s3读取过程可能需要一些时间。所以我需要直接将表从一个帐户复制到另一个帐户。

copy amazon-dynamodb
5个回答
20
投票

如果你不介意使用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
        )

8
投票

试试这个nodejs module

npm i copy-dynamodb-table

5
投票

使用boto对Amazon DynamoDB进行简单备份和还原

https://github.com/bchew/dynamodump

可以执行以下操作:

  • 单表备份/恢复
  • 多表备份/恢复
  • 多表备份/恢复但在不同环境之间(例如,生产 - *表到开发 - *表)
  • 备份所有表并仅还原数据(不会删除并重新创建架构)
  • 转储所有表模式并创建模式(例如,在不同的AWS账户中创建空表)
  • 根据AWS tag key = value备份所有表
  • 根据AWS标记备份所有表,压缩并存储在指定的S3存储桶中。
  • 从S3存储桶还原到指定的目标表

2
投票

读取和写入S3不会成为您的瓶颈。

虽然从Dynamo扫描速度非常快,但将项目写入目标表的速度会很慢。每个分区每秒最多只能写入1000个项目。所以,我不担心中间S3存储。

但是,数据管道也不是将表复制到另一个表的最有效方法。

如果您需要快速的转移,那么您最好的选择是实施自己的解决方案。根据所需的传输吞吐量配置目标表(但要注意不需要的分区拆分),然后使用多个线程写入并行扫描,这也会写入目标表。

Java中有一个开源实现,您可以将其用作AWS实验室存储库中的起点。

https://github.com/awslabs/dynamodb-cross-region-library


0
投票

您可以使用DynamoDb Streams和Lambda来实现此目的。 http://searchaws.techtarget.com/tip/DynamoDB-Streams-keep-database-tables-in-sync

© www.soinside.com 2019 - 2024. All rights reserved.