我在弄清楚如何自动化添加和删除具有副本的表(表版本为2019.11.21)的过程中遇到的问题
场景:我在us-east-1中有一个表,并用us-west-2中的副本对其进行了更新。一段时间后,我想使用带有aws cli的自动化脚本删除这些表。
由于删除表不会删除其副本(为什么?),我需要删除副本,然后删除一次。完成后,删除原始表。
我尝试了
aws dynamodb update-table --table-name some-table --region us-east-1 --cli-input-json \
'{
"ReplicaUpdates":
[
{
"Delete": {
"RegionName": "us-west-2"
}
}
]
}'
但是在那之后,我不确定如何继续。我不能使用“等待”,因为删除副本不会更改表的状态。我也不能只是“等待”副本表不再存在,因为在删除第二张表后,原始表通常仍会停留在更新阶段。
自动删除副本和删除表的明智方法是什么?
答案 0 :(得分:0)
我也尝试自动化相同的过程,但使用的是 Java SDK 而不是 AWS CLI。我收到了这样的错误:
<块引用>您尝试更改的资源正在使用中。 (服务:DynamoDb,状态码:400,请求 ID:E07SSSKFG0VBCEKHEV6JQC419RVV4KQNSO5AEMVJF66Q9ASUAAJG,扩展请求 ID:空)
我设法通过等待主表激活来解决这个问题。
以下是正确删除 DynamoDB 全局表及其所有副本的方法:
update-global-table
方法从全局表中删除该副本。waiter.waitUntilTableExists()
等待主表变为活动状态CURRENT_REGION
中的主表(主表)这是用于此的 Java 代码:
getReplicaRegions().stream().filter(r -> !r.equals(CURRENT_REGION)).forEach(region -> {
getClient().updateGlobalTable(b -> b.globalTableName(table).replicaUpdates(ReplicaUpdate.
builder().delete(d -> d.regionName(region)).build()));
waitForActive(table, CURRENT_REGION);
getClient(region).deleteTable(b -> b.tableName(table));
});
waitForActive(table, CURRENT_REGION);
getClient().deleteTable(b -> b.tableName(table));