AWS CDK 更新现有的 DynamoDB Table
AWS CDK Update an existing DynamoDB Table
当 CDK 项目尝试更新现有的 DynamoDB table 时,它会抛出 CloudFormation 错误“当自定义命名的资源需要替换时无法更新堆栈”。我必须将 talbe 命名为另一个名字,例如从 my-table
到 my-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.
当 CDK 项目尝试更新现有的 DynamoDB table 时,它会抛出 CloudFormation 错误“当自定义命名的资源需要替换时无法更新堆栈”。我必须将 talbe 命名为另一个名字,例如从 my-table
到 my-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.