共用方式為


使用 Azure VM Image Builder,根據現有映像建立新的 Windows VM 映像

適用於:✔️ Windows VM

在本文中,您將了解如何更新 Azure Compute Gallery (先前名為共用映像庫) 中的現有 Windows 映像版本,並將其發佈至資源庫作為新的映像版本。

若要設定映像,您可以使用範例 JSON 範本 helloImageTemplateforSIGfromWinSIG.json

註冊提供者

若要使用 VM Image Builder,您必須註冊提供者。

  1. 檢查您的提供者註冊。 請確定每一個都有傳回 Registered

    az provider show -n Microsoft.VirtualMachineImages | grep registrationState
    az provider show -n Microsoft.KeyVault | grep registrationState
    az provider show -n Microsoft.Compute | grep registrationState
    az provider show -n Microsoft.Storage | grep registrationState
    az provider show -n Microsoft.Network | grep registrationState
    az provider show -n Microsoft.ContainerInstance | grep registrationState
    
  2. 如果未傳回 Registered,請執行下列命令來註冊提供者:

    az provider register -n Microsoft.VirtualMachineImages
    az provider register -n Microsoft.Compute
    az provider register -n Microsoft.KeyVault
    az provider register -n Microsoft.Storage
    az provider register -n Microsoft.Network
    az provider register -n Microsoft.ContainerInstance
    

設定變數和授權

如果您已透過建立映像並將其發佈到 Azure Compute Gallery建立 Azure Compute Gallery,則表示您已建立一些所需的變數。

注意

VM Image Builder 僅支援在與來源受控映像相同的資源群組中建立自訂映像。 在下列範例中,將資源群組名稱 ibsigRG 更新為來源管理映射所在的資源群組名稱。

  1. 如果您尚未建立變數,請執行下列命令:

    # Resource group name - we are using ibsigRG in this example
    sigResourceGroup=myIBWinRG
    # Datacenter location - we are using West US 2 in this example
    location=westus
    # Additional region to replicate the image to - we are using East US in this example
    additionalregion=eastus
    # name of the Azure Compute Gallery - in this example we are using myGallery
    sigName=my22stSIG
    # name of the image definition to be created - in this example we are using myImageDef
    imageDefName=winSvrimages
    # image distribution metadata reference name
    runOutputName=w2019SigRo
    # User name and password for the VM
    username="user name for the VM"
    vmpassword="password for the VM"
    
  2. 為訂閱識別碼建立變數:

    subscriptionID=$(az account show --query id --output tsv)
    
  3. 取得您想要更新的映像版本:

    sigDefImgVersionId=$(az sig image-version list \
    -g $sigResourceGroup \
    --gallery-name $sigName \
    --gallery-image-definition $imageDefName \
    --subscription $subscriptionID --query [].'id' -o tsv)
    

建立使用者指派的身分識別,並在資源群組上設定權限

您已在先前的範例中設定使用者身分識別,因此現在您需要取得資源識別碼,並將其附加至範本。

#get identity used previously
imgBuilderId=$(az identity list -g $sigResourceGroup --query "[?contains(name, 'aibBuiUserId')].id" -o tsv)

如果您已經有 Azure Compute Gallery,但未依照先前的範例加以設定,則需要將資源群組的權限指派給 VM Image Builder,以便允許存取資源庫。 如需詳細資訊,請參閱建立映像並將其發佈到 Azure Compute Gallery

修改 helloImage 範例

您可以檢閱 helloImageTemplateforSIGfromSIG.json 中即將使用的 JSON 範例。 如需 JSON 檔案的相關資訊,請參閱建立 Azure VM Image Builder 範本

  1. 下載 JSON 範例,請參閱建立使用者指派的身分識別,並在資源群組上設定權限

  2. 使用變數設定 JSON:

    curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/8_Creating_a_Custom_Win_Shared_Image_Gallery_Image_from_SIG/helloImageTemplateforSIGfromWinSIG.json -o helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s%<sigDefImgVersionId>%$sigDefImgVersionId%g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIGfromWinSIG.json
    sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIGfromWinSIG.json
    

建立映像

  1. 將映像組態提交至 VM Image Builder 服務:

    az resource create \
        --resource-group $sigResourceGroup \
        --location $location \
        --properties @helloImageTemplateforSIGfromWinSIG.json \
        --is-full-object \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n imageTemplateforSIGfromWinSIG01
    
  2. 啟動映像組建:

    az resource invoke-action \
        --resource-group $sigResourceGroup \
        --resource-type  Microsoft.VirtualMachineImages/imageTemplates \
        -n imageTemplateforSIGfromWinSIG01 \
        --action Run 
    

等待映像建置並複製後,再繼續進行下一個步驟。

建立 VM

執行下列動作以建立 VM:

az vm create \
--resource-group $sigResourceGroup \
--name aibImgWinVm002 \
--admin-username $username \
--admin-password $vmpassword \
--image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
--location $location

確認自訂

使用您在建立 VM 時所設定的使用者名稱與密碼,建立與該 VM 的遠端桌面連線。 在 VM 中開啟 [命令提示字元] 視窗,然後執行:

dir c:\

您現在應該會看到兩個目錄:

  • buildActions:在第一個映像版本中建立。
  • buildActions2:當您更新第一個映像版本以建立第二個映像版本時建立。

下一步

若要深入了解本文中使用的 JSON 檔案,請參閱建立 Azure VM Image Builder 範本