You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Terraform模板遍历键值对及template_file传map报错解决方案

问题根因

报错核心原因是template_file属于已废弃的旧版数据源,归属独立的hashicorp/template provider,该数据源要求传入vars的所有值必须为字符串类型,不支持map、list这类复杂结构,因此传入原生map时会触发类型不匹配错误;若直接传入字符串,模板内的for循环需要遍历可迭代集合,字符串无法满足遍历要求,就会触发第二个报错。

解决方案

直接替换为Terraform内置的templatefile函数即可。该函数从Terraform 0.12版本开始内置支持,原生兼容map、list等任意复杂类型变量,和官方示例用法完全匹配,无需额外安装第三方provider。

修改后的Terraform配置代码:

terraform {
  required_version = "~> 1.2"

  backend "local" {
    path = "./terraform.tfstate"
  }
}

# 无需定义template_file数据源,直接调用内置函数渲染模板
output "rendered" {
  value = templatefile("${path.module}/example.yml.tftpl", {
    map_of_params = {
      "aaa_env" = "aaa_key"
      "bbb_env" = "bbb_key"
    }
  })
}

原有模板文件example.yml.tftpl不需要做任何调整,保留原有遍历逻辑即可正常渲染:

secrets:
  %{ for env, key in map_of_params }
  - name: "${env}"
    valueFrom: "${key}"
  %{ endfor ~}
其他说明
  • 旧版template_file数据源官方已停止维护,所有新编写的配置都应优先使用内置templatefile函数,二者模板语法完全一致,迁移无额外成本。
  • 若因特殊历史原因必须使用template_file数据源(不推荐),只能提前将map序列化为JSON字符串传入,再在模板内通过JSON解码函数转回map结构后遍历,该写法冗余且易出现格式兼容问题,无特殊约束不要采用。

内容的提问来源于stack exchange,提问作者rzlvmp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:51:18