在Cloudformation中使用DependsOn和Fn :: ImportValue

时间:2016-12-11 08:17:55

标签: amazon-web-services amazon-cloudformation

是否可以像这样使用带有Fn :: ImportValue的DependsOn?

"DependsOn": {"Fn::ImportValue": {
            "Fn::Sub": "${MyStack1}-VPCGatewayAttachment"
        }}

具体来说,我将VPC和InternetGatewayAttchment放在一个堆栈中。我在Stack2中导入了这个堆栈,我有ELB,我试图使用DependsOn来依赖这个附件

2 个答案:

答案 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创建交叉堆栈引用会创建一个依赖项,在引用堆栈之前必须删除包含该引用的堆栈。