使用 Linux 中的 Azure VM 映像生成器从现有映像创建新的 VM 映像

适用于:✔️ Linux VM ✔️ 灵活规模集

在本文中,你将了解如何更新 Azure Compute Gallery(以前称为共享映像库)中的现有映像版本并将其作为新映像版本发布到库中。

若要配置映像,可使用示例 JSON 模板 helloImageTemplateforSIGfromSIG.json

注册提供程序

若要使用 VM 映像生成器,需要注册提供程序。

  1. 检查提供程序注册情况。 确保都返回“已注册”。

    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. 如果未返回“已注册”,请运行以下命令注册提供程序:

    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,则表示你已创建所需的部分变量。

  1. 如果尚未创建变量,请运行以下命令:

    # 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
    
  2. 为你的订阅 ID 创建变量:

    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)
    

创建用户分配的标识,并在资源组上设置权限

你已经在前面的示例中设置了用户标识,因此现在需要获取将追加到模板中的资源 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 映像生成器模板

  1. 下载 JSON 示例,如使用 Azure CLI 创建 Linux 映像并将其分发到 Azure Compute Gallery 中所示。

  2. 使用变量配置 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
    

创建映像

  1. 将映像配置提交到 VM 映像生成器服务:

     az resource create \
     	--resource-group $sigResourceGroup \
     	--properties @helloImageTemplateforSIGfromSIG.json \
     	--is-full-object \
     	--resource-type Microsoft.VirtualMachineImages/imageTemplates \
     	-n helloImageTemplateforSIGfromSIG01
    
  2. 启动映像生成:

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

等待生成和复制映像后,然后再进行下一步。

创建 VM

  1. 通过执行以下操作来创建 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
    
  2. 使用 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 :-)         **
     *******************************************************
    
  3. 键入 exit 以关闭 SSH 连接。

  4. 若要列出库中目前可用的映像版本,请运行以下命令:

     az sig image-version list -g $sigResourceGroup -r $sigName -i $imageDefName -o table
    

后续步骤

要详细了解本文中使用的 JSON 文件的组件,请参阅创建 Azure VM 映像生成器模板