1

假设我定义了两个堆栈,A 和 B。

在堆栈 A 中,我定义了一个 VPC 和一个子网,并输出了该子网的 ID

t = Template()
Subnet = t.add_resource(Subnet .....)
SubnetId = t.add_output(Output('SubnetId', Value=Ref(Subnet))

在堆栈 B 中,我希望将这些实例置于堆栈 A 中定义的子网中。我该如何实现呢?

4

2 回答 2

1

您需要将它们作为参数传递给堆栈 B。一个不错的例子是stacker,这是我维护的一个开源项目(我也帮助 w/ troposphere)。

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

如果您有任何问题,请告诉我。

于 2015-07-17T17:12:34.683 回答
1

您可以使用troposphere.GetAtt. 这是我从 VPC 堆栈传递到 Apache Airflow 堆栈VpcId的示例:PublicSubnetId

# 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')
        }
    )
)
于 2018-06-06T23:35:43.097 回答