如果我有两个cloudformation堆栈,如何从另一个堆栈引用一个堆栈中的资源?
在下面的示例中,我有一个堆栈,它创建一个EBS卷,并希望通过我的EC2实例的第二个堆栈中的Ref:键引用它,但我不断收到回滚,因为它无法从中看到该资源第一叠:
“模板格式错误:未解决的资源依赖性”
我已经尝试过DependsOn子句,但它没有用。我需要通过参数传递信息吗?
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"CubesNetworking": {
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://s3.amazonaws.com/mybucket/cf_network.json"
}
},
"CubesInstances": {
"DependsOn": ["CubesNetworking"],
"Type": "AWS::CloudFormation::Stack",
"Properties": {
"TemplateURL": "https://s3.amazonaws.com/mybucket/cf_instances.json"
}
}
}
}
答案 0 :(得分:6)
在每个嵌套堆栈中,您应该有一个输出部分。然后,您可以使用以下语法在调用堆栈(上面列出的那个)中获取这些值:
{ "Fn::GetAtt" : [ "CubesNetworking", "Outputs.VolumeID" ] }
然后通过参数:
将值传递到其他嵌套堆栈中 "Parameters" : {
"VolumeId" : { "Fn::GetAtt" : [ "CubesNetworking", "Outputs.VolumeID" ] }
您仍然需要DependsOn,因为您需要在实例之前创建的卷。
编辑,2017年中:
CloudFormation引入了从一个堆栈导出值的功能,并在不必嵌套的其他堆栈中引用它们。
因此您的输出可以指定导出:
Outputs:
Desc:
Value: !Ref CubesNetworking.VolumeID
Export:
Name: some-unique-name
然后在另一个堆栈中:
Fn::ImportValue: some-unique-name