在 Azure 中建立一般化 VM 的舊版受控映像

重要

本文涵蓋舊版受控映像技術。 如需最新技術,建議客戶使用 Azure Compute Gallery。 所有新功能 (例如 ARM64、可信啟動和機密 VM) 僅能透過 Azure Compute Gallery 來支援。 如果您擁有現有的受控映像,則可將其作為來源並建立 Azure Compute Gallery 映像。 如需詳細資訊,請參閱建立映像定義和映像版本

一旦您在 Azure 中將 VM 標示為 generalized,就無法重新啟動 VM。

一個受控映像最多可支援 20 個同時部署。 嘗試從相同的受控映像同時建立 20 個以上的 VM 時,因為單一 VHD 的儲存體效能限制之故,可能會導致佈建逾時。 若要同時建立 20 個以上的 VM,請使用 Azure Compute Gallery (先前稱為共用映像資源庫) 中設定為每 20 個並行虛擬機器部署 1 個複本的映像。

如需受控映像計費方式的相關資訊,請參閱受控磁碟定價

必要條件

  • 您需要一般化 VM 才能建立映像。

CLI:建立 VM 的舊版受控映像

使用 az image create 建立 VM 的受控映像。 下列範例會使用名為 myVM 的 VM 資源,在 myResourceGroup 資源群組中建立名為 myImage 的映像。

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

Note

The image is created in the same resource group as your source VM. You can create VMs in any resource group within your subscription from this image. From a management perspective, you may wish to create a specific resource group for your VM resources and images.

If you are capturing an image of a generation 2 VM, also use the --hyper-v-generation V2 parameter. for more information, see Generation 2 VMs.

If you would like to store your image in zone-resilient storage, you need to create it in a region that supports availability zones and include the --zone-resilient true parameter.

This command returns JSON that describes the VM image. Save this output for later reference.

PowerShell:建立 VM 的舊版受控映像

直接從 VM 建立映像,可確保映像包含 VM 的所有相關磁碟,包括 OS 磁碟與任何資料磁碟。 此範例示範如何從使用受控磁碟的 VM 建立受控映像。

在您開始之前,請確定您擁有最新版本的 Azure PowerShell 模組。 若要尋找版本,請在 PowerShell 中執行 Get-Module -ListAvailable Az。 若要升級,請參閱使用 PowerShellGet 在 Windows 上 安裝 Azure PowerShell。 如果您在本機執行 PowerShell,請執行 Connect-AzAccount 以建立與 Azure 的連線。

注意

如果您想要將映像儲存於區域備援的儲存體中,則需要在支援可用性區域且在映像設定 (New-AzImageConfig 命令) 中包含 -ZoneResilient 參數的區域中建立它。

若要建立 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. 建立映像。

    $imageName -ResourceGroupName $rgName
    

PowerShell:從受控磁碟建立舊版受控映射

若只要為 OS 磁碟建立映像,請將受控磁碟識別碼指定為 OS 磁碟:

  1. 建立一些變數。

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

    $vm = Get-AzVm -Name $vmName -ResourceGroupName $rgName
    
  3. 取得受控磁碟的識別碼。

    $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,請指定您映像的完整資源識別碼。 使用 az image list 來檢視映像清單。 輸出類似於下列範例:

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

下列範例藉由指定映像資源識別碼,進而使用 az vm create 在與來源映像不同的資源群組中建立 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

在 Azure 中建立 VM:在入口網站中尋找映像、選擇 [建立 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" 

後續步驟