AWS 云形成模板 - 为模板中的堆栈提供标签
Posted
技术标签:
【中文标题】AWS 云形成模板 - 为模板中的堆栈提供标签【英文标题】:AWS cloud formation Template- providing Tags for the stack in the template 【发布时间】:2015-02-15 06:24:07 【问题描述】:我们希望将公司特定标签用于我们在 AWS 中创建的资源以进行计费。我正在使用云形成模板来启动我们的 Elasticbeanstalk 实例和其他项目相关资源。当我使用 CloudFormation 控制台创建堆栈时,它会在参数之后要求我在页面中输入标签。我必须手动输入该堆栈的标签。但是,有没有办法在云形成模板本身中指定这些标签(堆栈的标签)?这样标签就会传播到其他资源?我知道云形成会自动用堆栈名称标记资源。但是我们需要公司特定的标签来为不同的部门开具账单。
【问题讨论】:
功能请求:github.com/aws-cloudformation/… 【参考方案1】:在模板剖析中,不能直接设置栈级标签。但是,您可以创建一个包装模板,具有AWS::CloudFormation::Stack
的单一资源。
您可以在该资源上定义堆栈级标签:
"AWSTemplateFormatVersion": "2010-09-09",
"Description": "WrapperTemplate",
"Resources":
"WrappedStackWithStackLevelTags":
"Type" : "AWS::CloudFormation::Stack",
"Properties" :
"Tags" : [ "Key" : "Stage", "Value" : "QA" ],
"TemplateURL" : "your-original-template-s3-url"
【讨论】:
我什至不知道这是一个选项...这对标签继承非常有用。 这是您在模板中为整个堆栈设置 SNS 主题的方式吗? 男人非常有用!应更新标题以包含“云形成堆栈级别标签” 太棒了!但是你从哪里得到这种用法的知识呢?官方文档说“TemplateURL”属性是必需的...docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/… 这个可以不用设置templateUrl吗?我不想创建嵌套堆栈【参考方案2】:在启动 AWS CloudFormation 时,所请求的标签将应用于 CloudFormation 堆栈本身,并且(在可能的情况下)还将传播到堆栈启动的资源。
这些标签可以传递给 CreateStack API 调用,或从 CLI:
见:create-stack CLI documentation这些标签应用于整个堆栈,不包含在 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"
]
【讨论】:
谢谢约翰。 (在可能的情况下)是我需要的提示。 cloudformation 不支持标记弹性 Beanstalk 环境,但是您可以手动标记它。我假设它是否支持通过控制台进行标记,它应该能够通过云形成来完成,我错了。 根据我的经验,CloudFormation 中的标签传播有点不可预测。令人失望的是,文档声称“所有堆栈级标签,包括自动创建的标签,都会传播到 AWS CloudFormation 支持的资源。”【参考方案3】:与@lalyos 所说的相反,您不需要为此使用嵌套堆栈,只需提供应该应用于所有资源的标签作为堆栈级标签。
可以指定这些堆栈级标签是在控制台上还是通过 CLI 运行堆栈。
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
【讨论】:
我使用aws cloudformation deploy
,效果很好!唯一的区别是标签以--tags Key1=Value1 Key2=Value2
的格式指定。见here【参考方案4】:
你不需要任何包装器.. 您可以在创建/更新堆栈时向堆栈添加标签:
在控制台中:
您也可以使用 aws cli:
aws cloudformation create-stack help
--tags (list)
Key-value pairs to associate with this stack. CloudFormation also
propagates these tags to supported resources in the stack. You can
specify a maximum number of 50 tags.
If you don't specify this parameter, CloudFormation doesn't modify
the stack's tags. If you specify an empty value, CloudFormation re-
moves all associated tags.
(structure)
The Tag type enables you to specify a key-value pair that can be
used to store information about an CloudFormation stack.
Key -> (string)
Required . A string used to identify this tag. You can spec-
ify a maximum of 128 characters for a tag key. Tags owned by
Amazon Web Services (Amazon Web Services) have the reserved
prefix: aws: .
Value -> (string)
Required . A string containing the value for this tag. You
can specify a maximum of 256 characters for a tag value.
Shorthand Syntax:
Key=string,Value=string ...
JSON Syntax:
[
"Key": "string",
"Value": "string"
...
]
【讨论】:
以上是关于AWS 云形成模板 - 为模板中的堆栈提供标签的主要内容,如果未能解决你的问题,请参考以下文章
使用 cloudformation 模板的 AWS Lambda 的动态环境变量
AWS 云形成;将模板分解为多个文件并使用 cfn-include 传入变量