如何在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
相关产品推荐
相关产品推荐

