如何在Azure中创建具有不同规范的多个VM

时间:2019-11-28 14:11:04

标签: azure azure-devops terraform terraform-provider-azure

我正在寻找创建大约。 15个具有Terraform的虚拟机,它们在Azure中都有各自的大小,例如B2S,B2MS等。它们还具有不同大小的磁盘。我知道您可以使用复制索引来遍历数组,但是我不确定使用具有很多不同属性的VM的最佳方法。

有没有一种方法可以为每个VM规范创建一个映射对象,然后通过在TF文件中创建虚拟机来遍历它?目前,我能看到的唯一方法是在主文件中创建一个单独的虚拟机资源,并引用每个单独的映射文件。

1 个答案:

答案 0 :(得分:1)

创建一个以vm前缀为键,大小为值的地图:

variable "vms" {
  type = "map"
  default = {
    vm1 = "Standard_DS1_v2"
    vm2 = "Standard_ES2_v2"
  }
}

创建您的VMS:


# Network Interfaces for each one of the VMs
resource "azurerm_network_interface" "main" {

  # looping to create a resource for each entry in the map
  for_each            = var.vms

  # Accessing keys in the map by each.key
  name                = "${each.key}-nic"

  ...

}

resource "azurerm_virtual_machine" "main" {

  # Looping to create a VM per entry in the map
  for_each              = var.vms

  # Accessing names of map entries
  name                  = "vm-${each.key}-we"

  # Here we make sure we access the corrrect
  network_interface_ids = [azurerm_network_interface.main[each.key]]
  vm_size               = each.value

  ...

  os_profile {
    # Accessing names of map entries again
    computer_name  = "vm-${each.key}-we"
    ...
  }

  ...
}

为简洁起见,我没有写下创建Azure虚拟机的整个示例。 您需要根据需要填写许多属性。

有关如何创建Azure VMS的文档:https://www.terraform.io/docs/providers/azurerm/r/virtual_machine.html 有关资源并将其“循环”的文档:https://www.terraform.io/docs/configuration/resources.html Terraform拥有IMO最好的文档。