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

时间:2014-12-16 20:16:51

标签: amazon-web-services amazon-cloudformation

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

3 个答案:

答案 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