Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 从其他模板导入VPCGatewayAttachment_Amazon Web Services_Amazon Cloudformation_Elastic Ip - Fatal编程技术网

Amazon web services 从其他模板导入VPCGatewayAttachment

Amazon web services 从其他模板导入VPCGatewayAttachment,amazon-web-services,amazon-cloudformation,elastic-ip,Amazon Web Services,Amazon Cloudformation,Elastic Ip,我有一个包含InternetGateway的网络堆栈,它通过VPCGatewayAttachment元素连接到VPC 我有一个应用程序堆栈,其中我有一个EIP,它应该取决于VPCGatewayAttachment,目前看起来如下: "MyEIP": { "Type": "AWS::EC2::EIP", "DependsOn": [ { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackName}-GatewayAttachment" }

我有一个包含InternetGateway的网络堆栈,它通过VPCGatewayAttachment元素连接到VPC

我有一个应用程序堆栈,其中我有一个EIP,它应该取决于VPCGatewayAttachment,目前看起来如下:

"MyEIP": {
  "Type": "AWS::EC2::EIP",
  "DependsOn": [
    { "Fn::ImportValue" : {"Fn::Sub": "${NetworkStackName}-GatewayAttachment" } }
  ],
}

然而,我得到一个模板错误,它说每个DependsOn值必须是一个字符串。那么如何导入该值呢?

您的导入语句周围有括号。这意味着该对象将是数组而不是字符串。删除这些括号,您将克服此错误

"MyEIP": {
  "Type": "AWS::EC2::EIP",
  "DependsOn": { "Fn::ImportValue": { "Fn::Sub": "${NetworkStackName}-GatewayAttachment" } }
}

正如文档所说,您已经阅读过的,DependsOn属性接受字符串或字符串列表

这是字面上的意思,也就是说,您不需要使用CloudFormation Fn或Ref函数在那里插入一些值,而只需插入CloudFormation资源的名称,就像您在模板中所做的那样

因此,您的模板应该如下所示:

"MyEIP": {
  "Type": "AWS::EC2::EIP",
  "DependsOn": [
    "MyGatewayAttachment"
  ],
}
,其中MyGatewayAttachment是模板中相应的CloudFormation资源的名称

如果您再看一看官方文档中的,您会发现在所有示例中都是这样做的。

您不需要在应用程序堆栈中的资源上使用属性,因为资源是在单独的网络堆栈中创建的。这在EIP资源的属性中有所说明:

如果定义弹性IP地址并将其与同一模板中定义的VPC关联,则必须使用此资源上的DependsOn属性声明对VPC网关附件的依赖关系

当VPC在单独的模板中定义时,不需要显式声明任何依赖项。只要在网络堆栈之前删除应用程序堆栈,EIP将在VPC网关连接之前删除


更一般地说,在堆栈之间声明DependsOn是不必要的。由于如果另一个堆栈引用其输出之一,则无法删除堆栈,因此使用Fn::ImportValue创建跨堆栈引用会创建一个依赖项,即包含引用的堆栈必须在引用堆栈之前删除。

取决于接受字符串和字符串列表,因此,这不是您在尝试从中导入的堆栈中导出它的问题吗?这可能不是必需的,但这不起作用的原因是DependsOn需要一个字符串,而不是一些函数;是的,问题已经确认每个DependsOn值都必须是字符串。问题是如何导入此值?我的回答是:你不需要,也没有必要,原因如下。