如何将Terraform本地Map拆分到多文件并保持原引用方式?
解决方案
你不能直接在每个拆分文件里定义同名的locals.mymap——Terraform中多个同名局部变量会被后续定义完全覆盖,最终mymap只会保留最后一个文件的内容。正确的做法是拆分单个子结构后再合并为目标map,以下是两种可行方案:
方法一:单独定义子结构再组合
拆分每个子项到独立文件:
abc.tf:locals { abc = { # 放入abc原本的所有内容 example_key = "example_value" # ...其他字段 } }pqr.tf:locals { pqr = { # 放入pqr原本的所有内容 another_key = "another_value" # ...其他字段 } }xyz.tf:locals { xyz = { # 放入xyz原本的所有内容 third_key = "third_value" # ...其他字段 } }
创建主locals文件合并结构:
创建locals.tf文件,将三个子结构组合成mymap:locals { mymap = { abc = local.abc pqr = local.pqr xyz = local.xyz } }
方法二:用merge函数合并单key map
如果更倾向于每个文件保留独立的单key map结构,可以这样做:
拆分文件定义单key map:
abc.tf:locals { abc_map = { abc = { # abc的内容 } } }pqr.tf:locals { pqr_map = { pqr = { # pqr的内容 } } }xyz.tf:locals { xyz_map = { xyz = { # xyz的内容 } } }
合并为完整mymap:
在locals.tf中使用merge函数合并三个map:locals { mymap = merge(local.abc_map, local.pqr_map, local.xyz_map) }
两种方法都能让你继续通过local.mymap[$var]的方式引用对应内容,同时实现代码拆分的需求。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

