使用Terraform在Azure创建Rocky Linux虚拟机:镜像参数求助
在Azure上用Terraform创建Rocky Linux虚拟机的镜像参数问题解决
问题描述
我尝试用Terraform在Azure上创建Rocky Linux虚拟机,但配置storage_image_reference时遇到参数错误,当前配置如下:
storage_image_reference { publisher = "rocky-linux" offer = "rocky-linux" sku = "8" version = "latest" }
完整Terraform代码:
provider "azurerm" { features {} } variable "prefix" { default = "tfvmex" } resource "azurerm_resource_group" "example" { name = "${var.prefix}-resources" location = "West Europe" } resource "azurerm_virtual_network" "main" { name = "${var.prefix}-network" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } resource "azurerm_subnet" "internal" { name = "internal" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.main.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_network_interface" "main" { name = "${var.prefix}-nic" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name ip_configuration { name = "testconfiguration1" subnet_id = azurerm_subnet.internal.id private_ip_address_allocation = "Dynamic" } } resource "azurerm_virtual_machine" "main" { name = "${var.prefix}-vm" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name network_interface_ids = [azurerm_network_interface.main.id] vm_size = "Standard_DS1_v2" storage_image_reference { publisher = "rocky-linux" offer = "rocky-linux" sku = "8" version = "latest" } storage_os_disk { name = "${var.prefix}-osdisk" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "myrhelvm" admin_username = "rheladmin" admin_password = "Password1234!" } os_profile_linux_config { disable_password_authentication = false } tags = { environment = "staging" } }
正确的Rocky Linux镜像参数
Azure官方提供的Rocky Linux镜像参数核心修正点是offer字段,正确值为rockylinux,而非rocky-linux,同时sku需要指定具体的版本分支:
Rocky Linux 8 系列
storage_image_reference { publisher = "rocky-linux" offer = "rockylinux" sku = "8_8" # 可根据需求替换为8_7、8-gen2等对应版本SKU version = "latest" }
Rocky Linux 9 系列
storage_image_reference { publisher = "rocky-linux" offer = "rockylinux" sku = "9_2" # 可替换为9_1、9-gen2等对应版本SKU version = "latest" }
验证镜像参数的方法
可以通过Azure CLI查询指定区域内的可用Rocky Linux镜像参数,确保配置准确:
az vm image list --publisher rocky-linux --offer rockylinux --all --location westeurope
该命令会输出目标区域内所有Rocky Linux镜像的完整参数信息,包括publisher、offer、sku和version。
修改后的完整代码
将原代码中的storage_image_reference替换为正确参数(以Rocky Linux 8.8为例):
provider "azurerm" { features {} } variable "prefix" { default = "tfvmex" } resource "azurerm_resource_group" "example" { name = "${var.prefix}-resources" location = "West Europe" } resource "azurerm_virtual_network" "main" { name = "${var.prefix}-network" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name } resource "azurerm_subnet" "internal" { name = "internal" resource_group_name = azurerm_resource_group.example.name virtual_network_name = azurerm_virtual_network.main.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_network_interface" "main" { name = "${var.prefix}-nic" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name ip_configuration { name = "testconfiguration1" subnet_id = azurerm_subnet.internal.id private_ip_address_allocation = "Dynamic" } } resource "azurerm_virtual_machine" "main" { name = "${var.prefix}-vm" location = azurerm_resource_group.example.location resource_group_name = azurerm_resource_group.example.name network_interface_ids = [azurerm_network_interface.main.id] vm_size = "Standard_DS1_v2" # 修正后的镜像参数 storage_image_reference { publisher = "rocky-linux" offer = "rockylinux" sku = "8_8" version = "latest" } storage_os_disk { name = "${var.prefix}-osdisk" caching = "ReadWrite" create_option = "FromImage" managed_disk_type = "Standard_LRS" } os_profile { computer_name = "myrhelvm" admin_username = "rheladmin" admin_password = "Password1234!" } os_profile_linux_config { disable_password_authentication = false } tags = { environment = "staging" } }
内容的提问来源于stack exchange,提问作者Zaur Hasanov
相关产品推荐
相关产品推荐

