Terraform将NIC连接到Azure中正确的子网id

Terraform将NIC连接到Azure中正确的子网id,terraform,terraform-provider-azure,Terraform,Terraform Provider Azure,我有一个模块,可以创建一个包含5个子网的vNet。模块使用以下块将每个子网的id写入变量: output "vnet_subnets" { description = "The ids of subnets created inside the newly created vNet" value = azurerm_subnet.subnet.*.id } output "vnet_subnets" { value = module.virtual_network.vn

我有一个模块,可以创建一个包含5个子网的vNet。模块使用以下块将每个子网的id写入变量:

output "vnet_subnets" {
  description = "The ids of subnets created inside the newly created vNet"
  value       = azurerm_subnet.subnet.*.id
}
output "vnet_subnets" {
  value = module.virtual_network.vnet_subnets
}
然后,我使用以下块将其输出到状态文件:

output "vnet_subnets" {
  description = "The ids of subnets created inside the newly created vNet"
  value       = azurerm_subnet.subnet.*.id
}
output "vnet_subnets" {
  value = module.virtual_network.vnet_subnets
}
在状态文件中,输出如下所示:

"vnet_subnets": {
      "value": [
        "/subscriptions/<my_sub_id>/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/GatewaySubnet",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/VDMS",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/external",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/internal",
        "/subscriptions/<my_sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/management"
      ],
      "type": [
        "tuple",
        [
          "string",
          "string",
          "string",
          "string",
          "string"
        ]
      ]
    }
“vnet\u子网”:{
“价值”:[
“/subscriptions//resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet/subnets/gatewaysnet”,

“/subscriptions/对于您的需求,我认为您遇到的问题是您无法从输出中找到您想要使用的特殊的

我认为,您可以使用的可能方法是将子网ID放入具有子网名称的映射中。然后您可以使用具有该名称的特殊子网,并从映射中获取它。下面是您可以查看的示例代码:

variable "subnets" {
    type = list(string)
    default = [
        "test1",
        "test2",
        "test3"
    ]
}

variable "subnet_prefix" {
    type = list(string)
    default = [
        "10.0.1.0/24",
        "10.0.2.0/24",
        "10.0.3.0/24"
    ]
}


resource "azurerm_virtual_network" "example" {
  name                = "acceptanceTestVirtualNetwork1"
  address_space       = ["10.0.0.0/16"]
  location            = "East US"
  resource_group_name = "group_name"
}

resource "azurerm_subnet" "example" {
    count                                = length(var.subnets)
  name                 = element(var.subnets, count.index)
  resource_group_name  = "group_name"
  virtual_network_name = azurerm_virtual_network.example.name
  address_prefix       = element(var.subnet_prefix, count.index)
}

output "subnets_map" {
    value = zipmap(var.subnets, azurerm_subnet.example.*.id)
}

我看到您使用了模块,因此您可以将vnet模块的输出作为VM模块的输入。

为什么不构造这个id呢?它是众所周知的anyway@4c74356b41试图使代码尽可能的可移植如果你构建它,它的可移植性会降低吗?哈哈