建立映像定義和映像版本
在此文章
警告
本文會參考 CentOS,這是生命週期結束 (EOL) 狀態的 Linux 發行版本。 請據以考慮您的使用和規劃。 如需詳細資訊,請參閱 CentOS 生命週期結束指導 。
Azure Compute Gallery (先前稱為共用映像庫) 可簡化整個組織的共用自訂映像。 自訂映像類似 Marketplace 映像,但您要自行建立它們。 您可以從 VM、VHD、快照集、受控映像或其他映像版本建立映像。
Azure Compute Gallery 可讓您與組織中的其他人、在區域內或跨區域、在 Microsoft Entra 租用戶內共用自訂 VM 映像,或使用社群資源庫 對公眾開放共用自訂 VM 映像。 選擇您要共用的映像、您要開放使用的區域,以及您要共用的對象。 您可以建立多個映像庫,以便根據邏輯來將映像分組。 許多新功能 (例如 ARM64、加速網路、TrustedVM 等) 僅透過 Azure Compute Gallery 支援,並不適用於受控映像。
Azure Compute Gallery 功能有多個資源類型:
資源
描述
影像來源
此資源可用在資源庫中建立映像版本 。 映像來源可以是現有的 Azure VM,其為一般化或特殊化 、受控映像、快照集,或另一個資源庫中的映像版本。
資源庫
和 Azure Marketplace 一樣,資源庫 是用於管理和共用映像與 VM 應用程式 的存放庫,但您可以控制哪些使用者能夠存取。
映像定義
映像定義會在資源庫內建立,並包含內部使用映像和需求的相關資訊。 這包括映像是 Windows 還是 Linux、版本資訊以及最小和最大的記憶體需求。 這是映像類型的定義。
映像版本
映像版本 是在使用資源庫時用來建立 VM 的項目。 您可以視需要針對您的環境擁有多個版本的映像。 和受控映像一樣,當您使用映像版本 來建立 VM 時,系統會使用映像版本來建立 VM 的新磁碟。 映像版本可以使用數次。
開始之前
若要完成本文,您必須有現有的 Azure Compute Gallery,以及您在 Azure 中所提供映像的來源。 映像來源可以是:
您訂用帳戶中的 VM。 您可以從特殊化和一般化 VM 擷取映像。
受控映像。
受控 OS 和資料磁碟。
OS 和資料磁碟 (在儲存體帳戶中以 VHD 的形式存在)。
相同映像庫中或相同訂用帳戶的另一個映像庫中的其他映像版本。
如果映像會包含資料磁碟,則資料磁碟大小不能超過 1 TB。
映像定義名稱可以由大寫或小寫字母、數字、點、虛線和句點組成。 若要深入了解您可以為映像定義指定哪些值,請參閱映像定義 。
映像版本允許的字元是數字及句點。 數字必須在 32 位元整數的範圍內。 格式:MajorVersion .MinorVersion .Patch 。
逐步完成本文之後,請視需要取代資源名稱。
如需一般化 映像,請參閱 OS 特定指引,再擷取映像:
如果您要使用社群資源庫 來共用映像,請務必在相同區域中建立資源庫、映像定義和映像版本。
當使用者搜尋社群資源庫的映像時,系統只會顯示最新版的映像。
重要
映像定義中的資訊可公開使用,例如您為發佈 、供項目應 和 SKU 提供的資訊。
建立映像
選擇下列選項來建立映像定義和映像版本:
若要在入口網站中從 VM 建立映像,請參閱擷取 VM 的映像 。
若要使用 VM 以外的來源建立映像,請遵循下列步驟。
前往 Azure 入口網站 ,再搜尋並選取 [Azure Compute Gallery] 。
從映像庫選取您要使用的映像。
在資源庫頁面上,於頁面頂端選取 [新增] ,再從下拉式清單中選取 [VM 映像定義] 。
在 [將新的映像定義新增至 Azure Compute Gallery] 頁面上的 [基本] 索引標籤中,選取 [區域] 。
針對 [映像定義名稱] ,輸入類似 myImageDefinition 的名稱。
針對 [作業系統] ,根據您的來源選取正確的選項。
針對 [VM 產生] ,根據您的來源選取選項。 在大多數情況下,這會是 [第 1 代] 。 如需詳細資訊,請參閱第 2 代 VM 的支援 。
針對 [作業系統狀態] ,根據您的來源選取選項。 如需詳細資訊,請參閱一般化和特殊化 。
針對 [發行者] ,輸入類似 myPublisher 的唯一名稱。
針對 [供應項目] ,輸入類似 myOffer 的唯一名稱。
針對 [SKU] ,輸入類似 mySKU 的唯一名稱。
在頁面底部,選取 [審核 + 建立] 。
在映像定義通過驗證之後,選取 [建立] 。
部署完成之後,請選取 [移至資源] 。
在映像定義的頁面中,於 [開始使用] 索引標籤上,選取 [建立版本] 。
在 [區域] 中,選取您想要建立映像的區域。 在某些情況下,來源必須位於映像建立所在的相同區域。 如果您在稍後的下拉式清單中沒看到來源,請嘗試變更映像的區域。 稍後隨時可將映像複寫至其他區域。
針對 [版本號碼] ,輸入類似 1.0.0 的數字。 映像版本名稱應遵循使用整數的 主要 .次要 .修補 格式。
在 [來源] 中,從下拉式清單中選取您用於來源的檔案類型。 如需每個來源類型的特定詳細資料,請參閱下表。
來源
其他欄位
磁碟或快照集
- 針對 [OS 磁碟] ,請從下拉式清單中選取磁碟或快照集。 - 若要新增資料磁碟,請輸入 LUN 號碼,然後從下拉式清單中選取資料磁碟。
映像版本
- 從下拉式清單中選取 [來源映像庫] 。 - 從下拉式清單中選取正確的映像定義。 - 從下拉式清單中選取您想要使用的現有映像版本。
受控映像
- 從下拉式清單中選取 [來源映像] 。 受控映像必須與您在 [執行個體詳細資料] 中所選擇的區域相同。
儲存體帳戶中的 VHD
選取 [瀏覽] 以選擇 VHD 的儲存體帳戶。
在 [從最新項目中排除] 中,保留預設值 [否] (除非您不想在使用 latest
而非版本號碼來建立 VM 時使用此版本)。
針對 [生命週期結束日期] ,從行事曆中選取您認為此版本應該停止使用的日期。
在 [複寫] 索引標籤中,從下拉式清單中選取儲存體類型。
設定 [預設複本計數] ,您可以針對所新增的每個區域覆寫此計數。
您需要複寫至來源區域,讓清單中的第一個複本會位於映像建立所在的區域。 您可以從下拉式清單中選取區域,並視需要調整複本計數,以新增更多複本。
當您完成時,選取 [檢閱 + 建立] 。 Azure 會驗證設定。
當映像版本通過驗證時,選取 [建立] 。
部署完成之後,請選取 [移至資源] 。
將映像複寫到所有目的地區域可能需要一些時間。
您也可以從入口網站擷取現有的 VM 來作為映像。 如需詳細資訊,請參閱在入口網站中建立 VM 的映像 。
映像定義會建立映像的邏輯群組。 並且可用來管理在其中建立的映像版本相關資訊。
使用 az sig image-definition create ,在映像庫中建立映像定義。 請確定您的映像定義是正確的類型。 如果您已將 VM (使用適用於 Linux 的 waagent -deprovision
,或適用於 Windows 的 Sysprep) 一般化 ,則應該使用 --os-state generalized
建立一般化映像定義。 如果您想要在不移除現有使用者帳戶的情況下使用 VM,請使用 --os-state specialized
建立特製化映像定義。
若要深入了解您可以為映像定義指定哪些參數,請參閱映像定義 。
在此範例中,映像定義會命名為 myImageDefinition ,而且適用於特製化 的 Linux OS 映像。 若要使用 Windows OS 建立映像的定義,請使用 --os-type Windows
。
az sig image-definition create \
--resource-group myGalleryRG \
--gallery-name myGallery \
--gallery-image-definition myImageDefinition \
--publisher myPublisher \
--offer myOffer \
--sku mySKU \
--os-type Linux \
--os-state specialized
注意
如果映像定義所包含的映像會源自第三方市集中的映像,則其方案資訊必須與第三方映像的方案資訊完全一樣。 在建立映像定義時,請新增 --plan-name
、--plan-product
和 --plan-publisher
以在映像定義中包含方案資訊。
建立映像版本
請使用 az sig image version create 來建立映像版本。
用於建立映像的語法會根據作為來源的項目而有所不同。 只要您只有一個 OS 來源,就可以混合來源類型。 您也可以讓每個資料磁碟有不同的來源。
來源
參數集
OS 磁碟:
使用 VM 識別碼的 VM
--managed-image <Resource ID of the VM>
受控映像或其他映像版本
--managed-image <Resource ID of the managed image or image version
快照集或受控磁碟
--os-snapshot <Resource ID of the snapshot or managed disk>
儲存體帳戶中的 VHD
--os-vhd-uri <URI> --os-vhd-storage-account <storage account name>
.
資料磁碟:
快照集或受控磁碟
--data-snapshots <Resource ID of the snapshot or managed disk> --data-snapshot-luns <LUN number>
儲存體帳戶中的 VHD
--data-vhds-sa <storageaccountname> --data-vhds-uris <URI> --data-vhds-luns <LUN number>
如需如何為映像指定不同來源的詳細範例,請參閱 az sig image-version create 範例 。
在下面的範例中,我們會從 VM 建立映像。 我們的映像版本是 1.0.0 ,而我們將使用區域備援儲存體,在「美國中西部」 區域中建立 2 個複本、在「美國中南部」 區域中建立 1 個複本,以及在「美國東部 2」 區域中建立 1 個複本。 複寫區域必須包含來源 VM 所在的區域。
在建立映像之前,最好先停止\解除配置 VM。
將此範例中 --managed-image
的值取代為 VM 識別碼。
az sig image-version create \
--resource-group myGalleryRG \
--gallery-name myGallery \
--gallery-image-definition myImageDefinition \
--gallery-image-version 1.0.0 \
--target-regions "westcentralus" "southcentralus=1" "eastus=1=standard_zrs" \
--replica-count 2 \
--managed-image "/subscriptions/<Subscription ID>/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM"
注意
您必須等候映像版本完全完成建立和複寫後,才能使用相同的受控映像來建立另一個映像版本。
建立映像版本時,您也可以藉由新增 --storage-account-type premium_lrs
,將映像儲存在「進階」儲存體,或新增 --storage-account-type standard_zrs
,將映像儲存在區域備援儲存體 。
映像定義會建立映像的邏輯群組。 在建立映像定義時,請確定其具有的資訊全都正確。 如果您將來源 VM 一般化 ,則請使用 -OsState generalized
來建立映像定義。 如果您未將來源一般化,則請使用 -OsState specialized
來建立映像定義。
若要深入了解您可以為映像定義指定哪些值,請參閱映像定義 。
使用 New-AzGalleryImageDefinition 建立映像定義。
在此範例中,映像定義會命名為 myImageDefinition ,而且適用於執行 Windows 的特殊化 VM。 若要使用 Linux 建立映像的定義,請使用 -OsType Linux
。
$imageDefinition = New-AzGalleryImageDefinition `
-GalleryName $gallery.Name `
-ResourceGroupName $gallery.ResourceGroupName `
-Location $gallery.Location `
-Name 'myImageDefinition' `
-OsState specialized `
-OsType Windows `
-Publisher 'myPublisher' `
-Offer 'myOffer' `
-Sku 'mySKU'
注意
如果映像定義所包含的映像會源自第三方映像,則其方案資訊必須與第三方映像的方案資訊完全一樣。 在建立映像定義時,請新增 -PurchasePlanName
、-PurchasePlanProduct
和 -PurchasePlanPublisher
以在映像定義中包含方案資訊。
建立映像版本
使用 New-AzGalleryImageVersion 來建立映像版本。
用於建立映像的語法會根據作為來源的項目而有所不同。
來源
參數集
OS 磁碟
使用 VM 識別碼的 VM
-SourceImageId <Resource ID of the VM>
受控映像或其他映像版本
-SourceImageId <Resource ID of the managed image or image version
快照集或受控磁碟
-OSDiskImage <Resource ID of the snapshot or managed disk>
資料磁碟
快照集或受控磁碟
-DataDiskImage @{Source = @{Id=<source_id>}; Lun=<LUN>; SizeInGB = <Size in GB>; HostCaching = <Caching> }
在下面的範例中,我們會從 VM 建立映像版本。 在建立映像之前,最好先使用 Stop-AzVM 停止\解除配置 VM。
在此範例中,映像版本為 1.0.0 ,且它會被複寫到「美國中西部」 和「美國中南部」 資料中心。 選擇要複寫的目標區域時,記得必須同時包含作為複寫目標的「來源」 區域。
$region1 = @{Name='South Central US';ReplicaCount=1}
$region2 = @{Name='East US';ReplicaCount=2}
$targetRegions = @($region1,$region2)
$job = $imageVersion = New-AzGalleryImageVersion `
-GalleryImageDefinitionName $imageDefinition.Name`
-GalleryImageVersionName '1.0.0' `
-GalleryName $gallery.Name `
-ResourceGroupName $gallery.ResourceGroupName `
-Location $gallery.Location `
-TargetRegion $targetRegions `
-SourceImageId $sourceVm.Id.ToString() `
-PublishingProfileEndOfLifeDate '2020-12-01' `
-asJob
將映像複寫到所有目標區域可能需要花上一點時間,因此我們已建立可追蹤進度的作業。 若要查看作業的進度,請輸入 $job.State
。
$job.State
注意
您必須等候映像版本完全完成建立和複寫後,才能使用相同的受控映像來建立另一個映像版本。
建立映像版本時,您也可以藉由新增 -StorageAccountType Premium_LRS
,將映像儲存在「進階」儲存體,或新增 -StorageAccountType Standard_ZRS
,將映像儲存在區域備援儲存體 。
使用 REST API 來建立映像定義
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryDefinitionName}?api-version=2019-12-01
{
"location": "eastus",
"properties": {
"hyperVGeneration": "V1",
"identifier": {
"offer": "myOffer",
"publisher": "myPublisher",
"sku": "mySKU"
},
"osState": "Specialized",
"osType": "Linux",
},
}
使用 REST API 來建立映像版本。 在此範例中,我們會從 VM 建立映像版本。 若要使用另一個來源,請傳入來源的資源識別碼 (例如,傳入 OS 磁碟快照集的識別碼)。
# @name imageVersion
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/galleries/{galleryName}/images/{galleryDefinitionName}/versions/{galleryImageVersionName}?api-version=2019-12-01
{
"location": "{region}",
"properties": {
"publishingProfile": {
"endOfLifeDate": "2024-12-02T00:00:00+00:00",
"replicaCount": 1,
"storageAccountType": "Standard_ZRS",
"targetRegions": [
{
"name": "eastus",
"regionalReplicaCount": 2,
"storageAccountType": "Standard_LRS",
},
{
"name": "westus2",
}
]
},
"storageProfile": {
"source": {
"id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}"
}
}
}
}
使用另一個租用戶中的來源映像,在一個租用戶中建立映像
在來源映像所在的訂用帳戶中,向使用者授與讀者權限。 使用者擁有來源映像的讀者權限後,請登入兩個帳戶 (來源和目標)。
您會需要來源映像的 tenantID
、用於儲存新映像的訂用帳戶 (目標) 的 subscriptionID
,以及來源映像的 resourceID
。 此外,您必須確定來源映像的區域或複本和目標區域相同。
# Set some variables
tenantID="<tenant ID for the source image>"
subID="<subscription ID where the image will be creted>"
sourceImageID="<resource ID of the source image>"
# Login to the subscription where the new image will be created
az login
# Log in to the tenant where the source image is available
az login --tenant $tenantID
# Log back in to the subscription where the image will be created and ensure subscription context is set
az login
az account set --subscription $subID
# Create the image
az sig image-version create `
--gallery-image-definition myImageDef `
--gallery-image-version 1.0.0 `
--gallery-name myGallery `
--resource-group myResourceGroup `
--image-version $sourceImageID
--location myLocation
# Set variables
$targetSubID = "<subscription ID for the target>"
$sourceTenantID = "<tenant ID where for the source image>"
$sourceImageID = "<resource ID of the source image>"
# Login to the tenant where the source image is published
Connect-AzAccount -Tenant $sourceTenantID -UseDeviceAuthentication
# Login to the subscription where the new image will be created and set the context
Connect-AzAccount -UseDeviceAuthentication -Subscription $targetSubID
Set-AzContext -Subscription $targetSubID
# Create the image version from another image version in a different tenant
New-AzGalleryImageVersion `
-ResourceGroupName myResourceGroup -GalleryName myGallery `
-GalleryImageDefinitionName myImageDef `
-Location "West US 2" `
-Name 1.0.0 `
-SourceImageId $sourceImageID
下一步
如需如何提供購買方案資訊的相關資訊,請參閱在建立映像時提供 Azure Marketplace 購買方案資訊 。