在 Azure Compute Gallery 中儲存和共用映像

適用於: ✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集 ✔️ 統一擴展集

根據映像的建立方式,映像可能是完整 VM (包括任何連結的資料磁碟) 或僅含 OS 磁碟的複本。 當您從映像建立 VM 時,映像中的 VHD 複本用於為新的 VM 建立磁碟。 映像會保留在儲存體中,而且可以一再用來建立新的 VM。

如果您有大量映像需要維護,而且想要讓整個公司使用,您可以使用 Azure Compute Gallery 作為存放庫。

使用資源庫來儲存映像時會建立多種資源類型:

資源 描述
影像來源 此資源可用在資源庫中建立映像版本。 映像來源可以是一般化或特殊化的現有 Azure VM、受控映像、快照集、VHD 或另一個資源庫中的映像版本。
資源庫 與 Azure Marketplace 一樣,資源庫是用於管理和共用映像及其他資源的存放庫,但您可以控制誰能夠存取。
映像定義 映像定義在資源庫內建立,並提供映像的相關資訊及利用映像建立 VM 時的任何需求。 這包括映像是 Windows 還是 Linux、版本資訊以及最小和最大的記憶體需求。 這是映像類型的定義。
映像版本 映像版本是在使用資源庫時用來建立 VM 的項目。 您可以視需要針對您的環境擁有多個版本的映像。 和受控映像一樣,當您使用映像版本來建立 VM 時,系統會使用映像版本來建立 VM 的新磁碟。 映像版本可以使用數次。

顯示如何在資源庫中有多個映像版本的圖形

映像定義

映像定義是映像版本的邏輯分組。 映像定義會保存映像建立原因的相關資訊,也包含映像中繼資料,例如適用於什麼作業系統、支援的功能以及有關使用映像的其他資訊。 映像定義就像是所有關於建立特定映像詳細資料的計畫。 並非從映像定義部署 VM,而是從定義建立的映像版本部署 VM。

每個映像定義都有三個參數,組合使用:發行者供應項目SKU。 這些項目是用來尋找特定的映像定義。 不同的映像定義之間可以擁有一或兩個相同的值,但不能三個值都相同。 例如,以下為三個映像定義以及其值:

映像定義 發行者 供應項目 Sku
myImage1 Contoso Finance 後端
myImage2 Contoso Finance 前端
myImage3 測試 Finance 前端

這三全都有唯一的值組。 格式類似於您目前可以如何在 Azure PowerShell 中針對 Azure Marketplace 映像指定發行者、供應項目和 SKU,以取得最新版本的 Marketplace 映像。 每個映像定義都需要這些值的唯一值組。

下列參數會決定其可以包含哪些類型的映像版本:

  • 作業系統狀態 - 您可以將 OS 狀態設定為一般化或特殊化。 這是必要欄位。
  • 作業系統 - 可以是 Windows 或 Linux。 這是必要欄位。
  • Hyper-V 世代 - 指定映像是從第 1 代還是第 2 代 Hyper-V VHD 建立。 預設值為第 1 代。

