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

Terraform配置locals块报错each.value cannot be used in this context求助

问题产生原因
  • Terraform 中each是专属的循环上下文对象,仅允许在显式声明了for_each参数的resource、data、module块内部使用,locals块不支持顶层定义for_each参数,你代码中写在locals块内的for_each = toset(vnetnames)属于无效声明,不会生成对应的each上下文。
  • 你在resourcelist的for表达式中直接引用each.value时,没有任何生效的for_each逻辑提供each对象取值,因此触发上下文不合法的报错。
修复方案

首先需要根据你的实际业务逻辑调整取值方式,如果你要实现的是将vnetlist中的region字段和vnetnames中的vnet名称做映射,可参考如下修改:

locals {
  vnetlist = csvdecode(file("./title.csv"))
  vnetnames = ([for vnets in lookup(data.azurerm_resources.spokes, "resources", []) : lookup(vnets, "name")])
  
  # 若vnetlist的元素顺序和vnetnames的顺序一一对应,按索引关联取值
  resourcelist = {for idx, r in local.vnetlist : r.region => local.vnetnames[idx]}
}

output "mybranch" {
  value =  local.resourcelist
}

如果你的实际需求是遍历vnetnames创建多个资源,需要把for_each声明移动到对应的资源块内,此时可以在资源块内部正常使用each.value,示例如下:

# 示例:为每个vnet创建对应的子网资源
resource "azurerm_subnet" "example" {
  for_each             = toset(local.vnetnames)
  name                 = "${each.value}-subnet"
  resource_group_name  = "example-rg"
  virtual_network_name = each.value
  address_prefixes     = ["10.0.1.0/24"]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:54:01