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

Terraform中map(object)变量资源创建引用及tfvars传值方法

Terraform map(object) 变量赋值与引用解决方案

1. terraform.tfvars 正确传值方式

你定义的type_names为map(object)类型,map要求所有元素必须配置唯一的键作为索引,你当前的写法直接拼接多个object,没有定义map键,不符合语法规范。正确写法如下:

BName  = "Test"
type_names = {
  # cooper_entry、mike_entry为自定义map键,可按需修改,保证全局唯一即可
  cooper_entry = {
    name   = "cooper"
    type   = "senior"
    stream = "developer"
    grp    = "Mid"
  }
  mike_entry = {
    name   = "Mike"
    type   = "Junior"
    stream = "tester"
    grp    = "entry"
  }
}

2. 资源中正确引用map变量的方法

你原有写法var.type_names.name错误,原因是var.type_names是完整的map集合,不是单个object对象,无法直接取object下的属性,需要根据使用场景选择以下引用方式:

2.1 批量生成资源(最常用场景)

如果需要为map内的每个object都创建一个对应资源,使用for_each遍历map即可,示例代码:

resource "az_resource" "B_Name" {
  name = var.BName
}

resource "azure_resource" "reso" {
  for_each = var.type_names
  id       = az_resource.B_Name.id
  # each.value对应当前遍历到的object对象,直接取对应属性即可
  name     = each.value.name
  # 其他属性引用示例:
  # type   = each.value.type
  # stream = each.value.stream
  # grp    = each.value.grp
}

2.2 单独引用指定元素属性

如果不需要批量创建资源,只想取某个固定键对应的object属性,直接通过[键名]索引访问即可:

resource "azure_resource" "reso_cooper" {
  id   = az_resource.B_Name.id
  # 取键为cooper_entry的对象的name属性
  name = var.type_names["cooper_entry"].name
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:27:05