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

Terraform部署Azure本地网络网关时插件崩溃求助

解决Terraform部署Azure本地网络网关的插件Panic错误

问题现象

执行terraform apply部署Azure本地网络网关时,出现插件无响应,同时azurerm_v3.0.0_x5插件触发panic错误:

interface conversion: interface {} is nil, not string

配置代码参考

local_gw.tf

resource "azurerm_local_network_gateway" "local_gw" {
  name = var.azurerm_local_network_gateway_name

  location            = var.location
  resource_group_name = var.rg_name

  gateway_address = var.gateway_address
  address_space   = var.local_gw_address_space # The gateway IP address to connect with
  tags            = merge(var.common_tags)
}

main.tf

locals {
  azurerm_local_network_gateway_name = "local-gw"
  gateway_address = ""
  local_gw_address_space = [""]
  common_tags = {
    "environment"      = "test"
    "managedby"        = "devops"
    "developedby"      = "jananath"
  }
  project = "mysvg"
  resource_location = "Germany West Central"
}

# Local Gateway 
module "local_gateway" {
  source = "./modules/local-gateway"

  location                           = local.resource_location
  rg_name                            = var.rg_name
  azurerm_local_network_gateway_name = var.azurerm_local_network_gateway_name

  gateway_address        = var.gateway_address
  local_gw_address_space = var.local_gw_address_space

  common_tags = merge(
    local.common_tags,
    {
      "Name" = "${local.project}-${var.azurerm_local_network_gateway_name}"
    },
  )
}

provider.tf

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = "=3.0.0"
    }
  }
    backend "azurerm" {
        resource_group_name  = "shared-resources"
        storage_account_name = "janasvtfstate"
        container_name       = "tfstate"
        key                  = "terraform.tfstate"
    }

}

# Configure the Microsoft Azure Provider
provider "azurerm" {
  features {}
}

错误原因分析

  1. 无效配置传递:gateway_address被设为空字符串,local_gw_address_space包含空字符串,这些无效值传递给AzureRM插件后,v3.0.0版本的插件无法正确处理,触发类型转换panic。
  2. 变量传递错误:模块调用时使用了未赋值的var.gateway_address和var.local_gw_address_space,而非local中定义的变量,导致实际传入资源的是nil或空值。
  3. 插件版本缺陷:azurerm v3.0.0存在已知的空值处理bug,对必填字段的空值校验不严谨,容易触发panic。

修复步骤

1. 修正配置值,提供有效参数

gateway_address必须是本地网关的公网IP地址,local_gw_address_space必须是本地网络的CIDR地址列表,不能为空。修改main.tf中的locals:

locals {
  azurerm_local_network_gateway_name = "local-gw"
  gateway_address = "1.2.3.4" # 替换为实际的本地网关公网IP
  local_gw_address_space = ["192.168.0.0/24", "10.0.0.0/16"] # 替换为实际的本地网络CIDR
  # 其余配置保持不变
}

2. 修正模块变量传递

模块调用时应使用local中定义的有效变量,而非未赋值的var:

module "local_gateway" {
  source = "./modules/local-gateway"

  location                           = local.resource_location
  rg_name                            = var.rg_name
  azurerm_local_network_gateway_name = local.azurerm_local_network_gateway_name

  gateway_address        = local.gateway_address
  local_gw_address_space = local.local_gw_address_space

  common_tags = merge(
    local.common_tags,
    {
      "Name" = "${local.project}-${local.azurerm_local_network_gateway_name}"
    },
  )
}

3. 升级AzureRM插件版本

v3.0.0版本存在较多已知问题,建议升级到较新的稳定版本,修改provider.tf中的版本约束:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.60.0" # 使用最新稳定版本,或指定具体版本如3.89.0
    }
  }
  # 其余backend配置保持不变
}

4. 重新初始化并部署

执行以下命令应用修复:

terraform init -upgrade
terraform apply

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:01:37