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

Terraform创建多地址空间Azure VNET遇类型报错如何解决

问题说明

尝试使用Terraform创建包含多个地址空间的Azure VNet(虚拟网络),本次计划为VNet配置4个地址空间,执行部署时返回属性值类型不匹配的错误。

现有配置文件

main.tf

#-------------------------------------
# VNET Creation - Default is "true"
#-------------------------------------
resource "azurerm_virtual_network" "vnet" {
  name                = lower("vnet-${var.hub_vnet_name}-${var.location}")
  location            = var.location
  resource_group_name = var.resource_group_name
  address_space       = [var.vnet_address_space]
  dns_servers         = [var.dns_servers]
  tags                = merge({ "ResourceName" = lower("vnet-${var.hub_vnet_name}-${var.location}") }, var.tags, )
}

variable.tf

variable "vnet_address_space" {
  description = "The address space to be used for the Azure virtual network."
  default     = ["10.350.0.0/24","10.351.0.0/20","10.352.0.0/24","10.353.0.0/24"]
}

terraform.tfvars

vnet_address_space = ["10.250.0.0/24","10.251.0.0/20","10.252.0.0/24","10.253.0.0/24"]
报错信息

执行terraform apply部署时返回如下错误:

Incorrect attribute value type
│ 
│   on main.tf line 71, in resource "azurerm_virtual_network" "vnet":
│   71:   address_space       = [var.vnet_address_space]
│     ├────────────────
│     │ var.vnet_address_space is tuple with 4 elements
│ 
│ Inappropriate value for attribute "address_space": element 0: string required.
错误定位

核心问题是main.tf中address_space参数的赋值存在列表嵌套错误:

  • 根据AzureRM Terraform Provider的定义,azurerm_virtual_network资源的address_space参数需要传入元素为CIDR字符串的列表类型值
  • 定义的vnet_address_space变量,无论默认值还是terraform.tfvars中传入的实际值,本身已经是符合要求的4元素字符串列表
  • 赋值时额外在外层包裹了一对方括号,最终传入的参数变成了嵌套列表结构[ <4元素地址列表> ],该结构的第一个元素是列表而非要求的字符串,直接触发类型校验报错。
修复方案

修改main.tf中address_space的赋值行,去掉外层多余的方括号,修改后内容为:

address_space       = var.vnet_address_space

修改后重新执行Terraform部署即可正常创建配置了4个地址空间的VNet。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 21:57:23