映像定義包含映像的中繼資料,以允許群組支援相同功能、計劃、OS 狀態、OS 類型及其他的映像。 以下是可在映像定義上設定的其他參數,讓您可以更輕鬆地追蹤您的資源:

  • 描述 - 使用描述以提供有關映像定義為何存在的詳細資訊。 例如,您的前端伺服器可能會有預先安裝應用程式的映像定義。

  • EULA - 可用來指向映像定義特有的使用者授權合約。

  • 隱私權聲明和版本資訊 - 將版本資訊和隱私權聲明儲存在 Azure 儲存體中,並提供 URI 供您作為映像定義的一部分來存取這些聲明。

  • 生命週期結束日期 - 針對映像定義中的所有映像版本,建立之後不得使用映像的預設日期。 生命週期結束日期為參考性;使用者仍然可以從超過生命週期結束日期的映像和版本建立 VM。

  • 標記 - 您可以在建立映像定義時新增標記。 如需標記的詳細資訊,請參閱使用標記來組織您的資源

  • vCPU 和記憶體最小值和最大值建議 - 如果您的映像有 vCPU 和記憶體建議,您可以將該資訊附加至映像定義。

  • 不允許的磁碟類型 - 您可以提供 VM 儲存體需求的相關資訊。 例如,如果映像不適合標準 HDD 磁碟,您可以將其新增至不允許清單。

  • Marketplace 映像的購買方案資訊 - -PurchasePlanPublisher-PurchasePlanName-PurchasePlanProduct。 如需購買方案資訊的詳細資訊,請參閱在 Azure Marketplace 中尋找映像在建立映像時提供 Azure Marketplace 購買方案資訊

  • 架構

  • 功能可讓您根據資源庫類型,指定映像上支援的其他功能和 SecurityType:

    功能 接受的值 定義 支援於
    IsHibernateSupported True、False 建立支援休眠的 VM。 私人、直接共用、社群
    IsAcceleratedNetworkSupported True、False 建立已啟用加速網路的 VM。 在映像定義上設為 True 時,擷取不支援加速網路的 VM 是不受支援的。 私人、直接共用、社群
    DiskControllerType ["SCSI", "NVMe"],["SCSI"] 將此設定為使用 SCSI 或 NVMe 磁碟類型。 NVMe VM 和磁碟只能在標記為支援 NVMe 的映像定義中擷取。 私人、直接共用、社群

    當您使用 features 參數指定 SecurityType 時,它會限制在 VM 上啟用的安全性功能。 某些類型會根據其儲存的資源庫類型而受到限制:

    SecurityType 定義 支援於
    ConfidentialVMSupported 這是不包含 VMGS Blob 的一般 Gen2 映像。 您可以從此映像類型建立 Gen2 VM 或機密 VM 私人、直接共用、社群
    機密 VM 只有機密 VM 可以從此映像類型建立 私人
    TrustedLaunchSupported 這是不包含 VMGS Blob 的一般 Gen2 映像。 您可以從此映像類型建立 Gen2 VM 或 TrustedLaunch VM。 私人、直接共用、社群
    TrustedLaunch 只有 TrustedLaunch VM 可以從此映像類型建立 私人
    TrustedLaunchAndConfidentialVmSupported 這是不包含 VMGS Blob 的一般 Gen2 映像。 Gen2 VM、TrustedLaunch VM 或 ConfidentialVM 可以從此映像類型建立。 私人、直接共用、社群

    如需詳細資訊,請參閱新增映像定義功能和 SecurityType 的 CLI 範例或 PowerShell 範例

    **只有可用的區域才支援 ConfidentialVM,您可以在這裡找到支援的區域。

映像版本

映像版本是您用來建立 VM 的版本。 您可以視需要針對您的環境擁有多個版本的映像。 當您使用映像版本來建立 VM 時,系統會使用映像版本來建立 VM 的新磁碟。 映像版本可以使用數次。

映像版本的屬性如下:

  • 版本號碼。 這會用作映像版本的名稱。 格式一律為:MajorVersion.MinorVersion.Patch。 若您指定在建立 VM 時使用最新,系統會依序根據最高的 MajorVersion、MinorVersion、Patch 來選擇最新的映像。
  • 來源。 來源可以是 VM、受控磁碟、快照集、受控映像或其他映像版本。
  • 生命週期結束日期。 指出映像版本的生命週期結束日期。 生命週期結束日期為參考性;使用者仍然可以從超過生命週期結束日期的版本建立 VM。

一般化和特殊化映像

Azure Compute Gallery 支援兩種作業系統狀態。 映像通常需要用來建立映像的 VM 已一般化,然後才會接受映像。 一般化是從 VM 中移除電腦和使用者特定資訊的程序。 針對 Linux,您可以使用 waagent-deprovision-deprovision+user 參數。 針對 Windows,會使用 Sysprep 工具。

特殊化 VM 尚未經過移除電腦特定資訊和帳戶的程序。 此外,從特殊化映像建立的 VM 沒有相關聯的 osProfile。 這表示除了一些優點以外,特殊化映像也會有一些限制。

  • 從特殊化映像建立的 VM 和擴展集,可以更快速地啟動並執行。 因為是從已通過第一次開機的來源所建立,所以從這些映像建立的 VM 開機更快速。
  • 可以用來登入 VM 的帳戶也可用於使用從該 VM 建立特殊化映像所建立的任何 VM。
  • VM 將會擁有從中取得映像的 VM 電腦名稱。 您應該變更電腦名稱以避免發生衝突。
  • osProfile 是使用 secrets 將一些敏感性資訊傳遞至 VM 的方式。 這可能會導致使用 KeyVault、WinRM 和其他使用 osProfilesecrets 功能的問題。 在某些情況下,您可以使用受管理的服務識別 (MSI) 來解決這些限制。

