使用 Terraform 在 Azure 中使用不同的网卡创建多个虚拟机

问题描述 投票:0回答:1

我需要创建两个具有不同网卡的虚拟机。这是我的代码,但我有一个错误,我不知道为什么:

# Create network interface
resource "azurerm_network_interface" "my_nic" {
  for_each = toset(var.nics)
  name = each.key
  location            = "northeurope"
  resource_group_name = "webapp"

  ip_configuration {
    name                          = "my_nic_configuration"
    subnet_id                     = data.azurerm_subnet.my_subnet.id
    private_ip_address_allocation = "Dynamic"
  }
}
# Create VM
resource "azurerm_linux_virtual_machine" "my_vm" {
  #count                 = 2 #update
  for_each = toset(var.instances)
  name = each.key
  resource_group_name   = var.resource_group_name
  location              = var.location
  size                  = "Standard_F4s_v2"
  network_interface_ids = [azurerm_network_interface.my_nic[each.key].id]

错误:


│ Error: Invalid index
│ 
│   on main.tf line 79, in resource "azurerm_linux_virtual_machine" "my_vm":
│   79:   network_interface_ids = [azurerm_network_interface.my_nic[each.key].id]
│     ├────────────────
│     │ azurerm_network_interface.my_nic is object with 2 attributes
│     │ each.key is "vm01, vm02"
│ 
│ The given key does not identify an element in this collection value.
azure terraform cloud terraform-provider-azure
1个回答
0
投票

您没有提供您收到的错误中的

var.instances
var.nics
的代码,我们可以假设变量中的键不匹配,您可以使用两个变量来做到这一点,但我建议只使用一个,请参阅下面的示例代码

variable "instances" {
  type = any
  default = {
    "vm1" = {
      "nic_name" = "abc"
    }
    "vm2" = {
      "nic_name" = "def"
    }
  }
}

resource "azurerm_network_interface" "my_nic" {
  for_each = var.instances
  name     = each.value.nic_name
  location = "northeurope"
  ...
}

resource "azurerm_linux_virtual_machine" "my_vm" {
  for_each = var.instances
  name     = each.key
  ...
  network_interface_ids = [azurerm_network_interface.my_nic[each.value.nic_name].id]
}
© www.soinside.com 2019 - 2024. All rights reserved.