Terraform Azure:当从自定义映像配置VM时,如何配置数据磁盘的类型
我需要使用Terraform从自定义映像提供Azure中的VM数量。映像相当复杂,它定义了一台具有16个数据磁盘的机器,这些磁盘预先配置为运行高性能Oracle数据库。我的假设是,我不必在Terraform Azure:当从自定义映像配置VM时,如何配置数据磁盘的类型,azure,terraform,Azure,Terraform,我需要使用Terraform从自定义映像提供Azure中的VM数量。映像相当复杂,它定义了一台具有16个数据磁盘的机器,这些磁盘预先配置为运行高性能Oracle数据库。我的假设是,我不必在azurerm\u虚拟机资源内配置storage\u data\u disk块,因为所有磁盘都已在映像内配置 这似乎是真的。如果我使用自定义的存储\u映像\u参考创建虚拟机–所有数据磁盘都是使用正确的LUN和大小创建的,所有预装软件都按预期工作: resource "azurerm_virtual_machin
azurerm\u虚拟机
资源内配置storage\u data\u disk
块,因为所有磁盘都已在映像内配置
这似乎是真的。如果我使用自定义的存储\u映像\u参考创建虚拟机
–所有数据磁盘都是使用正确的LUN和大小创建的,所有预装软件都按预期工作:
resource "azurerm_virtual_machine" "database" {
name = "${var.prefix}-vm"
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
network_interface_ids = ["${azurerm_network_interface.main.id}"]
vm_size = "Standard_E16s_v3"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
id = "/subscriptions/ABC/resourceGroups/XYZ/providers/Microsoft.Compute/images/CUSTOM-IMAGE"
}
storage_os_disk {
name = "${var.prefix}-os-disk"
create_option = "FromImage"
managed_disk_type = "Premium_LRS"
}
os_profile {
computer_name = "hostname"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_linux_config {
disable_password_authentication = false
}
}
问题是所有的数据磁盘都是标准的HDD,这是最慢的磁盘类型,我希望它们是高级的SSD,就像从中拍摄图像的原始VM一样
最终,我通过为azurerm\u虚拟机
资源中的每个数据磁盘添加显式存储\u数据\u磁盘块解决了这个问题,如下所示:
resource "azurerm_virtual_machine" "database" {
name = "${var.prefix}-vm"
location = "${azurerm_resource_group.main.location}"
resource_group_name = "${azurerm_resource_group.main.name}"
network_interface_ids = ["${azurerm_network_interface.main.id}"]
vm_size = "Standard_E16s_v3"
delete_os_disk_on_termination = true
delete_data_disks_on_termination = true
storage_image_reference {
id = "/subscriptions/ABC/resourceGroups/XYZ/providers/Microsoft.Compute/images/CUSTOM-IMAGE"
}
#-------------------------------------------------------------------
# Explicit Data Disk configuration starts here
#-------------------------------------------------------------------
storage_data_disk {
name = "home-disk"
managed_disk_type = "Premium_LRS"
disk_size_gb = 100
create_option = "FromImage"
lun = 0
}
storage_data_disk {
name = "u01-disk"
managed_disk_type = "Premium_LRS"
disk_size_gb = 200
create_option = "FromImage"
lun = 1
}
storage_data_disk {
name = "backup-disk-0"
managed_disk_type = "Premium_LRS"
disk_size_gb = 1023
create_option = "FromImage"
lun = 2
}
#-------------------------------------------------------------------
# Skipped 12 disks ...
#-------------------------------------------------------------------
storage_data_disk {
name = "data-disk-9"
managed_disk_type = "Premium_LRS"
disk_size_gb = 512
create_option = "FromImage"
lun = 15
}
#-------------------------------------------------------------------
# Explicit Data Disk configuration ends here
#-------------------------------------------------------------------
storage_os_disk {
name = "${var.prefix}-os-disk"
create_option = "FromImage"
managed_disk_type = "Premium_LRS"
}
os_profile {
computer_name = "hostname"
admin_username = "testadmin"
admin_password = "Password1234!"
}
os_profile_linux_config {
disable_password_authentication = false
}
}
这是可行的,所有数据磁盘现在都创建为Premium_SSD,但这种解决方案感觉是错误的,因为它必须始终与源映像保持完全同步。如果准备该映像的团队决定添加/删除磁盘或更改其中一个磁盘的大小,则该更改必须反映在我的TF模板中
有趣的是,当使用Azure Portal UI从同一映像创建新VM时,所有数据磁盘都被创建为Premium\u SSD。我不必配置它们,甚至不知道映像中定义了多少数据磁盘或它们的大小。但当我使用Terraform时,所有数据磁盘都创建为标准的硬盘
有没有一种方法可以告诉Terraform/Azure provider使用哪种磁盘类型从自定义映像配置VM,而无需显式配置每个映像
谢谢大家! 不幸的是,在通过Terraform创建Azure VM时,确定磁盘类型的方法正是您所指的方法。据我所知,这是地球上唯一的道路 要决定VM中所有磁盘的磁盘类型,应该有一个参数可供选择。在Azure Portal中,您可以为操作系统磁盘类型选择Premium SSD,然后VM将在Premium SSD中创建所有操作系统磁盘和数据磁盘 另外,当您通过Azure CLI从自定义映像创建VM时,有一个参数可供您设置磁盘类型:
--存储sku
。您可以输入Premium_LRS值,以在Premium SSD中创建所有磁盘。看
但不幸的是,您目前无法在Terraform中找到虚拟机的属性。也许你可以在Terraform社区中添加这个问题来改进它