我的堆栈级标签不会传播到我的 AWS CloudFormation 堆栈中的资源。
堆栈级标签向资源的传播可能因资源而异。CloudFormation 仅为具有 Tags 属性的资源传播堆栈级标签。有关 AWS 资源及其属性类型的列表,请参阅 AWS 资源和属性类型参考。
如果您的资源支持 Tags 属性,则您的 CloudFormation 堆栈具有带有 aws: 前缀的堆栈级标签。
例如,Amazon Simple Storage Service (Amazon S3) AWS::S3::Bucket 资源支持 Tags 属性。使用 AWS::S3::Bucket 资源创建堆栈,然后指定堆栈级标签。创建堆栈后,S3 存储桶资源具有传播的堆栈级标签。
如果您的资源不支持 Tags 属性,则您的 CloudFormation 堆栈没有堆栈级标签。
例如,PutRule API 允许您指定标签,但 Amazon EventBridge AWS::Events::Rule 资源不支持 Tags 属性。使用 AWS::Events::Rule 资源创建堆栈,然后指定堆栈级标签。创建堆栈后,事件规则资源没有传播的堆栈级标签。
但是,如果资源 API 支持在创建资源后添加标签,则可以使用 CloudFormation 自定义资源来应用标签。要实现此解决方案,请先创建 AWS Lambda 函数。然后,使用 AWS SDK 编写将标签应用于您的资源的自定义代码。使用 cfn-response 模块允许 Lambda 函数作为 Lambda 支持的自定义资源。最后,在 CloudFormation 模板中,使用 DependsOn 属性确保在堆栈创建自定义资源之前创建初始资源。
例如,在 CloudFormation 创建 AWS::Events::Rule 资源后,模板中定义的自定义资源会创建并调用 Lambda 支持的自定义资源。Lambda 函数使用 TagResource API 将自定义标签应用于现有资源。然后,Lambda 函数向 CloudFormation 堆栈发出成功信号。
如果无法为支持 Tags 属性的资源传播堆栈级标签,请检查这是否是已知问题。有关已知问题列表,请参阅 GitHub 网站上的 cloudformation-coverage-roadmap。如果此问题未作为已知问题提交,则要创建问题,请选择 New issue(新建问题)。