假设我定义了两个堆栈,A和B.
在堆栈A中,我定义了一个VPC和一个子网,并输出该子网的id
t = Template()
Subnet = t.add_resource(Subnet .....)
SubnetId = t.add_output(Output('SubnetId', Value=Ref(Subnet))
在Stack B中,我想让这些实例存在于Stack A中定义的子网中。我该如何实现?
答案 0 :(得分:1)
您需要将它们作为参数传递给堆栈B.一个很好的例子就是stacker,这是我维护的一个开源项目(我也帮助了对流层)。
bastion.py蓝图采用了许多来自vpc.py蓝图的参数(都找到here - 抱歉,我试图发布每个蓝图的链接,但Stackoverflow不会让我发布更多超过2个链接。)堆栈器为您处理从一个堆栈到另一个堆栈的参数传递,这是我编写它的最大原因。
如果您有任何问题,请与我们联系。
答案 1 :(得分:0)
您可以使用troposphere.GetAtt
。这是一个示例,我将VpcId
和PublicSubnetId
从我的VPC堆栈传递到我的Apache Airflow堆栈:
# t is a Template, keyname_param is a Parameter
vpc_stack = t.add_resource(
Stack(
'VpcStack',
TemplateURL=vpc_template_url
)
)
airflow_stack = t.add_resource(
Stack(
'AirflowStack',
TemplateURL=airflow_stack_url,
Parameters={
'KeyName': Ref(keyname_param),
'VpcId': GetAtt(vpc_stack.title, 'Outputs.VpcId'),
'PublicSubnetId': GetAtt(vpc_stack.title, 'Outputs.PublicSubnetId')
}
)
)