Terraform中使用for_each合并变量时遇模板插值错误
解决Terraform列表变量无法参与字符串模板插值的问题
错误原因
问题核心在于each.value["host_header"]是**list(string)**类型,但字符串模板插值要求输入单个字符串,直接将列表代入会触发类型不匹配错误。
解决方案
根据你的实际使用场景,提供两种可行处理方式:
场景1:host_header始终仅含一个元素(如你的tfvars配置["utility"])
直接通过索引提取列表的第一个元素,拼接完成后再包裹为列表(适配子模块aws_lb_listener_rule的列表类型参数要求):
listener_rule_host_header = ["${each.value["host_header"][0]}.${var.environment}.${var.domain}"]
场景2:未来host_header可能包含多个元素
使用for表达式遍历列表,为每个前缀自动拼接环境标识和域名后缀,批量生成完整主机头列表:
listener_rule_host_header = [ "${h}.${var.environment}.${var.domain}" for h in each.value["host_header"] ]
效果验证
假设变量取值为:
host_header = ["utility"]environment = "dev"domain = "example.com"
两种方案都会生成符合需求的主机头列表:["utility.dev.example.com"],既满足通过environment统一管理环境标识的需求,也能被子模块的aws_lb_listener_rule正确识别。
内容的提问来源于stack exchange,提问作者rufus49
相关产品推荐
相关产品推荐

