我们希望将公司特定的标签用于我们在AWS中创建的用于计费目的的资源。我正在使用云形成模板来启动我们的Elasticbeanstalk实例和其他依赖于项目的资源。当我使用CloudFormation控制台创建堆栈时,它会在参数后面询问页面中的标签。我必须手动输入该堆栈的标签。但是有没有办法在云形成模板本身中指定那些标签(堆栈的标签)?这样Tag就会传播到其他资源?我知道云形成会自动使用堆栈名称标记资源。但我们需要公司特定的标签来向不同的部门收费。
答案 0 :(得分:27)
在模板解剖中,您无法直接设置堆栈级别标记。但是,您可以创建一个包装器模板,其中包含 AWS :: CloudFormation :: Stack 的单个资源。
您可以在该资源上定义堆栈级别标记:
done
答案 1 :(得分:16)
启动AWS CloudFormation时,所请求的标签将应用于CloudFormation Stack本身,并且(如果可能)也将传播到Stack启动的资源。
可以将这些标记传递给CreateStack API调用,也可以从CLI传递:
这些标记应用于整个堆栈,不包含在CloudFormation模板中。
但是,CloudFormation模板可以包含正在创建的特定资源的标记。例如,在启动Amazon EC2实例时,标记可以包含在模板中:
"MyInstance" : {
"Type" : "AWS::EC2::Instance",
"Properties" : {
"SecurityGroups" : [ { "Ref" : "MySecurityGroup" } ],
"AvailabilityZone" : "us-east-1a",
"ImageId" : "ami-20b65349",
"Volumes" : [
{ "VolumeId" : { "Ref" : "MyEBS" },
"Device" : "/dev/sdk" }
],
"Tags" : [
{
"Key" : "Stage",
"Value" : "QA"
}
]
}
}
答案 2 :(得分:4)
与@lalyos 所说的相反,您不需要为此使用嵌套堆栈,只需提供应应用于所有资源的标签作为堆栈级标签。
无论是在控制台上还是通过 CLI 运行堆栈,都可以指定这些堆栈级标记。
命令行示例:
aws cloudformation create-stack --stack-name my-stack-name \
--template-body file://path-to-template-file.yaml \
--parameters ParameterKey=param1key,ParameterValue=param1value \
--tags Key=tag1key,Value=tag1value \
Key=tag2key,Value=tag2value \
Key=tag3key,Value=tag3value
...并且通常根据需要添加尽可能多的标签,使用相同的格式并允许标签键值对之间有空格
见: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html