使用 Azure PowerShell 查找并使用 Azure 市场 VM 映像

本文介绍如何使用 Azure PowerShell 在 Azure 市场中查找 VM 映像。 然后,可以在创建 VM 时指定市场映像和计划信息。

还可以使用 Azure 市场Azure CLI 浏览可用的映像和产品/服务。

术语

Azure 中的市场映像具有以下属性:

  • 发布者:创建映像的组织。 示例:Canonical、MicrosoftWindowsServer
  • 产品/服务:发布者创建的一组相关映像的名称。 示例:UbuntuServer、WindowsServer
  • SKU:产品/服务的实例,例如分发的主要版本。 示例:18.04-LTS、2019-Datacenter
  • 版本:映像 SKU 的版本号。

可以单独传递这些值,或将这些值作为映像 URN 传递,并将它们用冒号 (:) 隔开。 例如:发布者:产品/服务:SKU:版本 。 可将 URN 中的版本号替换为 latest,以使用最新版本的映像。

如果映像发布者提供附加许可条款和购买条款,则你必须接受这些条款才能使用映像。

列出映像

可以使用 PowerShell 缩小映像列表范围。 替换变量的值以满足你的需求。

  1. 使用 Get-AzVMImagePublisher 列出映像发布者。

    Connect-AzAccount -Environment AzureChinaCloud
    $locName="<location>"
    Get-AzVMImagePublisher -Location $locName | Select PublisherName
    
  2. 对于给定的发布者,请使用 Get-AzVMImageOffer 列出其产品/服务。

    $pubName="<publisher>"
    Get-AzVMImageOffer -Location $locName -PublisherName $pubName | Select Offer
    
  3. 对于给定的发布者和产品/服务,请使用 Get-AzVMImageSku 列出可用的 SKU。

    $offerName="<offer>"
    Get-AzVMImageSku -Location $locName -PublisherName $pubName -Offer $offerName | Select Skus
    
  4. 对于 SKU,请使用 Get-AzVMImage 列出映像的版本。

    $skuName="<SKU>"
    Get-AzVMImage -Location $locName -PublisherName $pubName -Offer $offerName -Sku $skuName | Select Version
    

    如果要使用最新的映像,而不是特定的较旧版本,也可以使用 latest

现在可以将所选发布者、产品/服务、SKU 和版本合并到 URN 中(由“:”分隔的值)。 使用 New-AzVM cmdlet 创建 VM 时,使用 -Image 参数传递此 URN。 还可以将 URN 中的版本号替换为 latest,以获取最新版本的映像。

如果使用资源管理器模板部署 VM,请在 imageReference 属性中单独设置映像参数。

查看购买计划属性

Azure 市场中的某些 VM 映像具有附加许可条款和购买条款,你必须接受这些条款,然后才能以编程方式部署这些映像。 对于每个订阅,都需要接受映像的条款。

若要查看映像的购买计划信息,请运行 Get-AzVMImage cmdlet。 如果输出中的 PurchasePlan 属性不是 null,则映像有条款,在以编程方式部署前需要接受该条款。

例如,Windows Server 2019 Datacenter 映像没有附加条款,因此,PurchasePlan 信息为 null

$version = "2019.0.20190115"
Get-AzVMImage -Location $locName -PublisherName $pubName -Offer $offerName -Skus $skuName -Version $version

输出将类似于以下内容:

Id               : /Subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Providers/Microsoft.Compute/Locations/chinanorth/Publishers/MicrosoftWindowsServer/ArtifactTypes/VMImage/Offers/WindowsServer/Skus/2016-Datacenter/Versions/2019.0.20190115
Location         : chinanorth
PublisherName    : MicrosoftWindowsServer
Offer            : WindowsServer
Skus             : 2019-Datacenter
Version          : 2019.0.20190115
FilterExpression :
Name             : 2019.0.20190115
OSDiskImage      : {
                     "operatingSystem": "Windows"
                   }
PurchasePlan     : null
DataDiskImages   : []

从市场映像创建新 VM

如果已有要使用的映像的相关信息,可以将该信息传递到 Set-AzVMSourceImage cmdlet,以将映像信息添加到 VM 配置。 请参阅后续部分,了解如何搜索和列出市场中可用的映像。

某些付费映像还要求使用 Set-AzVMPlan 提供购买计划信息。

...

$vmConfig = New-AzVMConfig -VMName "myVM" -VMSize Standard_D1

# Set the Marketplace image
$offerName = "windows-data-science-vm"
$skuName = "windows2016"
$version = "19.01.14"
$vmConfig = Set-AzVMSourceImage -VM $vmConfig -PublisherName $publisherName -Offer $offerName -Skus $skuName -Version $version

# Set the Marketplace plan information, if needed
$publisherName = "microsoft-ads"
$productName = "windows-data-science-vm"
$planName = "windows2016"
$vmConfig = Set-AzVMPlan -VM $vmConfig -Publisher $publisherName -Product $productName -Name $planName

...

然后将 VM 配置与其他配置对象一起传递给 New-AzVM cmdlet。 有关将 VM 配置与 PowerShell 配合使用的详细示例,请参阅此脚本

使用购买计划信息从 VHD 创建新的 VM

如果你有使用 Azure 市场映像创建的现有 VHD,则在从该 VHD 创建新的 VM 时,可能需要提供购买计划信息。

如果你仍有原始 VM 或从同一映像创建的其他 VM,则可以使用 Get-AzVM 从其中获取计划名称、发布者和产品信息。 此示例获取 myResourceGroup 资源组中名为 myVM 的 VM,然后显示购买计划信息 。

$vm = Get-azvm `
   -ResourceGroupName myResourceGroup `
   -Name myVM
$vm.Plan

如果在删除原始 VM 之前未获得计划信息,则可提交支持请求。 他们将需要 VM 名称、订阅 ID 和删除操作的时间戳。

若要使用 VHD 创建 VM,请参阅从专用 VHD 创建 VM 一文,并添加一行,使用 Set-AzVMPlan 将计划信息添加到 VM 配置,如下所示:

$vmConfig = Set-AzVMPlan `
   -VM $vmConfig `
   -Publisher "publisherName" `
   -Product "productName" `
   -Name "planName"

后续步骤

若要使用基本映像信息通过 New-AzVM cmdlet 快速创建虚拟机,请参阅使用 PowerShell 创建 Windows 虚拟机

有关使用 Azure 市场映像在共享映像库中创建自定义映像的更多信息,请参阅在创建映像时提供 Azure 市场购买计划信息