教學課程:使用 Azure CLI 建立及使用虛擬機器擴展集的自訂映像
當您建立擴展集時,您會指定部署 VM 執行個體時所要使用的映像。 若要減少部署 VM 執行個體後的工作數量,您可以使用自訂的 VM 映像。 此自訂 VM 映像包括任何必要的應用程式安裝或組態。 在擴展集中建立的任何 VM 執行個體都會使用自訂 VM 映像,並已可以處理您的應用程式流量。 在本教學課程中,您將了解如何:
- 建立 Azure Compute Gallery
- 建立特製化映像定義
- 建立映像版本
- 從特製化映像建立擴展集
- 共用映像庫
如果您沒有 Azure 訂閱,請在開始之前,先建立 Azure 免費帳戶。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
- 本文需要 2.4.0 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。
概觀
Azure Compute Gallery 可簡化跨組織共用自訂映像。 自訂映像類似 Marketplace 映像,但您要自行建立它們。 自訂映像可用於啟動程序設定,例如,預先載入應用程式、應用程式設定和其他 OS 設定。
Azure Compute Gallery 可讓您與其他人共用您的自訂 VM 映像。 選擇您要共用的映像、您要開放使用的區域,以及您要共用的對象。
建立並設定來源 VM
首先,請使用 az group create 來建立資源群組,然後使用 az vm create來建立 VM。 接著,此 VM 會用來當作映像的來源。
下列範例會在名為 myResourceGroup 的資源群組中建立名為 myVM 的 Linux 型 VM。
export RANDOM_ID=$(openssl rand -hex 3)
export MY_RESOURCE_GROUP_NAME="myResourceGroup$RANDOM_ID"
export REGION="eastus"
export MY_VM_NAME="myVM"
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
az vm create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_VM_NAME \
--image debian11 \
--admin-username azureuser \
--generate-ssh-keys
提示
VM 的識別碼會顯示在 az vm create 命令的輸出中。 複製並儲存在安全的位置,以便稍後在本教學課程中使用它。
建立映像資源庫
映像資源庫是用於啟用映像共用的主要資源。
資源庫名稱允許的字元為大寫或小寫字母、數位、點和句點。 資源庫名稱不能包含連字號。 資源庫名稱在您的訂用帳戶內必須是唯一的。
使用 az sig create 建立映像資源庫。
在以下範例中:
- 您會為位於美國東部的 myGalleryRG 資源庫建立資源群組。
- 資源庫名為 myGallery。
export MY_GALLERY_RG_NAME="myGalleryRG$RANDOM_ID"
export MY_GALLERY_NAME="myGallery$RANDOM_ID"
az group create --name $MY_GALLERY_RG_NAME --location $REGION
az sig create --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME
建立映像定義
映像定義會建立映像的邏輯群組。 並且可用來管理在其中建立的映像版本相關資訊。
映像定義名稱可以由大寫或小寫字母、數字、點、虛線和句點組成。
請確定您的映像定義是正確的類型:
- 狀態 - 如果您已將 VM 一般化(針對 Windows 使用 Sysprep 或適用於 Linux 的 waagent -deprovision),則應該使用
--os-state generalized
建立一般化映射定義。 如果您想要在不移除現有使用者帳戶的情況下使用 VM,請使用--os-state specialized
建立特製化映像定義。 - 安全性類型 - 預設會以 [信任啟動] 建立新的 Azure VM。 本教學課程包含後續的程式代碼範例,這些範例會反映建立映像定義和擴展集時的受信任啟動組態。 如果您要建立具有未啟用信任啟動之 VM 的映像,請務必在建立這兩個資源時反映正確的安全性類型。 如需受信任啟動的詳細資訊,請參閱 Azure 虛擬機的信任啟動。
若要深入了解您可以為映像定義指定哪些值,請參閱映像定義。
使用 az sig image-definition create,在資源庫中建立映像定義。
在下列範例中,映射定義為:
- 具名 myImageDefinition。
- 已針對特製化的LinuxOS映像進行設定。 若要使用 Windows OS 建立映像的定義,請使用
--os-type Windows
。 - 已針對信任的啟動進行設定。
export MY_IMAGE_DEF_NAME="myImageDefinition$RANDOM_ID"
MY_PUBLISHER_NAME="myPublisher$RANDOM_ID"
az sig image-definition create \
--resource-group $MY_GALLERY_RG_NAME \
--gallery-name $MY_GALLERY_NAME \
--gallery-image-definition $MY_IMAGE_DEF_NAME \
--publisher $MY_PUBLISHER_NAME \
--offer myOffer \
--sku mySKU \
--os-type Linux \
--os-state specialized \
--features SecurityType=TrustedLaunch
提示
映像定義的識別碼會顯示在命令的輸出中。 複製並儲存在安全的位置,以便稍後在本教學課程中使用它。
建立映像版本
使用 az image gallery create-image-version,從 VM 建立映像版本。
映像版本允許的字元是數字及句點。 數字必須在 32 位元整數的範圍內。 格式:MajorVersion.MinorVersion.Patch。
在以下範例中:
- 映像的版本為 1.0.0。
- 我們會在美國中南部區域建立一個複本,並在美國東部區域建立一個複本。 複寫區域必須包含來源 VM 所在的區域。
--virtual-machine
是我們先前建立之 VM 的標識碼。
export MY_VM_ID=$(az vm show --name $MY_VM_NAME --resource-group $MY_RESOURCE_GROUP_NAME --query "id" --output tsv)
az sig image-version create \
--resource-group $MY_GALLERY_RG_NAME \
--gallery-name $MY_GALLERY_NAME \
--gallery-image-definition $MY_IMAGE_DEF_NAME \
--gallery-image-version 1.0.0 \
--target-regions "southcentralus=1" "eastus=1" \
--virtual-machine $MY_VM_ID
注意
您必須等候映像版本完全完成建置和複寫,才能使用相同的映射來建立另一個映像版本。
建立映像版本時,您也可以藉由新增 --storage-account-type premium_lrs
,將映像儲存在「進階」儲存體,或新增 --storage-account-type standard_zrs
,將映像儲存在區域備援儲存體。
從映像建立擴展集
您可以使用 建立擴充集 az vmss create
。 如果您使用特製化來源 VM,請新增 --specialized
參數來指出它是特製化映像。
當您使用 映射定義識別符 --image
來建立擴展集實例時,您會建立使用可用映像最新版本的擴展集。 如果您想要特定版本的映像,請確定您在定義 --image
時包含映像版本識別碼。
最新的影像範例:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage
特定影像範例:
/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myRG/providers/Microsoft.Compute/galleries/myGallery/images/myImage/versions/1.0.0
在下列範例中,擴展集是:
- 具名 myScaleSet
- 使用最新版本的 myImageDefinition 映像。
- 已針對信任的啟動進行設定。
export MY_IMAGE_DEF_ID=$(az sig image-definition show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --gallery-image-definition $MY_IMAGE_DEF_NAME --query "id" --output tsv)
export MY_SCALE_SET_RG_NAME="myResourceGroup$RANDOM_ID"
export MY_SCALE_SET_NAME="myScaleSet$RANDOM_ID"
az group create --name $MY_SCALE_SET_RG_NAME --location eastus
az vmss create \
--resource-group $MY_SCALE_SET_RG_NAME \
--name $MY_SCALE_SET_NAME \
--orchestration-mode flexible \
--image $MY_IMAGE_DEF_ID \
--specialized \
--security-type TrustedLaunch
建立及設定所有擴展集資源和 VM 需要幾分鐘的時間。
共用資源庫
您可以使用 Azure 角色型存取控制(Azure RBAC)跨訂用帳戶共用映像,而且您可以在資源庫、映像定義或映像版本層級共用映像。 任何具有映像版本讀取許可權的使用者,甚至是跨訂用帳戶,都能夠使用映像版本來部署 VM。
我們建議您在資源庫層級上與其他使用者共用。
下列範例將:
- 使用 az sig show 取得資源庫的物件識別碼。
- 使用 az role assignment create 提供資源庫的存取權。
- 使用物件識別碼做為指派的範圍。
- 使用已登入使用者的標識碼作為被指派者,以供示範之用。 當您在測試或實際執行程式碼中使用此程式碼時,請務必更新被指派者,以反映您想要存取此映像的人員。 如需如何使用 Azure RBAC 來共用資源的詳細資訊,請參閱使用 Azure CLI 新增或移除 Azure 角色指派。 ,以及電子郵件位址,使用 az role assignment create 為使用者提供共用映像庫的存取權。
export MY_GALLERY_ID=$(az sig show --resource-group $MY_GALLERY_RG_NAME --gallery-name $MY_GALLERY_NAME --query "id" --output tsv)
export CALLER_ID=$(az ad signed-in-user show --query id -o tsv)
az role assignment create \
--role "Reader" \
--assignee $CALLER_ID \
--scope $MY_GALLERY_ID
清除資源
若要移除您的擴展集與其他資源,請使用 az group delete 刪除資源群組及其所有資源。 --no-wait
參數不會等待作業完成,就會將控制項傳回給提示字元。 --yes
參數會確認您想要刪除資源,而不另外對您提示將要進行此作業。
下一步
在本教學課程中,您已了解如何使用 Azure CLI 來建立及使用擴展集的自訂 VM 映像:
- 建立 Azure Compute Gallery
- 建立特製化映像定義
- 建立映像版本
- 從特製化映像建立擴展集
- 共用映像庫
前往下一個教學課程,以了解如何將應用程式部署至擴展集。