terraform - 如何在地形中引用 map 变量? <蔚蓝>

标签 terraform

ma​​in.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")]
  }

在Web-Sub1中,我最初像Web-Sub2一样带了address_prefix,但现在我在发生错误后在Web-Sub1上尝试像address_prefix。

发生如下错误。

错误:属性值类型不正确

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

属性“address_prefix”的值不合适:需要字符串。

错误:属性值类型不正确

在 main.tf 第 31 行的资源“azurerm_virtual_network”“vnet”中: 31: address_prefix = [查找(var.subnetAddress[var.location], "web2")]

属性“address_prefix”的值不合适:需要字符串。

variable.tf 写道:

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_prefix 参数需要是一个字符串,你正在传递一个字符串列表 address_prefix = [lookup(var.subnetAddress[var.location], "web2")]

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

这应该有效。

引用azurerm_virtual_network资源,address_prefix 作为字符串而不是字符串列表传递。

关于terraform - 如何在地形中引用 map 变量? <蔚蓝>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64945665/

相关文章:

amazon-s3 - Terraform s3 事件通知错误

terraform - 在创建资源之前,我们可以在 Terraform 中匹配多个条件吗?

Terraform - 错误 : extra characters after interpolation expression

Azure Terraform API 管理 Graphql 支持

terraform - 获取 terraform 以忽略已停止实例的 "associate_public_ip_address"状态

Azure DevOps Server 无法使用作为订阅贡献者的服务主体创建 Azure 资源

terraform - 具有多个源和构建操作的 AWS Codepipeline

terraform - 我可以在 TerraForm main.tf 文件中使用变量吗?

azure - 如何使用 Terraform 将现有多个 Azure 策略分配给多个资源

terraform - Local-exec destroy 触发器 - 忽略对 google 访问 token 的更改