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

如何用Terraform动态创建供模块调用的映射结构?

动态创建Terraform映射结构及模块调用方法

方法一:直接通过range生成目标映射

可以跳过中间的test_items列表,直接用for表达式一步生成所需的映射结构,语法更简洁:

locals {
  test_count = 90
  custom_items = {
    for i in range(local.test_count) :
    format("test%02d", i+1) => {
      name = "${format("test%02d", i+1)}shared value"
      # 也可使用concat函数:concat(format("test%02d", i+1), "shared value")
    }
  }
}

这里的核心是Terraform的映射型for表达式:for <元素> in <集合> : <键> => <值>,直接将循环变量i转换为testXX格式的键,同时生成包含name字段的对象作为对应值。

方法二:基于已有的test_items列表生成映射

如果需要保留test_items列表复用,可以基于它来生成目标映射:

locals {
  test_count = 90
  test_items = [for i in range(local.test_count) : format("test%02d", i+1)]
  custom_items = {
    for item in local.test_items :
    item => {
      name = "${item}shared value"
      # 或使用concat(item, "shared value")
    }
  }
}

此方式直接遍历test_items中的每个元素,将元素本身作为映射的键,同时生成对应的对象值,逻辑更直观。

用for_each动态调用模块

得到custom_items后,即可通过for_each遍历这个映射,动态创建模块实例:

module "test_modules" {
  source = "./path/to/your/module"
  for_each = local.custom_items

  # 向模块传递参数,比如name字段
  name = each.value.name
  # 若需使用键名,可调用each.key
  # test_identifier = each.key
}

for_each会以custom_items的每个键值对为依据,创建独立的模块实例,each.key对应test01/test02这类标识,each.value则是对应的对象结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:35:59