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

如何将Terraform本地Map拆分到多文件并保持原引用方式?

解决方案

你不能直接在每个拆分文件里定义同名的locals.mymap——Terraform中多个同名局部变量会被后续定义完全覆盖,最终mymap只会保留最后一个文件的内容。正确的做法是拆分单个子结构后再合并为目标map,以下是两种可行方案:

方法一:单独定义子结构再组合

  1. 拆分每个子项到独立文件:

    • 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"
          # ...其他字段
        }
      }
      
  2. 创建主locals文件合并结构:
    创建locals.tf文件,将三个子结构组合成mymap:

    locals {
      mymap = {
        abc = local.abc
        pqr = local.pqr
        xyz = local.xyz
      }
    }
    

方法二:用merge函数合并单key map

如果更倾向于每个文件保留独立的单key map结构,可以这样做:

  1. 拆分文件定义单key map:

    • abc.tf:
      locals {
        abc_map = {
          abc = {
            # abc的内容
          }
        }
      }
      
    • pqr.tf:
      locals {
        pqr_map = {
          pqr = {
            # pqr的内容
          }
        }
      }
      
    • xyz.tf:
      locals {
        xyz_map = {
          xyz = {
            # xyz的内容
          }
        }
      }
      
  2. 合并为完整mymap:
    在locals.tf中使用merge函数合并三个map:

    locals {
      mymap = merge(local.abc_map, local.pqr_map, local.xyz_map)
    }
    

两种方法都能让你继续通过local.mymap[$var]的方式引用对应内容,同时实现代码拆分的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:32:44