为什么 CloudFormation 在添加资源标签时替换资源?

Why CloudFormation replace resource during adding resource tags?

如文档中所述,我认为 CloudFormation 只需更改以添加标签即可不间断地更新。

在我的案例中,另一个团队使用 Terraform 添加具有通用标签的标签资源,而我的团队使用 CloudFormation 来更新特定于应用程序的标签。这会导致更换...? 此外,这仅发生在安全组等有限资源中。

有人知道这个问题吗?

这两个工具中的每一个都会覆盖另一个工具创建的标签。您可以将 Terraform 配置为 ignore certain tags 但是我不确定您是否可以将 CloudFormation 配置为忽略任何标签。我认为 CloudFormation 将始终删除它不管理的标签。通常,同时使用 CloudFormation 和 Terraform 来管理相同的资源效果不佳。

Cloudformation 是一个 Jealous Tool - 换句话说,如果它不能完全控制资源,它将覆盖更改,假设更改位于它认为必须更新的位置。

为了让 CloudFormation 堆栈不做不需要的工作,它们生成了 ChangeSets - 指示需要什么资源 updating/rebuilding/ect。如果您不更改 template(或您的 cdk 堆栈)中的任何内容,则 ChangeSet 不会更新该资源,因为无需更改任何内容。根据资源(并且它因服务而异)有时会在 CloudFormation 控制之外进行更改(通过 Terraform 等其他服务或通过控制台中的手动更改 - 两者都称为 'Drift')不要得到被堆栈更新覆盖(我能想到的最常见的是 API 网关 - 添加/删除资源或方法并不总是通过重新部署堆栈来重新完成。

但是,对于标签之类的东西,是的 - 它会随时覆盖其中所做的任何更改,并在部署时重新应用标签 -(同样,取决于服务)即使没有为该给定资源部署的其他更改。我怀疑这是因为 AWS 在后端使用标签来排序和搜索资源的方式。

你最好的选择是选择一项服务并用它做所有事情。