在Cloudformation中使用DependsOn和Fn :: ImportValue

mas*_*ker 3 amazon-web-services aws-cloudformation

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

"DependsOn": {"Fn::ImportValue": {
            "Fn::Sub": "${MyStack1}-VPCGatewayAttachment"
        }}
Run Code Online (Sandbox Code Playgroud)

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

Geo*_*ker 6

你不应该像这样使用DependsOn.仅在模板中的资源之间创建依赖关系时才需要它.具体来说,它用于覆盖Cloudformation创建资源的序列.

FN::ImportValue由于导出值必须在堆栈生成之前存在,因此本质上是依赖函数.因此,只需在适当的资源中引用您的导入值即可.


wjo*_*dan 3

为了扩展您的具体情况,如果您认为需要将属性添加DependsOnAWS::EC2::VPCGatewayAttachment由于文档的建议When a DependsOn attribute is required,请注意这些建议仅适用于同一模板中定义的资源:

如果您的 AWS CloudFormation 模板定义了 VPC、网关和网关附件,则需要网关的任何资源都依赖于网关附件。

当网关附件在单独的模板中定义时,您不需要显式声明任何其他依赖项。只要应用程序堆栈在网络堆栈之前被删除,依赖资源就会在 VPC 网关连接之前被删除。

一般来说,正如George M Whitaker 的回答中提到的,在堆栈之间声明 aDependsOn是没有必要的。由于如果另一个堆栈引用其输出之一,则无法删除堆栈,因此使用Fn::ImportValue创建跨堆栈引用会创建一个依赖项,即必须在引用堆栈之前删除包含该引用的堆栈。