如何同时使用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
相关产品推荐
相关产品推荐

