是否可以像这样使用带有Fn :: ImportValue的DependsOn?
"DependsOn": {"Fn::ImportValue": {
"Fn::Sub": "${MyStack1}-VPCGatewayAttachment"
}}
具体来说,我将VPC和InternetGatewayAttchment放在一个堆栈中。我在Stack2中导入了这个堆栈,我有ELB,我试图使用DependsOn来依赖这个附件
答案 0 :(得分:5)
您不应该像这样使用DependsOn。仅在模板中的资源之间创建依赖关系时才需要它。具体来说,它用于覆盖Cloudformation创建资源的序列。
FN::ImportValue
本质上是一个依赖函数,因为导出值必须在堆栈生成之前存在。因此,只需在适当的资源中引用您的导入值即可。
答案 1 :(得分:2)
要扩展您的具体案例,如果您认为由于文档建议DependsOn
而需要将AWS::EC2::VPCGatewayAttachment
属性添加到When a DependsOn attribute is required,请注意这些建议仅适用对于在同一模板中定义的资源:
如果您的AWS CloudFormation模板定义了VPC,网关和网关附件,则需要网关的所有资源都依赖于网关附件。
在单独的模板中定义网关附件时,您无需显式声明任何其他依赖项。只要应用程序堆栈在网络堆栈之前被删除,依赖资源就会在VPC网关附件之前被删除。
通常,如George M Whitaker's answer中所述,在堆栈之间声明DependsOn
是不必要的。由于如果另一个堆栈引用其输出之一,则无法删除堆栈,使用Fn::ImportValue
创建交叉堆栈引用会创建一个依赖项,在引用堆栈之前必须删除包含该引用的堆栈。