更新資源

建立資源庫資源之後,您可以做一些變更。 這些項目限制為:

Azure Compute Gallery:

  • 描述

映像定義:

  • 建議的 vCPU
  • 建議的記憶體
  • 描述
  • 生命週期結束日期
  • ReleaseNotes

映像版本:

  • 區域複本計數
  • 目標區域
  • 從最新項目中排除
  • 生命週期結束日期

共用

有三種主要的方式可在 Azure Compute Gallery 中共用映像,實際適用方式取決於您的共用對象:

共用對象: 人員 群組 Service Principal 特定訂用帳戶 (或) 租使用者中的所有使用者 與 Azure 中的所有使用者全體
RBAC 共用 Yes .是 .是 No
RBAC + 直接共用資源庫 Yes .是 .是 .是 No
RBAC + 社群資源庫 Yes .是 .是 Yes

建立 ACG 映射所需的 RBAC 權限:

ACG 映像可由來自各種來源的使用者建立,包括虛擬機、磁碟/快照集和 VHD。 本節概述建立 Azure 計算資源庫映像所需的各種用戶權力。 識別不需要許可權的識別將無法建立 ACG 映像。

來源類型 所需的權限
虛擬機器 寫入
磁碟/快照集 寫入
VHD 寫入 (listKeys)
受控映像 參閱
資源庫影像 參閱

如需有關 Azure 內建角色的其他資訊,請參閱我們的檔,以 授與 RBAC 許可權

淺層複寫

當您建立映像版本時,可以將複寫模式設定為淺層以進行開發和測試。 淺層複寫會略過複製影像,因此映像版本會更快就緒。 但是,這也表示您無法從該映像版本部署大量 VM。 這類似於舊版受控映像的運作方式。

如果您有不常部署的大型映像 (最多 32TB),則淺層複寫也很有用。 因為未複製來源映像,所以可使用較大的磁碟。 但是,它們無法同時用於部署大量 VM。

若要設定淺層複寫的映像,請使用 --replication-mode Shallow 搭配 Azure CLI。

SDK 支援

下列 SDK 支援建立 Azure Compute Gallery:

範本

您可以使用範本建立 Azure Compute Gallery 資源。 有數個快速入門範本可以使用:

常見問題集

若要在 Azure 入口網站上跨您可存取的訂用帳戶列出所有 Azure Compute Gallery 資源,請遵循下列步驟:

  1. 開啟 Azure 入口網站
  2. 向下捲動頁面,然後選取 [所有資源]
  3. 選取所有要列出其內含全部資源的訂用帳戶。
  4. 尋找 Azure Compute Gallery 類型的資源。

若要跨您具有權限的訂用帳戶列出所有 Azure Compute Gallery 資源,請在 Azure CLI 中使用下列命令:

   az account list -otsv --query "[].id" | xargs -n 1 az sig list --subscription

是。 根據您可能擁有的映像類型,案例共有 3 種。

案例 1:如果您擁有受控映像,則可以透過該映像建立映像定義和映像版本。 如需詳細資訊,請參閱建立映像定義和映像版本

情節 2:如果您擁有非受控映像,則可以透過該映像建立受控映像,繼而建立映像定義和映像版本。

情節 3:如果您在本機檔案系統擁有 VHD,則需要上傳 VHD 至受控映像,然後就可以從中建立映像定義和映像版本。

  • 如果是 Windows VM 的 VHD,請參閱上傳 VHD
  • 如果是 Linux VM 的 VHD,請參閱上傳 VHD

是否可以從特製化磁碟建立映像版本?

是,可以從特製化映像建立 VM。

否,無法將資源庫資源移至不同的訂用帳戶。 您可以將資源庫中的映像版本複寫到其他區域,或複製另一個資源庫中的映像

是否可以跨雲端 (例如,由 21Vianet 營運的 Azure、Azure 德國和 Azure Government 雲端) 複寫映像版本?

否,您無法跨雲端複寫映像版本。

是否可以跨訂用帳戶複寫映像版本?

否,但可以在訂用帳戶中跨區域複寫映像版本,然後透過 RBAC 在其他訂用帳戶中使用。

我可以跨 Microsoft Entra 租用戶共用映像版本嗎?

