使用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
相关产品推荐
相关产品推荐

