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

Terraform动态生成文件时如何保持map定义的遍历顺序?

解决Terraform遍历Map时保持定义顺序的问题

Terraform的原生Map类型默认会按键的字母顺序排序遍历,所以你直接遍历local.template_filenames_with_vars时,会按aaa、bbb的顺序处理,而非你定义的顺序。要保持自定义顺序,最可靠的方式是单独维护一个键的顺序列表,基于列表遍历而非直接遍历Map。

修改后的代码示例

第一步:定义模板处理顺序列表

在locals中新增一个列表,明确指定你想要的模板处理顺序:

locals {
  # 显式定义模板处理顺序,按你需要的bbb、aaa排列
  template_process_order = ["bbb", "aaa"]
  
  template_filenames_with_vars = {
    bbb = {
      var = 1
    }

    aaa = {
      var = 1
    }
  }
}

第二步:基于顺序列表遍历Map

修改local_file资源的content部分,遍历顺序列表,再通过列表元素索引Map获取对应变量:

resource "local_file" "myfile" {
  filename = "file.txt"

  content = <<EOT
${
  join("\n\n", [
    for template_name in local.template_process_order :
        templatefile("${template_name}.txt", local.template_filenames_with_vars[template_name])
  ])
}
  EOT
}

原理说明

Terraform的Map类型本质是无序键值对集合,定义时的书写顺序会被忽略,默认按字母序排序键。通过单独维护顺序列表,我们可以完全控制遍历顺序——列表的元素顺序就是模板的处理顺序,再通过元素值去Map中匹配对应的变量配置,就能保证最终生成的文件内容按你预期的顺序拼接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:52:39