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

Terraform报错each.value is null,无法遍历连接配置求排查

Terraform错误排查:each.value为null无法获取属性

问题

配置Terraform时触发错误:

each.value is null. This value is null, so it does not have any attributes.

遍历local.transformed_connections创建azurerm_virtual_network_gateway_connection资源时,无法获取name和connection_type属性。

配置代码

locals {
  transformed_connections = { for key, value in var.virtual_network_gateway_connections : key => value }
}

resource "azurerm_virtual_network_gateway" "example" {
  name            = var.name
  # 注:该资源块缺少闭合的 },且缺少location、resource_group_name等必填参数
}

resource "azurerm_virtual_network_gateway_connection" "example" {
  for_each = local.transformed_connections

  name            = each.value.name
  connection_type = each.value.connection_type
}

module "vnetgateway" {
  source                = location_to_the_path
  for_each              = var.virtual_network_gateway
  name                  = each.value.name
  virtual_network_gateway_connections   = each.value.virtual_network_gateway_connections
}

tfvars文件内容

virtual_network_gateway = {
  "1st_gateway" = {
    name                        = "1st_gateway"
    virtual_network_gateway_connections = {
      "1st_connection" = {
        name        = "1st_connection"
        connection_type = "whatever"
      },
      "2nd_connection" = {
        name        = "2nd_connection"
        connection_type = "whatever"
      }
    }
  },
  "2nd_gateway" = {
    name                        = "2nd_gateway"
    virtual_network_gateway_connections = {
      "1st_connection" = {
        name        = "1st_connection"
        connection_type = "whatever"
      },
      "2nd_connection" = {
        name        = "2nd_connection"
        connection_type = "whatever"
      }
    }
  }
}

完整错误信息

Error: Attempt to get attribute from null value
    │ 
    │   on main.tf line 11, in resource "azurerm_virtual_network_gateway_connection" "example":
    │   11:     name            = each.value.name
    │     ├────────────────
    │     │ each.value is null
    │ 
    │ This value is null, so it does not have any attributes.
    
    Error: Attempt to get attribute from null value
    │ 
    │   on main.tf line 12, in resource "azurerm_virtual_network_gateway_connection" "example":
    │   12:     connection_type = each.value.connection_type
    │     ├────────────────
    │     │ each.value is null
    │ 
    │ This value is null, so it does not have any attributes.

问题根源

  1. 变量引用错误:local.transformed_connections依赖var.virtual_network_gateway_connections,但从tfvars结构看,实际连接数据嵌套在var.virtual_network_gateway的每个网关对象中,var.virtual_network_gateway_connections要么未定义,要么值为null,导致遍历的each.value为空。
  2. 资源语法错误:azurerm_virtual_network_gateway资源块未闭合(缺少}),会引发Terraform解析异常。
  3. 遍历逻辑错误:直接使用未正确赋值的local变量,无法获取有效连接对象。

解决方法

1. 修正连接资源的遍历逻辑

将所有网关下的连接扁平化为全局map,确保每个元素都是有效连接对象:

locals {
  transformed_connections = merge([
    for gateway_key, gateway in var.virtual_network_gateway : {
      for conn_key, conn in gateway.virtual_network_gateway_connections :
      # 用网关+连接的组合key避免重名冲突
      "${gateway_key}-${conn_key}" => conn
    }
  ]...)
}

2. 修复资源语法错误

补全azurerm_virtual_network_gateway的闭合括号,并补充必填参数(示例):

resource "azurerm_virtual_network_gateway" "example" {
  name                = var.name
  location            = var.location
  resource_group_name = var.resource_group_name
  type                = "Vpn"
  vpn_type            = "RouteBased"
  sku                 = "VpnGw1"
}

3. 清理无效变量引用

删除或修正var.virtual_network_gateway_connections的定义,确保变量结构与实际输入匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:17:43