正如文档中所描述的,我认为CloudFormation只需要添加一个标签就可以不间断地进行更新。
在我的例子中,另一个团队使用terraform添加带有通用标记的标记资源,而我的团队使用CloudFormation更新特定于应用程序的标记。这会导致更换吗?此外,这只发生在有限的资源(如安全组)上。
有人知道这个问题吗?
Cloudformation是一个嫉妒工具——换句话说,如果它不能完全控制资源,它将覆盖更改,假设更改位于它认为必须更新的位置。
为了让CloudFormation栈不做不需要的工作,它们会生成变更集——指示哪些资源需要更新/重建等。如果你没有改变模板(或者你的cdk堆栈)中的任何东西,那么ChangeSet将不会更新资源,因为没有什么需要改变的。根据资源的不同,有时在CloudFormation控制之外所做的更改(通过Terraform等其他服务或通过控制台中的手动更改-这两种都被称为"漂移")不会被堆栈更新覆盖(我能想到的最常见的是API网关-添加/删除资源或方法并不总是通过重新部署堆栈来重新完成)。
然而,对于像标签这样的东西,是的——它会在任何时候覆盖在那里所做的任何更改,并在它部署的那一刻重新应用标签——(同样,取决于服务),即使没有其他更改要为给定的资源部署。我怀疑这是因为AWS在后端使用标签对资源进行排序和搜索的方式。
你最好选择一个服务,用它做所有的事情。
这两个工具中的每一个都会覆盖另一个创建的标记。您可以配置Terraform来忽略某些标签,但是我不确定您可以配置CloudFormation来忽略任何标签。我认为CloudFormation总是会删除它无法管理的标签。一般来说,使用CloudFormation和Terraform来管理相同的资源是行不通的。