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

Akh*_*l N 16 copy amazon-dynamodb

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

Ada*_*zyk 28

如果你不介意使用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
        )
Run Code Online (Sandbox Code Playgroud)

  • 奇迹般有效。请注意,这个脚本需要目标表已经存在。 (2认同)
  • @GorkemHalulu 我同意,从上下文来看,我理解这是一次性的,而不是实际的应用程序。我很确定没有一个理智的人会将他们的秘密密钥提交给公共存储库。我会使用机器角色重写这个,但到目前为止我的答案还没有被接受,所以我不在乎;) (2认同)
  • 我重新设计了它以承担角色并在环境变量中包含参数,并将其粘贴在这个存储库中(如果有人可以从中受益):https://gitlab.com/archetypalsxe/dynamodb-importer (2认同)

Ezz*_*zat 14

试试这个nodejs 模块

npm i copy-dynamodb-table
Run Code Online (Sandbox Code Playgroud)


RNA*_*RNA 7

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

https://github.com/bchew/dynamodump

可以执行以下操作:

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