Creación de una imagen de Linux y distribución a Azure Compute Gallery mediante la CLI de Azure
Se aplica a: ✔️ máquinas virtuales Linux ✔️ conjuntos de escalado flexibles
En este artículo, aprenderá a usar Azure VM Image Builder y la CLI de Azure para crear una versión de la imagen en una instancia de Azure Compute Gallery (anteriormente denominada Shared Image Gallery) y después distribuirla globalmente. También puede crear una versión de la imagen mediante Azure PowerShell.
En este artículo se usa una plantilla JSON de ejemplo para configurar la imagen. El archivo JSON se encuentra en helloImageTemplateforSIG.json.
Para distribuir la imagen en una instancia de Azure Compute Gallery, en la plantilla se usa sharedImage como valor de la sección distribute
de la plantilla.
Registro de los proveedores
Para usar VM Image Builder, debe registrar los proveedores. Ejecute los siguientes comandos para comprobar el registro:
az provider show -n Microsoft.VirtualMachineImages -o json | grep registrationState
az provider show -n Microsoft.KeyVault -o json | grep registrationState
az provider show -n Microsoft.Compute -o json | grep registrationState
az provider show -n Microsoft.Storage -o json | grep registrationState
az provider show -n Microsoft.Network -o json | grep registrationState
az provider show -n Microsoft.ContainerInstance -o json | grep registrationState
Si la salida no dice registrada, ejecute 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
Ya que usará algunos datos de forma repetida, cree diversas variables para almacenar esa información.
VM Image Builder admite la creación de imágenes personalizadas solo en el mismo grupo de recursos que la imagen administrada de origen. En el siguiente ejemplo, actualice el nombre del grupo de recursos para que coincida con el de la imagen administrada de origen.
# Resource group name - ibLinuxGalleryRG in this example
sigResourceGroup=ibLinuxGalleryRG
# Datacenter location - West US 2 in this example
location=westus2
# Additional region to replicate the image to - East US in this example
additionalregion=eastus
# Name of the Azure Compute Gallery - myGallery in this example
sigName=myIbGallery
# Name of the image definition to be created - myImageDef in this example
imageDefName=myIbImageDef
# Reference name in the image distribution metadata
runOutputName=aibLinuxSIG
Cree una variable para el id. de suscripción:
subscriptionID=$(az account show --query id --output tsv)
Creación del grupo de recursos:
az group create -n $sigResourceGroup -l $location
Creación de una identidad asignada por el usuario y establecimiento de los permisos en el grupo de recursos
VM Image Builder usa la identidad de usuario proporcionada para insertar la imagen en Azure Compute Gallery. En este ejemplo, creará una definición de roles de Azure con acciones específicas para distribuir la imagen. La definición de roles se asigna a la identidad del usuario.
# Create user-assigned identity for VM Image Builder to access the storage account where the script is stored
identityName=aibBuiUserId$(date +'%s')
az identity create -g $sigResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $sigResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$sigResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download an Azure role-definition template, and update the template with the parameters that were specified earlier
curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/solutions/12_Creating_AIB_Security_Roles/aibRoleImageCreation.json -o aibRoleImageCreation.json
imageRoleDefName="Azure Image Builder Image Def"$(date +'%s')
# Update the definition
sed -i -e "s/<subscriptionID>/$subscriptionID/g" aibRoleImageCreation.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" aibRoleImageCreation.json
sed -i -e "s/Azure Image Builder Service Image Creation Role/$imageRoleDefName/g" aibRoleImageCreation.json
# Create role definitions
az role definition create --role-definition ./aibRoleImageCreation.json
# Grant a role definition to the user-assigned identity
az role assignment create \
--assignee $imgBuilderCliId \
--role "$imageRoleDefName" \
--scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup
Creación de una definición de imagen y una galería
Para usar VM Image Builder con una instancia de Azure Compute Gallery, debe tener una galería y una definición de imagen existentes. VM Image Builder no crea la galería ni la definición de imagen automáticamente.
Si aún no tiene una galería y una definición de imagen para usar, empiece por crearlas.
En primer lugar, cree una galería:
az sig create \
-g $sigResourceGroup \
--gallery-name $sigName
Luego, cree una definición de imagen:
az sig image-definition create \
-g $sigResourceGroup \
--gallery-name $sigName \
--gallery-image-definition $imageDefName \
--publisher myIbPublisher \
--offer myOffer \
--sku 20_04-lts-gen2 \
--os-type Linux \
--hyper-v-generation V2 \
--features SecurityType=TrustedLaunchSupported
Descarga y configuración del archivo JSON
Descargue la plantilla JSON y configúrela con las variables:
curl https://raw.githubusercontent.com/Azure/azvmimagebuilder/master/quickquickstarts/1_Creating_a_Custom_Linux_Shared_Image_Gallery_Image/helloImageTemplateforSIG.json -o helloImageTemplateforSIG.json
sed -i -e "s/<subscriptionID>/$subscriptionID/g" helloImageTemplateforSIG.json
sed -i -e "s/<rgName>/$sigResourceGroup/g" helloImageTemplateforSIG.json
sed -i -e "s/<imageDefName>/$imageDefName/g" helloImageTemplateforSIG.json
sed -i -e "s/<sharedImageGalName>/$sigName/g" helloImageTemplateforSIG.json
sed -i -e "s/<region1>/$location/g" helloImageTemplateforSIG.json
sed -i -e "s/<region2>/$additionalregion/g" helloImageTemplateforSIG.json
sed -i -e "s/<runOutputName>/$runOutputName/g" helloImageTemplateforSIG.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateforSIG.json
Creación de la versión de la imagen
En esta sección, creará la versión de la imagen en la galería.
Envíe la configuración de la imagen al servicio Azure VM Image Builder:
az resource create \
--resource-group $sigResourceGroup \
--properties @helloImageTemplateforSIG.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01
Inicie la generación de la imagen:
az resource invoke-action \
--resource-group $sigResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateforSIG01 \
--action Run
La creación y replicación de la imagen en ambas regiones puede tardar unos minutos. Espere a que termine esta parte antes de pasar a la creación de una máquina virtual.
Creación de la máquina virtual
Cree la máquina virtual a partir de la versión de la imagen que se creó mediante VM Image Builder.
az vm create \
--resource-group $sigResourceGroup \
--name myAibGalleryVM \
--admin-username aibuser \
--location $location \
--image "/subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup/providers/Microsoft.Compute/galleries/$sigName/images/$imageDefName/versions/latest" \
--security-type TrustedLaunch \
--generate-ssh-keys
Conéctese a la máquina virtual mediante Secure Shell (SSH):
ssh aibuser@<publicIpAddress>
Verá que la imagen se ha personalizado con un mensaje del día en cuanto se ha establecido la conexión SSH:
*******************************************************
** This VM was built from the: **
** !! AZURE VM IMAGE BUILDER Custom Image !! **
** You have just been Customized :-) **
*******************************************************
Limpieza de los recursos
Nota
Si ahora quiere volver a personalizar la versión de la imagen para crear una nueva de la misma, omita el paso que se indica aquí y vaya a Uso de VM Image Builder para crear otra versión de la imagen.
Si ya no necesita los recursos que se crearon mientras seguía el proceso de este artículo, puede eliminarlos haciendo lo siguiente.
Este proceso elimina la imagen que ha creado y todos los demás archivos de recursos. Asegúrese de que ha terminado esta implementación antes de eliminar los recursos.
Al eliminar los recursos de la galería, tendrá que eliminar todas las versiones de la imagen antes de poder eliminar la definición de la imagen que se ha usado para crearlas. Para eliminar una galería, primero tiene que haber eliminado todas las definiciones de imagen de la galería.
Elimine la plantilla de VM Image Builder.
az resource delete \ --resource-group $sigResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateforSIG01
Elimine las asignaciones de permisos, los roles y la identidad.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$sigResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Obtenga la versión de la imagen que se creó mediante VM Image Builder (siempre comienza por
0.
) y, a continuación, elimínela.sigDefImgVersion=$(az sig image-version list \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID --query [].'name' -o json | grep 0. | tr -d '"') az sig image-version delete \ -g $sigResourceGroup \ --gallery-image-version $sigDefImgVersion \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID
Elimine la definición de la imagen.
az sig image-definition delete \ -g $sigResourceGroup \ --gallery-name $sigName \ --gallery-image-definition $imageDefName \ --subscription $subscriptionID
Elimine la galería.
az sig delete -r $sigName -g $sigResourceGroup
Elimine el grupo de recursos.
az group delete -n $sigResourceGroup -y
Pasos siguientes
Más información sobre Azure Compute Gallery.