AWS CDK 更新现有的 DynamoDB Table

AWS CDK Update an existing DynamoDB Table

当 CDK 项目尝试更新现有的 DynamoDB table 时,它会抛出 CloudFormation 错误“当自定义命名的资源需要替换时无法更新堆栈”。我必须将 talbe 命名为另一个名字,例如从 my-tablemy-table-2 将更改部署到 table。然后将 table 名称改回 my-table 并再部署一次。

有没有办法避免这种情况?

发生这种情况是因为当更新需要替换资源时,CloudFormation 会创建新版本并随后删除旧版本。因为不能存在两个物理名称相同的资源,所以失败。

解决方案是不指定 table 名称,让 CloudFormation 自己生成名称。这样,如果更新需要替换,CloudFormation 将为资源生成一个新名称。

CDK 中明确建议这样做 documentation:

Assigning physical names to resources has some disadvantages in AWS CloudFormation. Most importantly, any changes to deployed resources that require a resource replacement, such as changes to a resource's properties that are immutable after creation, will fail if a resource has a physical name assigned. If you end up in that state, the only solution is to delete the AWS CloudFormation stack, then deploy the AWS CDK app again.

Related CloudFormation docs.