我已经使用 DynamoDB Local 构建了一个应用程序,现在我想要在 AWS 上进行设置。我已经使用了许多工具,但没有成功找到一种方法来获取我的本地数据库并设置架构并将数据迁移到 AWS。
例如,我可以将数据转换为 CSV 格式,但 AWS 无法识别。看来我被迫创建一个数据管道......有没有人有更好的方法来做到这一点?
提前致谢
我已经使用 DynamoDB Local 构建了一个应用程序,现在我想要在 AWS 上进行设置。我已经使用了许多工具,但没有成功找到一种方法来获取我的本地数据库并设置架构并将数据迁移到 AWS。
例如,我可以将数据转换为 CSV 格式,但 AWS 无法识别。看来我被迫创建一个数据管道......有没有人有更好的方法来做到这一点?
提前致谢
您可以创建一个独立的应用程序以从本地 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 中使用了它们
如前所述,DynamoDB local 用于测试目的。但是,如果需要,您仍然可以迁移数据。一种方法是将数据保存为某种格式,如 json 或 csv 并将其存储到 S3 中,然后使用 lambdas 或您自己的服务器之类的东西从 S3 中读取并保存到您的新 DynamoDB 中。至于设置架构,您可以使用与创建本地表相同的代码通过 AWS 开发工具包创建远程表。
我做了一些工作来设置我的本地开发环境。我使用 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 命令使用描述表 aws cli 功能来获取模式 json。然后我使用 jq 删除所有不需要的键,因为 create-table 对其参数验证非常严格。然后我可以使用 create-table 通过 --endpoint-url 命令在本地环境中创建表。
您可以使用 top 命令上的 --endpoint-url 参数来获取本地架构,然后使用不带 --endpoint-url 参数的 create-table 直接在 AWS 中创建它。