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

使用PowerShell或Terraform将Compute Gallery接入DevTest Labs并启动VM

问题1:通过PowerShell/Terraform将Azure Compute Gallery接入DevTest Labs

手动接入位置说明

手动操作路径:DevTest Labs实例 → 左侧菜单「配置和策略」→「共享映像库」→ 点击「添加」选择目标Compute Gallery完成接入。

PowerShell实现脚本

使用Az PowerShell模块更新DevTest Lab的共享映像库配置:

# 配置参数
$subscriptionId = "你的订阅ID"
$resourceGroupName = "DevTest Lab所在资源组名称"
$labName = "目标DevTest Lab名称"
$galleryResourceId = "/subscriptions/$subscriptionId/resourceGroups/Gallery所在资源组名称/providers/Microsoft.Compute/galleries/你的Gallery名称"

# 切换到目标订阅
Set-AzContext -Subscription $subscriptionId

# 获取Lab资源对象
$labResource = Get-AzResource -ResourceType "Microsoft.DevTestLab/labs" `
    -ResourceGroupName $resourceGroupName `
    -ResourceName $labName

# 检查Gallery是否已接入,未接入则添加
$sharedGalleries = $labResource.Properties.sharedGalleryIds
if ($sharedGalleries -notcontains $galleryResourceId) {
    $sharedGalleries += $galleryResourceId
    $labResource.Properties.sharedGalleryIds = $sharedGalleries
    # 更新Lab配置
    Set-AzResource -ResourceId $labResource.ResourceId `
        -Properties $labResource.Properties `
        -Force
}

Terraform实现配置

通过azurerm_devtest_lab资源配置共享映像库,支持新创建Lab或更新已有Lab:

terraform {
  required_providers {
    azurerm = {
      source  = "hashicorp/azurerm"
      version = ">= 3.0.0"
    }
  }
}

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "lab_rg" {
  name     = "lab-resource-group"
  location = "East US"
}

# 新创建DevTest Lab并接入Gallery
resource "azurerm_devtest_lab" "example_lab" {
  name                = "example-devtest-lab"
  location            = azurerm_resource_group.lab_rg.location
  resource_group_name = azurerm_resource_group.lab_rg.name

  # 接入目标Compute Gallery
  shared_gallery_ids = [
    "/subscriptions/你的订阅ID/resourceGroups/gallery-resource-group/providers/Microsoft.Compute/galleries/your-gallery-name"
  ]
}

# 如果是更新已有Lab,使用data块获取后修改
data "azurerm_devtest_lab" "existing_lab" {
  name                = "existing-devtest-lab"
  resource_group_name = "existing-lab-resource-group"
}

resource "azurerm_devtest_lab" "updated_lab" {
  name                = data.azurerm_devtest_lab.existing_lab.name
  location            = data.azurerm_devtest_lab.existing_lab.location
  resource_group_name = data.azurerm_devtest_lab.existing_lab.resource_group_name

  # 保留原有配置并添加Gallery
  shared_gallery_ids = concat(
    data.azurerm_devtest_lab.existing_lab.shared_gallery_ids,
    ["/subscriptions/你的订阅ID/resourceGroups/gallery-resource-group/providers/Microsoft.Compute/galleries/your-gallery-name"]
  )
}

问题2:已解决 - PowerShell创建VM时"policyviolated"错误

错误原因

官方市场镜像脚本使用的publisher/offer/sku参数组合仅适用于Azure市场镜像,不适用于Compute Gallery中的自定义镜像,需改用镜像的完整资源ID指定。

解决脚本示例

修改官方脚本中镜像引用部分,使用Gallery镜像的资源ID:

# 配置参数
$subscriptionId = "你的订阅ID"
$resourceGroupName = "DevTest Lab所在资源组名称"
$labName = "目标DevTest Lab名称"
$vmName = "新VM名称"
$galleryImageId = "/subscriptions/$subscriptionId/resourceGroups/Gallery所在资源组名称/providers/Microsoft.Compute/galleries/你的Gallery名称/images/镜像名称/versions/版本号"

# 切换订阅
Set-AzContext -Subscription $subscriptionId

# 构建VM资源ID
$labVmResourceId = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.DevTestLab/labs/$labName/virtualmachines/$vmName"

# 构建VM配置属性,重点修改镜像引用
$labVmProperties = @{
    "location" = "East US"
    "properties" = @{
        "size" = "Standard_D2s_v3"
        "userName" = "adminuser"
        "password" = "P@ssw0rd123!"
        "storageProfile" = @{
            "osDisk" = @{
                "imageReference" = @{
                    "id" = $galleryImageId  # 使用Gallery镜像资源ID
                }
            }
        }
        "artifacts" = @()
        "allowClaim" = $false
    }
}

# 创建VM
New-AzResource -ResourceId $labVmResourceId -Properties $labVmProperties -Force

内容的提问来源于stack exchange,提问作者Patrick Sun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:50:40