Вопрос или проблема
Я использую 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
.
Смотрите:
Ответ или решение
Как удалить управляемый диск операционной системы при уничтожении виртуальной машины в 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
в вашу конфигурацию позволит вам более эффективно управлять ресурсами и избежать ненужных расходов, обеспечивая более чистую и эффективную инфраструктуру.