你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure 中创建通用 VM 的旧版托管映像

适用于:✔️ Linux VM ✔️ Windows VM ✔️ 灵活规模集

重要

本文介绍较旧的托管映像技术。 对于最新的技术,建议客户使用 Azure Compute Gallery。 只有通过 Azure Compute Gallery,才支持所有新功能(如 ARM64、受信任启动和机密 VM)。  如果已有托管映像,可将其用作源并创建 Azure Compute Gallery 映像。  有关详细信息,请参阅将托管映像迁移到 Azure 计算库

在 Azure 中将 VM 标记为 generalized 后,无法重启 VM。

一个托管映像最多支持 20 个同时部署。 如果尝试从同一托管映像同时创建超过 20 个 VM,则可能会由于单个 VHD 的存储性能限制而导致预配超时。 若要同时创建 20 个以上的 VM,请使用为每 20 个并发 VM 部署配置 1 个副本的 Azure Compute Gallery(以前称为共享映像库)。

有关托管映像如何计费的信息,请参阅托管磁盘定价

先决条件

需要通用化 VM 才能创建映像。

CLI:创建 VM 的旧版托管映像

现在,使用 az image create 创建 VM 托管映像。 以下示例使用名为 myVM 的 VM 资源在名为 myResourceGroup 的资源组中创建名为 myImage 的映像 。

az image create \
   --resource-group myResourceGroup \
   --name myImage --source myVM

注意

该映像在与源 VM 相同的资源组中创建。 可以在订阅内的任何资源组中从此映像创建虚拟机。 从管理角度来看,你可能希望为 VM 资源和映像创建特定的资源组。

如果要捕获第 2 代 VM 的映像,请使用 --hyper-v-generation V2 参数。 有关详细信息,请参阅第 2 代 VM

如果希望将映像存储在具有区域复原能力的存储中,需要在支持可用性区域的区域中创建该快照并包括 --zone-resilient true 参数。

此命令返回描述 VM 映像的 JSON。 保存此输出以供日后参考。

PowerShell:创建 VM 的旧版托管映像

直接从 VM 创建映像,可确保映像包含所有与该 VM 关联的磁盘,包括 OS 磁盘和任何数据磁盘。 本示例演示如何从使用托管磁盘的 VM 创建托管映像。

在开始之前,请确保有最新版本的 Azure PowerShell 模块。 若要查找版本,请在 PowerShell 中运行 Get-Module -ListAvailable Az。 如需升级,请参阅使用 PowerShellGet 在 Windows 上安装 Azure PowerShell。 如果在本地运行 PowerShell,则运行 Connect-AzAccount 以创建与 Azure 的连接。

注意

如果希望将映像存储在具有区域冗余能力的存储中,需要在支持可用性区域的区域中创建该映像并在映像配置中包括 -ZoneResilient 参数(New-AzImageConfig 命令)。

若要创建 VM 映像,请遵循下列步骤:

  1. 创建一些变量。

    $vmName = "myVM"
    $rgName = "myResourceGroup"
    $location = "EastUS"
    $imageName = "myImage"
    
  2. 确保 VM 已解除分配。

    Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
    
  3. 将虚拟机的状态设置为“通用化”。

    Set-AzVm -ResourceGroupName $rgName -Name $vmName -Generalized
    
  4. 获取虚拟机。

    $vm = Get-AzVM -Name $vmName -ResourceGroupName $rgName
    
  5. 创建映像配置。

    $image = New-AzImageConfig -Location $location -SourceVirtualMachineId $vm.Id 
    
  6. 创建映像。

    New-AzImage -Image $image -ImageName $imageName -ResourceGroupName $rgName
    

PowerShell:从托管磁盘创建旧版托管映像

如果仅想创建 OS 磁盘的映像,则将托管磁盘 ID 指定为 OS 磁盘:

  1. 创建一些变量。

    $vmName = "myVM"
    $rgName = "myResourceGroup"
    $location = "EastUS"
    $imageName = "myImage"
    
  2. 获取 VM。

    $vm = Get-AzVm -Name $vmName -ResourceGroupName $rgName
    
  3. 获取托管磁盘的 ID。

    $diskID = $vm.StorageProfile.OsDisk.ManagedDisk.Id
    
  4. 创建映像配置。

    $imageConfig = New-AzImageConfig -Location $location
    $imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsState Generalized -OsType Windows -ManagedDiskId $diskID
    
  5. 创建映像。

    New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
    

PowerShell:从快照创建旧版托管映像

