为什么 CloudFormation 中的 Retain DeletionPolicy 不保留已更改的 DynamoDB table?

Why doesn't a Retain DeletionPolicy in CloudFormation preserve a changed DynamoDB table?

我正在使用 CloudFormation 构建一个 AWS::DynamoDB::Table 资源,并且我的 DeletionPolicy 设置为 Retain。假设我对该逻辑资源的 AttributeDefinitions 属性进行了更改,例如重命名哈希键,然后执行 CloudFormation update_stack;这样的更改需要 'replacement' 资源。到目前为止,一切都很好;我希望现有的 DynamoDB table 是 'deleted' 并且使用更改的键定义在其位置创建一个新的。

但是,令我惊讶的是原来的 table 不是 'left behind' 因为 DeletionPolicy。当然,可以通过堆栈策略完全阻止更新,但我希望 DeletionPolicy 会导致现已失效的 table 从 CloudFormation 堆栈中弹出,并在其位置出现一个新的堆栈,但实际上并没有删除。

这是预期的行为吗?

是的,这是预期的行为。

DeletionPolicy 仅在您实际删除 整个 CloudFormation 堆栈时应用。

来源:DeletionPolicy @ docs.aws.amazon.com

如果您想在 更新 期间保留以前的 DynamoDB 表,您需要事先手动备份它。您可以使用 AWS Data Pipeline 在 Amazon S3 上备份您的 DynamoDB 表。

使用 AWS 属性 "UpdateReplacePolicy: Retain".