Terraform 如何在地形中引用map变量&书信电报;Azure>;

Terraform 如何在地形中引用map变量&书信电报;Azure>;,terraform,Terraform,main.tf写道: terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = ">= 2.26" } } } provider "azurerm" { features {} } resource "azurerm_resource_group"

main.tf写道:

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = ">= 2.26"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "Product-RG"
  location = var.location
}

resource "azurerm_virtual_network" "vnet" {
  resource_group_name = azurerm_resource_group.rg.name
  name          = "Product-VNet"
  address_space = [lookup(var.vnetAddress, var.location)]
  location      = var.location

  subnet {
    name           = "Web-Sub1"
    address_prefix = ["${lookup(var.subnetAddress[var.location], "web1")}"]
  }
  subnet {
    name           = "Web-Sub2"
    address_prefix = [lookup(var.subnetAddress[var.location], "web2")]
  }
variable "location" {}

variable "vnetAddress" {
  type = map

  default = {
    westus = "192.168.1.0/27"
    eastus = "192.168.11.0/27"
  }
}

variable "subnetAddress" {
  type = map

  default = {
    westus = {
      web1 = "192.168.1.0/27"
      web2 = "192.168.1.32/27"
      was1 = "192.168.1.64/27"
      was2 = "192.168.1.96/27"
      db1 = "192.168.1.128/27"
      db2 = "192.168.1.160/27"
    }

    eastus = {
      web1 = "192.168.11.0/27"
      web2 = "192.168.11.32/27"
      was1 = "192.168.11.64/27"
      was2 = "192.168.11.96/27"
      db1 = "192.168.11.128/27"
      db2 = "192.168.11.160/27"
    }
  }
}
在Web-Sub1中,我最初使用了类似Web-Sub2的地址前缀,但在错误发生后,我现在尝试使用Web-Sub1上的地址前缀

出现如下错误。

错误:属性值类型不正确

在main.tf第27行的资源“azurerm_虚拟网络”vnet中: 27:address_prefix=[“${lookup(var.subnetAddress[var.location],“web1”)}”]

属性“地址前缀”的值不正确:需要字符串

错误:属性值类型不正确

在main.tf第31行的资源“azurerm_虚拟网络”vnet中: 31:address_prefix=[lookup(var.subnetAddress[var.location],“web2”)]

属性“地址前缀”的值不正确:需要字符串

变量。tf写入:

terraform {
  required_providers {
    azurerm = {
      source = "hashicorp/azurerm"
      version = ">= 2.26"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "rg" {
  name     = "Product-RG"
  location = var.location
}

resource "azurerm_virtual_network" "vnet" {
  resource_group_name = azurerm_resource_group.rg.name
  name          = "Product-VNet"
  address_space = [lookup(var.vnetAddress, var.location)]
  location      = var.location

  subnet {
    name           = "Web-Sub1"
    address_prefix = ["${lookup(var.subnetAddress[var.location], "web1")}"]
  }
  subnet {
    name           = "Web-Sub2"
    address_prefix = [lookup(var.subnetAddress[var.location], "web2")]
  }
variable "location" {}

variable "vnetAddress" {
  type = map

  default = {
    westus = "192.168.1.0/27"
    eastus = "192.168.11.0/27"
  }
}

variable "subnetAddress" {
  type = map

  default = {
    westus = {
      web1 = "192.168.1.0/27"
      web2 = "192.168.1.32/27"
      was1 = "192.168.1.64/27"
      was2 = "192.168.1.96/27"
      db1 = "192.168.1.128/27"
      db2 = "192.168.1.160/27"
    }

    eastus = {
      web1 = "192.168.11.0/27"
      web2 = "192.168.11.32/27"
      was1 = "192.168.11.64/27"
      was2 = "192.168.11.96/27"
      db1 = "192.168.11.128/27"
      db2 = "192.168.11.160/27"
    }
  }
}

我想知道为什么会有需要以字符串格式编写的错误,以及为什么我不能带来数据。

您几乎做到了,只是
address\u prefix
参数需要是字符串,并且您正在传递字符串列表
address\u prefix=[lookup(var.subnetAddress[var.location],“web2”)

这应该行得通

参考参考资料,
address\u前缀
作为字符串而不是字符串列表传递