You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Terraform挂载已有磁盘至Windows VM时遇Unsupported block type错误

问题解决:Terraform AzureRM挂载已有磁盘到Windows VM报错

错误原因

你使用的AzureRM Provider 3.x版本对azurerm_windows_virtual_machine的磁盘配置结构做了重大调整:

  • 原storage_os_disk块已不再适用于当前资源结构;且你要挂载的是数据盘而非系统盘,错误使用了系统盘配置块。

修正方案

情况1:挂载已有磁盘作为额外数据盘

将虚拟机配置中的storage_os_disk块替换为storage_data_disk块,调整参数适配数据盘挂载要求:

# Create virtual machine
resource "azurerm_windows_virtual_machine" "main" {
  name                  = "${var.prefix}-vm"
  admin_username        = "azureuser"
  admin_password        = random_password.password.result
  location              = "East Us"
  resource_group_name   = "vm-terraform-demo"
  network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
  size                  = "Standard_DS1_v2"

  # 挂载已有数据盘
  storage_data_disk {
    name            = azurerm_managed_disk.test2.name
    managed_disk_id = azurerm_managed_disk.test2.id
    caching         = "ReadWrite"
    create_option   = "Attach"
    lun             = 0  # LUN编号从0开始,确保不与其他磁盘冲突
    disk_size_gb    = azurerm_managed_disk.test2.disk_size_gb
  }

  source_image_reference {
    publisher = "MicrosoftWindowsServer"
    offer     = "WindowsServer"
    sku       = "2022-datacenter-azure-edition"
    version   = "latest"
  }

  boot_diagnostics {
    storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
  }
}

情况2:将已有磁盘作为系统盘使用

如果你的需求是用已有磁盘作为VM的系统盘(而非额外数据盘),需移除source_image_reference块,改用os_disk块配置:

# Create virtual machine
resource "azurerm_windows_virtual_machine" "main" {
  name                  = "${var.prefix}-vm"
  admin_username        = "azureuser"
  admin_password        = random_password.password.result
  location              = "East Us"
  resource_group_name   = "vm-terraform-demo"
  network_interface_ids = [azurerm_network_interface.my_terraform_nic.id]
  size                  = "Standard_DS1_v2"

  # 将已有磁盘作为系统盘
  os_disk {
    name            = azurerm_managed_disk.test2.name
    managed_disk_id = azurerm_managed_disk.test2.id
    caching         = "ReadWrite"
    create_option   = "Attach"
  }

  boot_diagnostics {
    storage_account_uri = azurerm_storage_account.my_storage_account.primary_blob_endpoint
  }
}

关键注意事项

  • LUN编号:数据盘的lun需从0开始,且每个磁盘的LUN必须唯一,避免冲突。
  • 磁盘状态:确保要挂载的azurerm_managed_disk.test2未被其他VM占用,且与VM处于同一区域。
  • Provider版本:AzureRM 3.x版本的虚拟机资源结构与2.x差异较大,系统盘需用os_disk块,数据盘需用storage_data_disk块。

内容的提问来源于stack exchange,提问作者Michael Mok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:05:30