Terraform Azure: как настроить тип дисков с данными при подготовке виртуальной машины из пользовательского образа - PullRequest
1 голос
/ 25 марта 2019

Мне нужно указать количество виртуальных машин в Azure из пользовательского образа, используя Terraform. Образ довольно сложный, он определяет машину с 16 дисками данных, предварительно настроенными для работы с высокопроизводительной базой данных Oracle. Я предполагал, что мне не нужно настраивать блоки storage_data_disk внутри ресурса azurerm_virtual_machine, поскольку все диски уже настроены внутри образа.

Это казалось правдой. Если я создаю виртуальную машину, используя пользовательский storage_image_reference - все диски с данными были созданы с правильными номерами LUN и размерами, все предустановленное программное обеспечение работало должным образом:

resource "azurerm_virtual_machine" "database" {
  name                  = "${var.prefix}-vm"
  location              = "${azurerm_resource_group.main.location}"
  resource_group_name   = "${azurerm_resource_group.main.name}"
  network_interface_ids = ["${azurerm_network_interface.main.id}"]
  vm_size               = "Standard_E16s_v3"

  delete_os_disk_on_termination = true
  delete_data_disks_on_termination = true

  storage_image_reference {
    id = "/subscriptions/ABC/resourceGroups/XYZ/providers/Microsoft.Compute/images/CUSTOM-IMAGE"
  }

  storage_os_disk {
    name              = "${var.prefix}-os-disk"
    create_option     = "FromImage"
    managed_disk_type = "Premium_LRS"
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "testadmin"
    admin_password = "Password1234!"
  }

  os_profile_linux_config {
    disable_password_authentication = false
  }
}

Проблема заключалась в том, что все диски данных были Standard_HDD , который является самым медленным типом диска, и я хотел, чтобы они были Premium_SSD , как в исходной виртуальной машине, с которой был взят образ .

В конце концов, я решил это, добавив явные блоки storage_data_disk для каждого диска данных внутри ресурса azurerm_virtual_machine, например:

resource "azurerm_virtual_machine" "database" {
  name                  = "${var.prefix}-vm"
  location              = "${azurerm_resource_group.main.location}"
  resource_group_name   = "${azurerm_resource_group.main.name}"
  network_interface_ids = ["${azurerm_network_interface.main.id}"]
  vm_size               = "Standard_E16s_v3"

  delete_os_disk_on_termination    = true
  delete_data_disks_on_termination = true

  storage_image_reference {
    id = "/subscriptions/ABC/resourceGroups/XYZ/providers/Microsoft.Compute/images/CUSTOM-IMAGE"
  }

  #-------------------------------------------------------------------
  #   Explicit Data Disk configuration starts here
  #-------------------------------------------------------------------

  storage_data_disk {
    name              = "home-disk"
    managed_disk_type = "Premium_LRS"
    disk_size_gb      = 100
    create_option     = "FromImage"
    lun               = 0
  }

  storage_data_disk {
    name              = "u01-disk"
    managed_disk_type = "Premium_LRS"
    disk_size_gb      = 200
    create_option     = "FromImage"
    lun               = 1
  }

  storage_data_disk {
    name              = "backup-disk-0"
    managed_disk_type = "Premium_LRS"
    disk_size_gb      = 1023
    create_option     = "FromImage"
    lun               = 2
  }

  #-------------------------------------------------------------------
  #   Skipped 12 disks ...
  #-------------------------------------------------------------------

  storage_data_disk {
    name              = "data-disk-9"
    managed_disk_type = "Premium_LRS"
    disk_size_gb      = 512
    create_option     = "FromImage"
    lun               = 15
  }

  #-------------------------------------------------------------------
  #   Explicit Data Disk configuration ends here
  #-------------------------------------------------------------------

  storage_os_disk {
    name              = "${var.prefix}-os-disk"
    create_option     = "FromImage"
    managed_disk_type = "Premium_LRS"
  }

  os_profile {
    computer_name  = "hostname"
    admin_username = "testadmin"
    admin_password = "Password1234!"
  }

  os_profile_linux_config {
    disable_password_authentication = false
  }
}

Это сработало, и все диски с данными теперь были созданы как Premium_SSD , но такое решение кажется неправильным, потому что оно должно постоянно синхронизироваться с исходным образом. Если команда, которая готовит этот образ, решит добавить / удалить диск или изменить размер одного из них - это изменение должно быть отражено в моем шаблоне TF.

Интересно, что при создании новой виртуальной машины из того же образа с использованием пользовательского интерфейса портала Azure все диски данных были созданы как Premium_SSD . Мне не нужно было их настраивать, и я даже не знал заранее, сколько дисков с данными было определено в образе или их размеры. Но когда я использую Terraform - все диски с данными создаются как Standard_HDD .

Есть ли способ сообщить провайдеру Terraform / Azure, какой тип диска использовать для виртуальных машин, предоставляемых из пользовательских образов без явной настройки каждого из них ?

Спасибо!

1 Ответ

1 голос
/ 26 марта 2019

К сожалению, способ определения типа диска при создании виртуальной машины Azure через Terraform - это тот, на который вы ссылаетесь. Насколько я знаю, это единственный путь в Terraform.

Чтобы определить тип диска для всех дисков в виртуальной машине, необходимо выбрать параметр. В Azure Portal вы можете выбрать Premium SSD для типа диска ОС, тогда виртуальная машина создаст весь диск ОС и диск данных в Premium SSD.

Кроме того, когда вы создаете виртуальную машину из пользовательского образа через интерфейс командной строки Azure, для вас есть параметр для установки типа диска: --storage-sku. Вы можете ввести значение Premium_LRS, чтобы создать все диски в Premium SSD. См. az vm create.

Но, к сожалению, вы не можете найти свойство в Terraform для виртуальной машины в настоящее время. Возможно, вы можете добавить проблему в сообщество Terraform, чтобы улучшить ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...