Creación de una nueva imagen de máquina virtual a partir de otra existente mediante Azure VM Image Builder en Linux

Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles

En este artículo, aprenderá a actualizar una versión de imagen existente en una instancia de Azure Compute Gallery (anteriormente denominado Shared Image Gallery) y publicarla en la galería como una nueva versión de imagen.

Para configurar la imagen, usará una plantilla JSON de ejemplo, helloImageTemplateforSIGfromSIG.json.

Registro de los proveedores

Para usar VM Image Builder, debe registrar los proveedores.

  1. Compruebe los registros del proveedor. Asegúrese de que cada uno devuelve el valor Registrado.

    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. Si no devuelven el valor Registrado, registre los proveedores mediante la ejecución de los siguientes comandos:

    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
    

Establecimiento de variables y permisos

Si ya ha creado una instancia de Azure Compute Gallery mediante Creación y distribución de una imagen en una instancia de Azure Compute Gallery, ya se han creado algunas de las variables necesarias.

  1. Si aún no ha creado las variables, ejecute los siguientes comandos:

    # Resource group name 
    sigResourceGroup=ibLinuxGalleryRG
    # Gallery location 
    location=westus2
    # Additional region to replicate the image version to 
    additionalregion=eastus
    # 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. Cree una variable para el id. de suscripción:

    subscriptionID=$(az account show --query id --output tsv)
    
  3. Obtenga la versión de la imagen que quiera actualizar:

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

Creación de una identidad asignada por el usuario y establecimiento de los permisos en el grupo de recursos

Ha configurado la identidad de usuario en un ejemplo anterior, por lo que ahora debe obtener el identificador de recurso, que se anexará a la plantilla.

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

Si ya tiene una instancia de Azure Compute Gallery pero no la configuró siguiendo un ejemplo anterior, debe asignar permisos para que VM Image Builder acceda al grupo de recursos para que pueda acceder a la galería. Para más información, consulte Creación y distribución de una imagen en una instancia de Azure Compute Gallery.

Modificación del ejemplo helloImage

Puede revisar el ejemplo de JSON que está a punto de usar en helloImageTemplateforSIGfromSIG.json. Para obtener información sobre el archivo JSON, consulte Creación de una plantilla de Azure VM Image Builder.

  1. Descargue el ejemplo de JSON, como se muestra en Creación de una imagen de Linux y distribución a Azure Compute Gallery mediante la CLI de Azure.

  2. Configure el JSON con las variables:

    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
    

Crear la imagen

  1. Envíe la configuración de la imagen al servicio de VM Image Builder:

    az resource create \
        --resource-group $sigResourceGroup \
        --properties @helloImageTemplateforSIGfromSIG.json \
        --is-full-object \
        --resource-type Microsoft.VirtualMachineImages/imageTemplates \
        -n helloImageTemplateforSIGfromSIG01
    
  2. Inicie la generación de la imagen:

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

Espere a que la imagen se cree y replique antes de avanzar al paso siguiente.

Creación de la máquina virtual

  1. Cree la máquina virtual haciendo lo siguiente:

    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. Cree una conexión Secure Shell (SSH) a la máquina virtual mediante la dirección IP pública de la misma.

    ssh azureuser@<pubIp>
    

    En cuanto se haya establecido la conexión SSH, recibirá un "Mensaje del día" indicando que la imagen se ha personalizado:

    *******************************************************
    **            This VM was built from the:            **
    **      !! AZURE VM IMAGE BUILDER Custom Image !!    **
    **         You have just been Customized :-)         **
    *******************************************************
    
  3. Escriba exit para cerrar la conexión SSH.

  4. Para enumerar las versiones de la imagen que ahora están disponibles en la galería, ejecute:

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

Pasos siguientes

Para más información sobre los componentes del archivo JSON que usó en este artículo, consulte Crear una plantilla de Azure VM Image Builder.