如何通过Terraform的azurerm_linux_virtual_machine指定Azure Linux VM的CPU和内存?
解决Azure Linux VM CPU和内存配置不生效的问题
你遇到的问题核心是:azurerm_linux_virtual_machine资源不存在cpu和memory这两个参数,所以你设置的这两个值会被Terraform直接忽略。Azure VM的CPU和内存配置是由VM实例大小(即size参数)决定的,具体分两种情况处理:
1. 使用预定义VM实例大小(常规场景)
Azure提供了大量预定义的VM实例大小,每个型号对应固定的CPU核心数和内存容量。比如你当前用的Standard_DS1_v2对应1vCPU、3.5GB内存。如果需要特定的CPU和内存,直接替换为符合需求的实例型号即可。
示例代码:
resource "azurerm_linux_virtual_machine" "my_terraform_vm" { name = local.conf.name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name network_interface_ids = [azurerm_network_interface.adopipe_terraform_nic.id] # 例如需要2vCPU、8GB内存,选择Standard_D2s_v3 size = "Standard_D2s_v3" }
2. 使用Flexible VM自定义CPU和内存(灵活场景)
如果需要在一定范围内自定义CPU和内存数量,可以使用Azure的Flexible VM类型。这类VM允许在对应实例型号的参数区间内调整vCPU和内存,需要配合flexible块配置,同时size必须指定支持Flex特性的实例型号(如Standard_D2ds_v5、Standard_E4ds_v5等)。
示例代码:
resource "azurerm_linux_virtual_machine" "my_terraform_vm" { name = local.conf.name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name network_interface_ids = [azurerm_network_interface.adopipe_terraform_nic.id] # 指定支持Flex特性的实例型号 size = "Standard_D2ds_v5" flexible { vcpus = local.conf.cpu memory_gb = local.conf.memory } }
注意:Flexible VM的CPU和内存调整有范围限制,不同实例型号的区间不同,需要确保你设置的
vcpus和memory_gb在对应型号允许的范围内。
内容的提问来源于stack exchange,提问作者Stack_IQ
相关产品推荐
相关产品推荐

