要在 AWS 组织中预置标签策略,我需要content
从变量构建 JSON。标签策略、scp 等的管理应该是集中的,因此可以在任何地方应用更改:重命名、添加、删除标签等。
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
}
}
}
provider "aws" {
profile = "default"
region = "us-west-1"
}
我面临的问题是:我将如何构建 JSON 对象?
示例变量/标签映射:
# tag_policies.tf
variable "resource_tags" {
description = "Central resource tags"
type = list( object( {
name = string
tags = map(string)
} ) )
default = [
{
name = "Environment"
tags = {
prod = "crn::env:prod"
lab = "crn::env:lab"
dev = "crn::env:dev"
}
}
]
}
到目前为止,我尝试过的是使用 HCL 模板标签,但是,
在遍历标签名称映射时,我最终用了一个逗号太多。这适用于join()
标签名称的子映射,但如果我尝试包装模板标记,则不会锻炼。我为什么要尝试这个?因为我的想法用完了。
# vars.tf
resource "aws_organizations_policy" "root-tag-policy" {
name = "RootTagPolicy"
type = "TAG_POLICY"
content = <<CONTENT
{
"tags": {
%{ for tag in var.resource_tags_env ~}
"${tag.name}": {
"tag_key": {
"@@assign": "${tag.name}",
"@@operators_allowed_for_child_policies": [ "@@none" ]
},
"tag_value": { "@@assign": [ "${join( ", ", values( tag.tags ) )}" ] }
},
%{ endfor ~}
}
}
CONTENT
}