azurerm_virtual_machine 不会在销毁时删除托管 storage_os_disk

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

我正在使用 terraform 创建一个测试虚拟机,以在其上验证加壳程序构建的 ARM 映像。 在 azurerm_virtual_machine 定义中使用 storage_image_reference 这似乎意味着我必须在此资源块中创建磁盘。

创建很好,但当破坏发生时,地形会将磁盘留在后面,从而导致错误。我是 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
    }
  }
azure terraform terraform-provider-azure
1个回答
0
投票

使用 terrafrom 删除 azure_virtual_machine 的托管存储操作系统磁盘

要在销毁虚拟机时删除操作系统磁盘,我们需要在门户中创建虚拟机时选择一个选项。

enter image description here

通过在销毁虚拟机时启用此功能,将确保磁盘也被删除。

该操作是通过

delete_os_disk_on_termination = true
操作进行的。该参数专为 terraform 设计。

enter image description here

当您使用 Terraform 创建 Azure 虚拟机时,附加到它的操作系统磁盘是“托管磁盘”。默认情况下。如果您忘记在配置中指定这一点,terraform 不会破坏磁盘资源,并且仍会保留在同一个 RG 中,导致手动删除的支出增加。

在查询中,您已经配置了资源,因此请确保在配置状态本身中添加此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

© www.soinside.com 2019 - 2024. All rights reserved.