DynamoDB本地到DynamoDB AWS

时间:2016-12-14 21:44:04

标签: migration amazon-dynamodb dynamo-local

我使用DynamoDB Local构建了一个应用程序,现在我正处于我想在AWS上设置的地步。我已经完成了很多工具,但没有成功找到一种方法来获取我的本地数据库并设置模式并将数据迁移到AWS。

例如,我可以将数据转换为CSV格式,但AWS无法识别。似乎我不得不创建一个数据管道......有没有人有更好的方法来做到这一点?

提前致谢

3 个答案:

答案 0 :(得分:1)

如前所述,DynamoDB local用于测试目的。但是,如果需要,您仍可以迁移数据。一种方法是将数据保存为某种格式,如json或csv,并将其存储到S3中,然后使用lambdas或您自己的服务器等内容从S3读取并保存到新的DynamoDB中。至于设置架构,您可以使用与创建本地表相同的代码通过AWS SDK创建远程表。

答案 1 :(得分:1)

您可以创建一个独立的应用程序来从本地dynamoDB获取表列表,然后在您的AWS账户中创建它们,之后您可以获取每个表的所有数据并保存它们。

我不确定您熟悉哪种语言,但会解释一些API可能会帮助您使用Java。

DynamoDB.listTables();
DynamoDB.createTable(CreateTableRequest);

有关如何使用上述API创建表的示例

ProvisionedThroughput provisionedThroughput = new ProvisionedThroughput(1L, 1L);
    try{
            CreateTableRequest groupTableRequest = mapper.generateCreateTableRequest(Group.class); //1
            groupTableRequest.setProvisionedThroughput(provisionedThroughput); //2
//        groupTableRequest.getGlobalSecondaryIndexes().forEach(index -> index.setProvisionedThroughput(provisionedThroughput)); //3
            Table groupTable = client.createTable(groupTableRequest); //4
            groupTable.waitForActive();//5
        }catch(ResourceInUseException e){
            log.debug("Group table already exist");
        }

1-您将根据映射创建TableRequest 2-设置供应吞吐量,这将根据您的要求而有所不同 3-如果表具有全局二级索引,则可以使用此行(可选) 4-将在此处创建实际表格 5-线程将停止直到表变为活动状态

我没有提到与数据访问相关的API(插入...等),我认为你已熟悉,因为你已经在本地dynamodb中使用它们

答案 2 :(得分:0)

我做了一些工作来设置本地开发环境。我使用SAM在AWS中创建dynamodb表。我不想做两次工作,所以最终将架构从AWS复制到本地实例。相同的方法可以反过来起作用。

aws dynamodb describe-table --table-name chess_lobby \
| jq '.Table' \
| jq 'del(.TableArn)' \
| jq 'del(.TableSizeBytes)' \
| jq 'del(.TableStatus)' \
| jq 'del(.TableId)' \
| jq 'del(.ItemCount)' \
| jq 'del(.CreationDateTime)' \
| jq 'del(.GlobalSecondaryIndexes[].IndexSizeBytes)' \
| jq 'del(.ProvisionedThroughput.NumberOfDecreasesToday)' \
| jq 'del(.GlobalSecondaryIndexes[].IndexStatus)' \
| jq 'del(.GlobalSecondaryIndexes[].IndexArn)' \
| jq 'del(.GlobalSecondaryIndexes[].ItemCount)' \
| jq 'del(.GlobalSecondaryIndexes[].ProvisionedThroughput.NumberOfDecreasesToday)' > chess_lobby.json


aws dynamodb create-table \
--cli-input-json file://chess_lobby.json \
--endpoint-url http://localhost:8000

top命令使用describe table aws cli功能来获取模式json。然后,我使用jq删除所有不需要的键,因为create-table对其参数验证非常严格。然后,我可以使用--endpoint-url命令使用create-table在本地环境中创建表。
您可以在top命令上使用--endpoint-url参数来获取本地架构,然后使用不带--endpoint-url参数的create-table在AWS中直接创建它。