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

如何同时使用azurerm_virtual_machine的OS配置与azurerm_managed_disk高级选项?

问题

我希望使用azurerm_managed_disk提供的额外配置选项,同时也能使用azurerm_virtual_machine中的os_profile和os_profile_windows_config块,但目前似乎只能二选一,请问如何同时拥有两者的全部功能?

解决方案

要同时实现这两个需求,关键是调整托管磁盘的创建逻辑,以及虚拟机与托管磁盘的关联方式:

  • 创建托管磁盘时,将create_option设为"Empty",而非"FromImage",这样可以保留azurerm_managed_disk的所有高级配置项(如tier、on_demand_bursting_enabled等)。
  • 在虚拟机配置中保留os_profile和os_profile_windows_config块,通过storage_os_disk的managed_disk_id引用预先创建的空托管磁盘,同时设置create_option为"FromImage",配合storage_image_reference指定镜像来源。

这种方式下,Azure会将镜像部署到你预先配置好的托管磁盘上,同时允许你使用虚拟机的操作系统配置项。

修改后的完整配置示例

# 预先配置带高级选项的空托管磁盘
resource "azurerm_managed_disk" "RTN_web01_OSdisk" {
  create_option                     = "Empty"
  disk_size_gb                      = 127
  gallery_image_reference_id        = "/subscriptions/.........../providers/Microsoft.Compute/galleries/Images/images/WebServer2019/versions/1.0.0"
  hyper_v_generation                = "V1"
  location                          = var.location
  name                              = "${var.resource_group_name}_websvr01_OSdisk"
  on_demand_bursting_enabled        = false
  optimized_frequent_attach_enabled = false
  os_type                           = "Windows"
  performance_plus_enabled          = false
  public_network_access_enabled     = true
  resource_group_name               = azurerm_resource_group.RTN_thisRG.name
  storage_account_type              = "Premium_LRS"
  tags                              = {}
  tier                              = "P10"
  trusted_launch_enabled            = false
}

# 配置虚拟机,关联托管磁盘并保留OS配置
resource "azurerm_virtual_machine" "RTN_webserver01" {
  availability_set_id              = azurerm_availability_set.RTN_AS_Web.id
  location                         = var.location
  name                             = "${var.resource_group_name}_webserver01"
  network_interface_ids            = [azurerm_network_interface.RTN_web01_nic.id]
  resource_group_name              = azurerm_resource_group.RTN_thisRG.name
  tags                             = {}
  vm_size                          = "Standard_B2ms"

  boot_diagnostics {
    enabled     = true
    storage_uri = azurerm_storage_account.RTN_storage_account.primary_blob_endpoint
  }

  # 保留OS配置块
  os_profile {
    admin_password = var.altecadminpw
    admin_username = "altecadmin"
    computer_name  = "${var.resource_group_name}web01"
  }

  os_profile_windows_config {
    enable_automatic_upgrades = true
    provision_vm_agent        = true
    timezone                  = "Pacific Standard Time"
  }
  
  # 指定镜像来源
  storage_image_reference {
    id        = "/subscriptions/....../providers/Microsoft.Compute/galleries/Images/images/WebServer2019"
  }

  # 关联预先创建的托管磁盘,设置从镜像部署
  storage_os_disk {
    caching                   = "ReadWrite"
    create_option             = "FromImage"
    managed_disk_id           = azurerm_managed_disk.RTN_web01_OSdisk.id
    os_type                   = "Windows"
    write_accelerator_enabled = false
  }
}

关键说明

  • 托管磁盘设为Empty后,Azure会在虚拟机部署时将镜像内容写入该磁盘,不会影响你配置的高级磁盘参数。
  • 虚拟机的storage_image_reference需与托管磁盘的gallery_image_reference_id匹配,确保镜像一致性。
  • storage_os_disk中无需重复设置磁盘大小、存储类型等参数,这些会继承自azurerm_managed_disk的配置。

内容的提问来源于stack exchange,提问作者Adam Winter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 12:57:40