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

如何在Terraform中将Map转换为变量(无需写入文件)

解决方案:用Terraform变量展开批量传递Map参数

你想要的批量传递Map键值对给模块的需求,Terraform原生支持,无需使用for_each(for_each用于创建多个模块实例,而非传递单个实例的参数),直接用变量展开语法(...)即可实现。

正确写法示例

locals {
  resource_settings = yamldecode(file("resource1.yaml"))["resource1"]["settings"]
}

module "myresource1" {
  source = "./modules/myresource"

  # 用...展开Map,自动将每个键值对映射为模块的输入变量
  ...local.resource_settings
}

关键说明

  • 变量匹配要求:local.resource_settings中的键名必须和modules/myresource里定义的变量名完全一致(比如setting1、setting2),Terraform会自动对应赋值。
  • 默认值兼容:模块中带默认值的变量(比如你的setting2),如果YAML里未提供对应键,会自动使用模块定义的默认值,完全适配你“并非全部配置项在YAML中定义”的场景。
  • 批量传递效率:不管有几百个配置项,只要键名匹配,一行代码就能完成所有参数传递,无需逐个手动赋值。

原写法无效原因

你写的for_each = local.resource_settings是Terraform用来创建多个模块实例的语法(比如根据Map里的每个键值对创建一个独立的myresource模块),并非用于给单个模块实例传递多个参数,因此无法运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:05:05