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.
问题根源
- 变量引用错误:
local.transformed_connections依赖var.virtual_network_gateway_connections,但从tfvars结构看,实际连接数据嵌套在var.virtual_network_gateway的每个网关对象中,var.virtual_network_gateway_connections要么未定义,要么值为null,导致遍历的each.value为空。 - 资源语法错误:
azurerm_virtual_network_gateway资源块未闭合(缺少}),会引发Terraform解析异常。 - 遍历逻辑错误:直接使用未正确赋值的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
相关产品推荐
相关产品推荐