通过执行以下步骤,可以从通用 VM 的快照创建托管映像:

  1. 创建一些变量。

    $rgName = "myResourceGroup"
    $location = "EastUS"
    $snapshotName = "mySnapshot"
    $imageName = "myImage"
    
  2. 获取快照。

    $snapshot = Get-AzSnapshot -ResourceGroupName $rgName -SnapshotName $snapshotName
    
  3. 创建映像配置。

    $imageConfig = New-AzImageConfig -Location $location
    $imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsState Generalized -OsType Windows -SnapshotId $snapshot.Id
    
  4. 创建映像。

    New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
    

PowerShell:从使用存储帐户的 VM 创建旧版托管映像

若要从不使用托管磁盘的 VM 创建托管映像,需要存储帐户中 OS VHD 的 URI,其格式如下: https://mystorageaccount.blob.core.windows.net/vhdcontainer/vhdfilename.vhd。 在本示例中,VHD 位于名为 vhdcontainer 的容器中的 mystorageaccount 中,且 VHD 文件名为 vhdfilename.vhd。

  1. 创建一些变量。

    $vmName = "myVM"
    $rgName = "myResourceGroup"
    $location = "EastUS"
    $imageName = "myImage"
    $osVhdUri = "https://mystorageaccount.blob.core.windows.net/vhdcontainer/vhdfilename.vhd"
    
  2. 停止/解除分配 VM。

    Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
    
  3. 将 VM 标记为通用。

    Set-AzVm -ResourceGroupName $rgName -Name $vmName -Generalized    
    
  4. 使用通用化的 OS VHD 创建映像。

    $imageConfig = New-AzImageConfig -Location $location
    $imageConfig = Set-AzImageOsDisk -Image $imageConfig -OsType Windows -OsState Generalized -BlobUri $osVhdUri
    $image = New-AzImage -ImageName $imageName -ResourceGroupName $rgName -Image $imageConfig
    

CLI:从旧版托管映像创建 VM

使用通过 az vm create 创建的映像来创建 VM。 以下示例从名为 myImage 的映像创建名为 myVMDeployed 的 VM 。

az vm create \
   --resource-group myResourceGroup \
   --name myVMDeployed \
   --image myImage\
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

CLI:从旧托管映像在另一个资源组中创建 VM

可在订阅内的任何资源组中根据映像创建 VM。 要在与映像不同的资源组中创建 VM,请指定映像的完整资源 ID。 使用 az image list 查看映像列表。 输出类似于以下示例。

"id": "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/images/myImage",
   "location": "westus",
   "name": "myImage",

以下示例使用 az vm create,通过指定映像资源 ID,在与源映像不同的资源组中创建 VM。

az vm create \
   --resource-group myOtherResourceGroup \
   --name myOtherVMDeployed \
   --image "/subscriptions/guid/resourceGroups/MYRESOURCEGROUP/providers/Microsoft.Compute/images/myImage" \
   --admin-username azureuser \
   --ssh-key-value ~/.ssh/id_rsa.pub

门户:从旧版托管映像创建 VM

  1. 转到 Azure 门户查找托管映像。 搜索并选择“映像”。
  2. 从列表中选择需要使用的映像。 随即打开映像“概述”页。
  3. 从菜单中选择“创建 VM”。
  4. 输入虚拟机信息。 在此处输入的用户名和密码将用来登录到虚拟机。 完成后选择“确定”。 可以在现有资源组中创建新的 VM,或者选择“新建”创建一个新的资源组用于存储 VM。
  5. 为 VM 选择大小。 若要查看更多的大小,请选择“全部查看”或更改“支持的磁盘类型”筛选器。
  6. 在“设置”下,根据需要进行更改并选择“确定” 。
  7. 在摘要页上,应该可以看见你的映像名称作为“专用映像”列出。 选择“确定”以启动虚拟机部署。

PowerShell:从旧版托管映像创建 VM

可以使用 PowerShell 通过使用 New-AzVm cmdlet 的简化参数集来基于映像创建 VM。 该映像需要位于你要在其中创建 VM 的同一资源组中。

New-AzVm 的简化参数集仅要求提供名称、资源组和映像名称便可基于映像创建 VM。 New-AzVm 将使用 -Name 参数的值作为它自动创建的所有资源的名称。 在此示例中,我们为每个资源提供更详细的名称,但让 cmdlet 自动创建这些资源。 你还可以提前创建资源(例如虚拟网络)并将名称传递给 cmdlet。 如果 New-AzVm 可以通过名称找到现有资源,就会使用现有资源。

以下示例在“myResourceGroup”资源组中从名为“myImage”的映像创建名为“myVMFromImage”的 VM。

New-AzVm `
    -ResourceGroupName "myResourceGroup" `
    -Name "myVMfromImage" `
    -ImageName "myImage" `
    -Location "East US" `
    -VirtualNetworkName "myImageVnet" `
    -SubnetName "myImageSubnet" `
    -SecurityGroupName "myImageNSG" `
    -PublicIpAddressName "myImagePIP" 

后续步骤