AWS云形成模板 - 为模板中的堆栈提供标签

use*_*913 20 amazon-web-services aws-cloudformation

我们希望将公司特定标签用于我们在AWS中创建的用于计费目的的资源.我正在使用云形成模板来启动我们的Elasticbeanstalk实例和其他依赖于项目的资源.当我使用CloudFormation控制台创建堆栈时,它会在参数后面询问页面中的标签.我必须手动输入该堆栈的标签.但是有没有办法在云形成模板本身中指定那些标签(堆栈的标签)?这样Tag就会传播到其他资源?我知道云形成会自动使用堆栈名称标记资源.但我们需要公司特定的标签来向不同的部门收费.

lal*_*yos 31

在模板解剖中,您无法直接设置堆栈级别标记.但是,您可以使用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"
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 可以在不设置 templateUrl 的情况下使用吗?我不想创建嵌套堆栈 (3认同)

Joh*_*ein 20

启动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"
            }
       ]
    }
}
Run Code Online (Sandbox Code Playgroud)

  • CloudFormation中的标签传播在我的体验中有点不可预测.由于文档声称"所有堆栈级标记(包括自动创建的标记)都传播到AWS CloudFormation支持的资源,因此令人失望." (6认同)

Chu*_*eto 13

与 @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 
Run Code Online (Sandbox Code Playgroud)

...并且通常根据需要添加任意数量的标签,使用相同的格式并在标签键值对之间留有空格

请参阅: https ://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-add-tags.html