Terraform模板结合jsonencode与循环生成合法JSON文件的问题求解
Terraform模板生成合法JSON的解决方案
最优实现(推荐)
直接使用jsonencode配合for表达式生成完整的键值对对象,完全避免手动拼接JSON语法的问题。
1. 修改enforcetags.tpl模板内容
删除原有手动循环拼接键值对的逻辑,替换为如下写法:
{ "StringEqualsIfExists": ${jsonencode({ for tag_key in key_tag : "aws:RequestTag/${tag_key}" => "*" })} }
2. 原有Terraform配置无需修改
你现有的local_file资源调用templatefile的逻辑保持不变即可,示例如下:
resource "local_file" "enforce_tags" { filename = "${path.module}/enforce_tags.json" content = templatefile("${path.module}/enforcetags.tpl", { key_tag = var.key_tag # 替换为你实际传入的标签键列表变量 }) }
可选实现(手动拼接场景)
如果出于特殊需求必须保留手动拼接的逻辑,可以用join函数处理分隔符:
{ "StringEqualsIfExists": { ${join(",", [ for tag_key in key_tag : jsonencode("aws:RequestTag/${tag_key}") + ": \"*\"" ])} } }
原理解释
jsonencode函数会自动将Terraform的Map类型转换为标准合法的JSON对象,自动处理逗号分隔、特殊字符转义、末尾多余逗号等所有JSON语法要求,无需手动干预,是Terraform中生成JSON内容的首选方案。
内容的提问来源于stack exchange,提问作者Rostyslav Malenko
相关产品推荐
相关产品推荐