是,您可以使用 RBAC 來與租用戶之間的個人共用。 但是若要大規模共用,請參閱使用 PowerShellCLI「在 Azure 租用戶之間共用資源庫映像」。

跨目標區域複寫映像版本需要多久時間?

映像版本的複寫時間完全取決於映像大小以及作為其複寫目的地的區域數目。 不過,建議您最好讓映像小一點,並讓來源和目標區域近一點以獲得最佳結果。 您可以使用 -ReplicationStatus 旗標檢查複寫的狀態。

來源區域和目標區域有何差異?

來源區域是要建立映像版本的區域,目標區域則是要儲存映像版本複本的區域。 每個映像版本只能有一個來源區域。 此外,在建立映像版本時,請務必將來源區域位置傳遞作為其中一個目標區域。

如何在建立映像版本時指定來源區域?

在建立映像版本時,您可以使用 CLI 中的 --location 引數以及 PowerShell 中的 -Location 參數來指定來源區域。 確認用來作為基底映像以供建立映像版本的受控映像所在位置,與您想要在其中建立映像版本的位置相同。 此外,在建立映像版本時,請務必將來源區域位置傳遞作為其中一個目標區域。

如何指定要在每個區域中建立的映像版本複本數目?

有兩種方式可供指定要在每個區域中建立的映像版本複本數目:

  1. 區域複本計數,用以指定要在每個區域建立的複本數目。
  2. 一般複本計數,這是未指定區域複本計數時,每個區域計數的預設值。

若要指定區域複本計數,請傳遞位置及您要在該區域建立的複本數目:"South Central US=2"。

如果未對每個位置指定區域複本計數,則複本的預設數目會是所指定的一般複本計數。

若要在 Azure CLI 中指定一般複本計數,請在 az sig image-version create 命令中使用 --replica-count 引數。

是,可以的。 但建議您最好將資源群組、資源庫、映像定義和映像版本放在相同位置。

除了儲存映像版本的儲存體費用,以及將映像版本從來源區域複寫到目標區域的網路輸出費用,使用 Azure Compute Gallery 免費。

建立映像時應該使用哪個 API 版本?

若要利用資源庫、映像定義及映像版本,建議您使用 API 版本 2018-06-01。 區域備援儲存體 (ZRS) 需要 2019-03-01 版或更新版本。

從映像版本建立 VM 或虛擬機器擴展集應該使用哪個 API 版本?

對於使用映像版本來部署 VM 和虛擬機器擴展集,建議您使用 API 版本 2018-04-01 或更高版本。

是,只要映像之間的 OS 類型、Hyper-V 產生和資料磁碟配置相符,您可以將擴展集映像參考從受控映像更新為 Azure Compute Gallery 映像。

如何更新程式代碼以使用新的屬性,並確保在建立 VM 映像期間正確授與許可權?

針對 [虛擬機標識符] 字段,請使用 GallerySource(GalleryImageVersion 儲存體 Profile.GallerySource.VirtualMachineID 底下的 VirtualMachineId 字段。 新的屬性需要 .NET SDK 的 api-version 2023-07-03 或 1.4.0 版(或更新版本)

StorageProfile = new GalleryImageVersionStorageProfile()
            {
                GallerySource = new GalleryArtifactVersionFullSource()
                {
                    VirtualMachineId = new ResourceIdentifier(virtualMachineId),
                }
            },

針對 VHD 作為來源,請使用 [OSDiskImage] 或 [數據磁碟映射] 底下的 [資源庫來源] 下的 [儲存體 AccountID] 欄位(GalleryImageVersion 儲存體 Profile.OSDiskImage.GallerySource.儲存體AccountId)。 新的屬性需要 api-version 2022-03-03

StorageProfile = new GalleryImageVersionStorageProfile()
            {
                OSDiskImage = new GalleryOSDiskImage()
                {
                    GallerySource = new GalleryDiskImageSource()
                    {
                        StorageAccountId = new ResourceIdentifier(storageAccountId),
                        Uri = new Uri(blobUri),
                    }
                }
            },

疑難排解

如果您在資源庫資源上執行任何作業時遇到問題,請參閱疑難排解指南中的常見錯誤清單。

此外,您可以在 Q&A 使用 azure-virtual-machines-images 來張貼和標記問題。

下一步

了解如何使用 Azure Compute Gallery 來部署映像。