azure - 如何引用 terraform 中的对象

标签 azure terraform

我正在使用 terraform 创建 Azure VNet,并在其中创建几个子网。稍后,我想创建一个网络接口(interface),并希望将其放入已为 VNet 创建的子网之一中。我不知道如何引用该子网。

我在下面尝试过,但它现在可以工作了:

subnet_id = "${azurerm_virtual_network.virtual-network.subnet.ServersSubnet.id}"

resource "azurerm_virtual_network" "virtual-network" {
    name                = "${var.ClientShortName}-az-network"
    address_space       = ["${local.AzureInfraNetwork}"]
    location            = "${var.resource-location}"
    resource_group_name =  "${azurerm_resource_group.test-resource-group.name}"

subnet {
    name           = "ServersSubnet"
    address_prefix = "${local.ServersSubnet}"
}

subnet {
    name           = "GatewaySubnet"
    address_prefix = "${local.GatewaySubnet}"
} 
}

错误:无法对设定值建立索引

  on main.tf line 120, in resource "azurerm_network_interface" "DCNIC":
 120:     subnet_id                     = "${azurerm_virtual_network.virtual-network.subnet.ServersSubnet.id}"

Block type "subnet" is represented by a set of objects, and set elements do
not have addressable keys. To find elements matching specific criteria, use a
"for" expression with an "if" clause.

最佳答案

下面是完整的解决方案。

如果子网被创建为 block ,您可以按如下方式引用给定子网的资源 ID:

resource "azurerm_resource_group" "main" {
  name     = "vnet-rg"
  location = "eastus"
}

resource "azurerm_virtual_network" "main" {
  name                = "my-vnet"
  location            = azurerm_resource_group.main.location
  resource_group_name = azurerm_resource_group.main.name
  address_space       = ["10.0.0.0/16"]

  subnet {
    name           = "subnet1"
    address_prefix = "10.0.1.0/24"
  }

  subnet {
    name           = "subnet2"
    address_prefix = "10.0.2.0/24"
  }

  subnet {
    name           = "subnet3"
    address_prefix = "10.0.3.0/24"
  }

}

output "subnet1_id" {
  value = azurerm_virtual_network.main.subnet.*.id[0]
}

output "subnet2_id" {
  value = azurerm_virtual_network.main.subnet.*.id[1]
}

output "subnet3_id" {
  value = azurerm_virtual_network.main.subnet.*.id[2]
}

关于azure - 如何引用 terraform 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56861532/

相关文章:

Azure - 使用replyUrlsWithType创建应用程序注册

Azure 资源管理器模板 HostingEnvironment

amazon-web-services - 使用 Terraform 从快照创建 RDS 实例

Terraform 计划在某些环境下无法识别 Terraform 云中的参数

azure - 允许应用程序网关后端池指向特定 VM

sockets - 是否可以使用 Azure Web 作业来监听公共(public)套接字

sql - 如何将表从一个数据库复制到另一个数据库? (SQL azure )

c# - Azure Webjob TimerTrigger 不工作

azure - 如何使用 Terraform 为每个开发人员创建 Azure 服务总线命名空间实例并将其保存在状态中

amazon-web-services - 如何安全地从 aws_iam_policy_attachment 升级到 aws_iam_role_policy_attachment?