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

注意

本文引用了 CentOS,这是一个接近生命周期结束 (EOL) 状态的 Linux 发行版。 请相应地考虑你的使用和规划。

适用于:✔️ Linux VM ✔️ Windows 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 提供了多个预定义的映像别名,使资源创建过程更简单。 Windows 或 Linux 操作系统的资源有不同的映像。 多个 Powershell cmdlet(如 New-AzVMNew-AzVmss)允许输入别名作为参数。 例如:

$rgname = <Resource Group Name>
$location = <Azure Region>
$vmName = "v" + $rgname
$domainNameLabel = "d" + $rgname
$securePassword = <Password> | ConvertTo-SecureString -AsPlainText -Force
$username = <Username>
$credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)
New-AzVM -ResourceGroupName $rgname -Location $location -Name $vmName -image UbuntuLTS -Credential $credential -DomainNameLabel $domainNameLabel

Linux 映像别名及其详细信息如下:

Alias                     Architecture    Offer                         Publisher               Sku                                 Urn                                                                            Version
-----------------------   --------------  ----------------------------  ----------------------  ----------------------------------  ------------------------------------------------------------------------------ ---------
CentOS                    x64             CentOS                        OpenLogic               7.5                                 OpenLogic:CentOS:7.5:latest                                                    latest
Debian11                  x64             Debian-11                     Debian                  11-backports-gen2                   Debian:debian-11:11-backports-gen2:latest                                      latest
Debian10                  x64             Debian-10                     Debian                  10                                  Debian:debian-10:10:latest                                                     latest
OpenSuseLeap154Gen2       x64             opensuse-leap-15-4            SUSE                    gen2                                SUSE:opensuse-leap-15-4:gen2:latest                                            latest
SLES                      x64             sles-15-sp3                   SUSE                    gen2                                SUSE:sles-15-sp3:gen2:latest                                                   latest
UbuntuLTS                 x64             UbuntuServer                  Canonical               16.04-LTS                           Canonical:UbuntuServer:16.04-LTS:latest                                        latest

Windows 映像别名及其详细信息如下:

Alias                   Architecture    Offer                         Publisher               Sku                                 Urn                                                                              Version
----------------------- --------------  ----------------------------  ----------------------  ----------------------------------  ------------------------------------------------------------------------------   ---------
Win2022Datacenter       x64             WindowsServer                 MicrosoftWindowsServer  2022-Datacenter                     MicrosoftWindowsServer:WindowsServer:2022-Datacenter:latest                      latest
Win2022AzureEditionCore x64             WindowsServer                 MicrosoftWindowsServer  2022-datacenter-azure-edition-core  MicrosoftWindowsServer:WindowsServer:2022-datacenter-azure-edition-core:latest   latest
Win10                   x64             Windows                       MicrosoftVisualStudio   Windows-10-N-x64                    MicrosoftVisualStudio:Windows:Windows-10-N-x64:latest                            latest
Win2019Datacenter       x64             WindowsServer                 MicrosoftWindowsServer  2019-Datacenter                     MicrosoftWindowsServer:WindowsServer:2019-Datacenter:latest                      latest
Win2016Datacenter       x64             WindowsServer                 MicrosoftWindowsServer  2016-Datacenter                     MicrosoftWindowsServer:WindowsServer:2016-Datacenter:latest                      latest
Win2012R2Datacenter     x64             WindowsServer                 MicrosoftWindowsServer  2012-R2-Datacenter                  MicrosoftWindowsServer:WindowsServer:2012-R2-Datacenter:latest                   latest
Win2012Datacenter       x64             WindowsServer                 MicrosoftWindowsServer  2012-Datacenter                     MicrosoftWindowsServer:WindowsServer:2012-Datacenter:latest                      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 Compute Gallery(先前称为“共享映像库”)创建自定义图像,请参阅在创建图像时提供 Azure 市场购买计划信息