Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.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
Python 对流层,将一个堆栈的输出作为输入传递给另一个堆栈_Python_Troposphere - Fatal编程技术网

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

Python 对流层,将一个堆栈的输出作为输入传递给另一个堆栈,python,troposphere,Python,Troposphere,假设我定义了两个堆栈,A和B 在堆栈A中,我定义了一个VPC和一个子网,并输出该子网的id t = Template() Subnet = t.add_resource(Subnet .....) SubnetId = t.add_output(Output('SubnetId', Value=Ref(Subnet)) 在堆栈B中,我想在堆栈A中定义的子网中包含这些实例。如何实现这一点?您需要将它们作为参数传递到堆栈B中。我维护的一个开源项目就是一个很好的例子(我还帮助w/tropospher

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

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

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

在堆栈B中,我想在堆栈A中定义的子网中包含这些实例。如何实现这一点?

您需要将它们作为参数传递到堆栈B中。我维护的一个开源项目就是一个很好的例子(我还帮助w/troposphere)

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


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

您可以使用
troposphere.GetAtt
。下面是一个示例,其中我将
VpcId
PublicSubnetId
从我的VPC堆栈传递到我的Apache堆栈:

# 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')
        }
    )
)

很酷的图书馆,但我不想使用其他图书馆。你能提供一个简单的例子吗?我看到vpc.py有输出“VpcId”,bastion.py在其参数中有输出“VpcId”,但我不清楚它是如何传递的。这是stacker提供的魔法的一部分。如果您只想使用对流层,那么您需要找到一种方法,在CloudFormation中执行您想要的操作,或者编写代码(如stacker),从一个堆栈获取输出,并将其添加到另一个堆栈的参数中。记住:troposphere只是Cloudformation模板语言的python实现。另一个选择是使用子堆栈,尽管我不是它的超级粉丝。然后,您可以在定义它们的主堆栈中的另一个子堆栈的参数中引用()一个子堆栈的输出。不过这很棘手。基本上,Cloudformation不提供任何方法来引用参数中的不同堆栈,除非您使用的是子堆栈-所以对流层是相同的。@mingxiao,您能给出子堆栈参数的示例作为答案吗?