使用 Azure VM 映像生成器从现有映像创建新的 Windows VM 映像
适用于:✔️ Windows VM
在本文中,你将了解如何更新 Azure Compute Gallery(以前称为共享映像库)中的现有 Windows 映像版本并将其作为新映像版本发布到库中。
要配置映像,可使用示例 JSON 模板 helloImageTemplateforSIGfromWinSIG.json。
注册提供程序
若要使用 VM 映像生成器,需要注册提供程序。
检查提供程序注册情况。 确保都返回“已注册”。
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
如果未返回“已注册”,请运行以下命令注册提供程序:
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 映像生成器仅支持在源托管映像所在的同一资源组中创建自定义映像。 在以下示例中,将资源组名称 ibsigRG 更新为源托管映像所在的资源组的名称。
如果尚未创建变量,请运行以下命令:
# Resource group name - we are using ibsigRG in this example sigResourceGroup=myIBWinRG # Datacenter location - we are using China North 3 in this example location=chinanorth # Additional region to replicate the image to - we are using China North in this example additionalregion=chinanorth # 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"
为你的订阅 ID 创建变量:
subscriptionID=$(az account show --query id --output tsv)
获取要更新的映像版本:
sigDefImgVersionId=$(az sig image-version list \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID --query [].'id' -o tsv)
创建用户分配的标识,并在资源组上设置权限
你已经在前面的示例中设置了用户标识,因此现在需要获取将追加到模板中的资源 ID。
#get identity used previously
imgBuilderId=$(az identity list -g $sigResourceGroup --query "[?contains(name, 'aibBuiUserId')].id" -o tsv)
如果你已有 Azure Compute Gallery,但没有按照前面的示例进行设置,则需要为 VM 映像生成器分配对资源组的访问权限,以便它可以访问该库。 有关详细信息,请参阅创建映像并将其分发到 Azure Compute Gallery。
修改 helloImage 示例
可以在 helloImageTemplateforSIGfromSIG.json 上查看将要使用的 JSON 示例。 有关 JSON 文件的信息,请参阅创建 Azure VM 映像生成器模板。
下载 JSON 示例,如创建用户分配的标识并设置资源组的权限中所示。
使用变量配置 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
创建映像
将映像配置提交到 VM 映像生成器服务:
az resource create \ --resource-group $sigResourceGroup \ --location $location \ --properties @helloImageTemplateforSIGfromWinSIG.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n imageTemplateforSIGfromWinSIG01
启动映像生成:
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 映像生成器模板。