对流层,将堆栈的输出作为输入传递给另一个

时间:2015-07-17 00:31:35

标签: python troposphere

假设我定义了两个堆栈,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中定义的子网中。我该如何实现?

2 个答案:

答案 0 :(得分:1)

您需要将它们作为参数传递给堆栈B.一个很好的例子就是stacker,这是我维护的一个开源项目(我也帮助了对流层)。

bastion.py蓝图采用了许多来自vpc.py蓝图的参数(都找到here - 抱歉,我试图发布每个蓝图的链接,但Stackoverflow不会让我发布更多超过2个链接。)堆栈器为您处理从一个堆栈到另一个堆栈的参数传递,这是我编写它的最大原因。

如果您有任何问题,请与我们联系。

答案 1 :(得分:0)

您可以使用troposphere.GetAtt。这是一个示例,我将VpcIdPublicSubnetId从我的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')
        }
    )
)