【发布时间】:2015-02-21 05:05:30
【问题描述】:
我可以使用AWS::CloudFormation::Stack 轻松地将参数传递给嵌套 Cloudformation 堆栈,包括引用值:
"MyNestedStack" : {
"Type" : "AWS::CloudFormation::Stack",
"Condition" : "MyCondition",
"Properties" : {
"TemplateURL" : {
"Fn::Join" : ["", ["https://mybucket.s3.amazonaws.com/", {
"Ref" : "S3BucketLocation"
}, "/MyNestedStack.template"]]
},
"Parameters": {
"MyVPC" : {
"Ref" : "VPC"
},
"MySubnet" : {
"Ref" : "ManagementSubnet"
},
"MySubnetAZ" : {
"Fn::GetAtt" : [ "ManagementSubnet", "AvailabilityZone" ]
}
"InstanceType" : "m3.large",
"KeyName" : "MyKey",
}
}
}
但我找不到任何文档如何将应用于父堆栈的堆栈标记传递到子(嵌套)堆栈。
原始堆栈的调用者:
#Create Stack
aws cloudformation create-stack --parameters ${parms} --tags Key='Environment Name',Value=${name} Key=Name,Value=${env} --stack-name ${env} --template-url ${url}
Environment name 和 Name 标记应用于原始堆栈中的资源,例如实例,但不适用于嵌套堆栈中的资源或嵌套堆栈本身。
【问题讨论】:
-
AWS 支持确认堆栈标签不会自动传播:您是绝对正确的,堆栈级标签不会从顶级堆栈传播到其嵌套堆栈。我们确实对此功能提出了功能要求,我肯定已经代表您添加了 +1。但是,与其他功能请求一样,我们无法确定何时启动此功能。
-
如果其他人想要这个选项亚马逊已经提到通过支持案例提出请求的人越多(对该功能的 +1);此功能可能越快获得实施。
-
同时,一种解决方法是运行一个创建后操作(在此示例中使用 PowerShell),该操作可以采用嵌套堆栈名称,并检索该堆栈的所有 AWS 资源。然后,您可以在结果中添加任何您需要的标签:
$a = Get-EC2Tag -Filter @{Name="tag:aws:cloudformation:stack-name"; Value="MyStack-ChildStack-ZNJZH7EML46V"}; New-EC2Tag -Resources $a.ResourceId -Tags @(@{Key='Project'; Value='My Project'}, @{Key='Owner'; Value='Me'})
标签: json amazon-web-services tags nested amazon-cloudformation