azurerm_virtual_machine не удаляет управляемый storage_os_disk при уничтожении

Вопрос или проблема

Я использую Terraform для создания тестовой виртуальной машины, на которой нужно проверить образ ARM, созданный с помощью Packer. В определении azurerm_virtual_machine используется storage_image_reference, что, похоже, означает, что я должен создать диск внутри этого блока ресурсов.

Создание проходит нормально, но при разрушении Terraform оставляет диск, что приводит к ошибке. Я новичок в Azure и в замешательстве, потому что в AWS удаление диска было тривиально.

Какой правильный подход для создания ВМ из образа ARM и удаления диска вместе с ВМ?

Код плана Terraform

resource "azurerm_virtual_machine" "this" {
  name                  = local.name_prefix
  location              = var.location
  resource_group_name   = module.core.resource_group_name
  network_interface_ids = [azurerm_network_interface.this.id]
  vm_size               = var.vm_size
  tags                  = local.tags

  storage_image_reference {
    id = data.azurerm_shared_image_version.dev.id
  }

  storage_os_disk {
    name              = local.name_prefix
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = var.vm_disk_type
  }

  os_profile {
    computer_name  = local.name_prefix
    admin_username = var.admin_username
  }

  os_profile_linux_config {
    disable_password_authentication = true
    ssh_keys {
      path     = "/home/${var.admin_username}/.ssh/authorized_keys"
      key_data = tls_private_key.this.public_key_openssh
    }
  }

Удаление управляемого диска OS виртуальной машины Azure с помощью Terraform

Чтобы удалить диск OS при уничтожении виртуальной машины, нам нужно выбрать опцию при создании ВМ в портале.

вставьте описание изображения здесь

Включив это при уничтожении ВМ, вы гарантируете, что диск также будет удален.

Эта операция выполняется с помощью параметра delete_os_disk_on_termination = true. Этот параметр специально разработан только для Terraform.

вставьте описание изображения здесь

Когда вы создаете виртуальную машину Azure с помощью Terraform, прикрепленный к ней диск ОС является “управляемым диском”. По умолчанию. Если вы забудете указать это в конфигурации, Terraform не уничтожит ресурс диска, и он останется в той же группе ресурсов, что приведет к увеличению затрат на ручное удаление.

В запросе вы уже предоставили ресурс, поэтому убедитесь, что вы добавите delete_os_disk_on_termination в состояние провизирования, чтобы гарантировать, что диск будет удален вместе с ВМ при выполнении команды terraform destroy.

Смотрите:

https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/virtual_machine#delete_os_disk_on_termination

https://learn.microsoft.com/en-gb/azure/virtual-machines/delete?tabs=portal2%2Ccli3%2Cportal4%2Cportal5

Ответ или решение

Как удалить управляемый диск операционной системы при уничтожении виртуальной машины в Azure с использованием Terraform

В процессе создания и управления виртуальными машинами (ВМ) в Azure через Terraform, пользователи могут столкнуться с проблемой: при удалении ресурса azurerm_virtual_machine, связанный управляемый диск операционной системы не удаляется автоматически. В этом ответе мы рассмотрим, почему это происходит и как это исправить, чтобы избежать ненужных затрат на управление оставшимися дисками.

Причина проблемы

Когда вы создаете виртуальную машину в Azure с помощью Terraform, управляемые диски по умолчанию сохраняются даже после удаления ВМ. Это поведение отличает Azure от AWS, где обычно удаление ресурсов происходит более автоматически и интуитивно. В вашей конфигурации кода Terraform указано следующее:

storage_os_disk {
  name              = local.name_prefix
  caching           = "ReadWrite"
  create_option     = "FromImage"
  managed_disk_type = var.vm_disk_type
}

Как видно из кода, вы не указали параметр, который отвечает за удаление управляемого диска при уничтожении ВМ. Без этого указания Terraform не знает, что вы хотите удалить диск вместе с виртуальной машиной.

Решение проблемы

Для того чтобы управляемый диск OS был уничтожен при удалении виртуальной машины, вам необходимо добавить параметр delete_os_disk_on_termination в вашу конфигурацию, как показано ниже:

resource "azurerm_virtual_machine" "this" {
  name                  = local.name_prefix
  location              = var.location
  resource_group_name   = module.core.resource_group_name
  network_interface_ids = [azurerm_network_interface.this.id]
  vm_size               = var.vm_size
  tags                  = local.tags

  storage_image_reference {
    id = data.azurerm_shared_image_version.dev.id
  }

  storage_os_disk {
    name                  = local.name_prefix
    caching               = "ReadWrite"
    create_option         = "FromImage"
    managed_disk_type     = var.vm_disk_type
    delete_os_disk_on_termination = true  # Добавьте эту строку
  }

  os_profile {
    computer_name  = local.name_prefix
    admin_username = var.admin_username
  }

  os_profile_linux_config {
    disable_password_authentication = true
    ssh_keys {
      path     = "/home/${var.admin_username}/.ssh/authorized_keys"
      key_data = tls_private_key.this.public_key_openssh
    }
  }
}

Это добавление указывает Terraform, что управляемый диск должен быть удален при уничтожении виртуальной машины. Это позволит избежать дополнительных затрат на управление оставшимися дисками и упростит процесс управления ресурсами.

Дополнительные ресурсы для изучения

Для получения дополнительной информации о параметре delete_os_disk_on_termination и других атрибутах ресурса azurerm_virtual_machine я рекомендую ознакомиться с документацией Terraform:

Заключение

Использование Terraform для управления виртуальными машинами в Azure может предоставлять много преимуществ, но важно помнить о специфических нюансах, таких как управление дисками. Добавление параметра delete_os_disk_on_termination в вашу конфигурацию позволит вам более эффективно управлять ресурсами и избежать ненужных расходов, обеспечивая более чистую и эффективную инфраструктуру.

Оцените материал
Добавить комментарий

Капча загружается...