使用 Linux 中的 Azure VM 映像生成器从现有映像创建新的 VM 映像
适用于:✔️ Linux VM ✔️ 灵活规模集
在本文中,你将了解如何更新 Azure Compute Gallery(以前称为共享映像库)中的现有映像版本并将其作为新映像版本发布到库中。
若要配置映像,可使用示例 JSON 模板 helloImageTemplateforSIGfromSIG.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,则表示你已创建所需的部分变量。
如果尚未创建变量,请运行以下命令:
# Resource group name sigResourceGroup=ibLinuxGalleryRG # Gallery location location=chinanorth3 # Additional region to replicate the image version to additionalregion=chinanorth # Name of the Azure Compute Gallery sigName=myIbGallery # Name of the image definition to use imageDefName=myIbImageDef # image distribution metadata reference name runOutputName=aibSIGLinuxUpdate
为你的订阅 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 示例,如使用 Azure CLI 创建 Linux 映像并将其分发到 Azure Compute Gallery 中所示。
使用变量配置 JSON:
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/8_Creating_a_Custom_Linux_Shared_Image_Gallery_Image_from_SIG/helloImageTemplateforSIGfromSIG.json -o helloImageTemplateforSIGfromSIG.json sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s%<sigDefImgVersionId>%$sigDefImgVersionId%g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIGfromSIG.json sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIGfromSIG.json
创建映像
将映像配置提交到 VM 映像生成器服务:
az resource create \ --resource-group $sigResourceGroup \ --properties @helloImageTemplateforSIGfromSIG.json \ --is-full-object \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIGfromSIG01
启动映像生成:
az resource invoke-action \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIGfromSIG01 \ --action Run
等待生成和复制映像后,然后再进行下一步。
创建 VM
通过执行以下操作来创建 VM:
az vm create \ --resource-group $sigResourceGroup \ --name aibImgVm001 \ --admin-username azureuser \ --location $location \ --image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \ --generate-ssh-keys
使用 VM 的公共 IP 地址创建与 VM 的安全外壳 (SSH) 连接。
ssh azureuser@<pubIp>
建立 SSH 连接后,应会收到一条“每日消息”,说明映像已进行自定义:
******************************************************* ** This VM was built from the: ** ** !! AZURE VM IMAGE BUILDER Custom Image !! ** ** You have just been Customized :-) ** *******************************************************
键入
exit
以关闭 SSH 连接。若要列出库中目前可用的映像版本,请运行以下命令:
az sig image-version list -g $sigResourceGroup -r $sigName -i $imageDefName -o table
后续步骤
要详细了解本文中使用的 JSON 文件的组件,请参阅创建 Azure VM 映像生成器模板。