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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 08:52:32