Creación de una VM Windows mediante Azure VM Image Builder
Se aplica a: ✔️ Máquinas virtuales Windows
En este artículo, obtendrá información sobre cómo crear una imagen personalizada de Windows mediante Azure VM Image Builder. En el ejemplo de este artículo se usan personalizadores para personalizar la imagen:
- PowerShell (ScriptUri): descarga y ejecuta un script de PowerShell.
- Reinicio de Windows: reinicia la VM.
- PowerShell (insertado): ejecuta un comando específico. En este ejemplo, se crea un directorio en la VM mediante
mkdir c:\\buildActions
. - Archivo: copia un archivo de GitHub en la VM. En este ejemplo se copia index.md en
c:\buildArtifacts\index.html
en la máquina virtual. buildTimeoutInMinutes
: especifica un tiempo de compilación, en minutos. El valor predeterminado es de 240 minutos, que puede aumentar para permitir compilaciones de larga duración. El valor mínimo permitido es 6 minutos. Los valores inferiores a 6 minutos provocarán errores.vmProfile
: especifica un valorvmSize
y las propiedades de red.osDiskSizeGB
: se puede usar para aumentar el tamaño de una imagen.identity
. Proporciona una identidad para que VM Image Builder la use durante la compilación.
Use la siguiente plantilla JSON de ejemplo para configurar la imagen: helloImageTemplateWin.json.
Nota
Los usuarios de Windows pueden ejecutar los ejemplos siguientes de la CLI de Azure en Azure Cloud Shell mediante Bash.
Registro de los proveedores
Para usar VM Image Builder, debe registrar la característica. Ejecute los siguientes comandos para comprobar el registro:
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 -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
Configuración de variables
Ya que usará algunos datos de forma repetida, cree diversas variables para almacenar esa información:
# Resource group name - we're using myImageBuilderRG in this example
imageResourceGroup='myWinImgBuilderRG'
# Region location
location='WestUS2'
# Run output name
runOutputName='aibWindows'
# The name of the image to be created
imageName='aibWinImage'
Cree una variable para el id. de suscripción:
subscriptionID=$(az account show --query id --output tsv)
Creación del grupo de recursos
Para almacenar el artefacto de la plantilla de configuración de la imagen y la imagen misma, use el grupo de recursos siguiente:
az group create -n $imageResourceGroup -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 el grupo de recursos. En este ejemplo, creará una definición de roles de Azure con permisos específicos para distribuir la imagen. La definición de roles se asigna a la identidad del usuario.
Creación de una identidad administrada asignada por el usuario y concesión de permisos
Cree una identidad asignada por el usuario para que VM Image Builder pueda acceder a la cuenta de almacenamiento donde se almacena el script.
identityName=aibBuiUserId$(date +'%s')
az identity create -g $imageResourceGroup -n $identityName
# Get the identity ID
imgBuilderCliId=$(az identity show -g $imageResourceGroup -n $identityName --query clientId -o tsv)
# Get the user identity URI that's needed for the template
imgBuilderId=/subscriptions/$subscriptionID/resourcegroups/$imageResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/$identityName
# Download the preconfigured role definition example
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>%$imageResourceGroup%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/$imageResourceGroup
Descarga de la plantilla de configuración de la imagen
Hemos creado una plantilla de configuración de imagen con parámetros para que pueda probarla. Descargue el archivo JSON de ejemplo y, luego, configúrelo con las variables que estableció anteriormente.
curl https://raw.githubusercontent.com/azure/azvmimagebuilder/master/quickquickstarts/0_Creating_a_Custom_Windows_Managed_Image/helloImageTemplateWin.json -o helloImageTemplateWin.json
sed -i -e "s%<subscriptionID>%$subscriptionID%g" helloImageTemplateWin.json
sed -i -e "s%<rgName>%$imageResourceGroup%g" helloImageTemplateWin.json
sed -i -e "s%<region>%$location%g" helloImageTemplateWin.json
sed -i -e "s%<imageName>%$imageName%g" helloImageTemplateWin.json
sed -i -e "s%<runOutputName>%$runOutputName%g" helloImageTemplateWin.json
sed -i -e "s%<imgBuilderId>%$imgBuilderId%g" helloImageTemplateWin.json
Puede modificar este ejemplo en el terminal con un editor de texto, como vi
.
vi helloImageTemplateWin.json
Nota
En el caso de la imagen de origen, siempre especifique una versión. No especifique latest
como la versión.
Si agrega o cambia el grupo de recursos al que se distribuye la imagen, asegúrese de que los permisos estén establecidos en el grupo de recursos.
Crear la imagen
Para enviar la configuración de la imagen al servicio VM Image Builder, ejecute los siguientes comandos:
az resource create \
--resource-group $imageResourceGroup \
--properties @helloImageTemplateWin.json \
--is-full-object \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Cuando haya terminado, se devuelve un mensaje de operación correcta a la consola y se crea una plantilla de configuración de VM Image Builder en $imageResourceGroup
.
Asimismo, VM Image Builder crea en segundo plano un grupo de recursos de almacenamiento provisional en la suscripción. Este grupo de recursos se usa para compilar la imagen con el siguiente formato: IT_<DestinationResourceGroup>_<TemplateName>
.
Nota:
Si se requiere la eliminación, no elimine el grupo de recursos de almacenamiento provisional directamente. En primer lugar, elimine el artefacto de plantilla de imagen, que posteriormente eliminará el grupo de recursos de almacenamiento provisional. De lo contrario, la plantilla de imagen puede estar en un estado de error.
Si el servicio notifica un error al enviar la plantilla de la configuración de la imagen, haga lo siguiente:
- Consulte Solución de problemas del servicio Azure VM Image Builder.
- Antes de intentar volver a enviar la plantilla, elimínela mediante la ejecución de los siguientes comandos:
az resource delete \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01
Iniciar la generación de imágenes
Inicie el proceso de compilación de la imagen con az resource invoke-action.
az resource invoke-action \
--resource-group $imageResourceGroup \
--resource-type Microsoft.VirtualMachineImages/imageTemplates \
-n helloImageTemplateWin01 \
--action Run
Espere hasta que se complete la compilación.
Si se producen errores, consulte Solución de problemas del servicio Azure VM Image Builder.
Creación de la máquina virtual
Cree la VM con la imagen que ha compilado. En el código siguiente, reemplace <password> por su propia contraseña para aibuser en la VM.
az vm create \
--resource-group $imageResourceGroup \
--name aibImgWinVm00 \
--admin-username aibuser \
--admin-password <password> \
--image $imageName \
--location $location
Comprobación de la personalización
Cree una conexión de Escritorio remoto a la VM con el nombre de usuario y la contraseña que ha establecido al crear la VM. En la VM, abra una ventana del símbolo del sistema y escriba:
dir c:\
Los dos directorios siguientes se crean durante la personalización de la imagen:
- buildActions
- buildArtifacts
Limpieza de los recursos
Cuando haya terminado, elimine los recursos que ha creado.
Elimine la plantilla de VM Image Builder.
az resource delete \ --resource-group $imageResourceGroup \ --resource-type Microsoft.VirtualMachineImages/imageTemplates \ -n helloImageTemplateWin01
Elimine la asignación de roles, la definición de roles y la identidad de usuario.
az role assignment delete \ --assignee $imgBuilderCliId \ --role "$imageRoleDefName" \ --scope /subscriptions/$subscriptionID/resourceGroups/$imageResourceGroup az role definition delete --name "$imageRoleDefName" az identity delete --ids $imgBuilderId
Elimine el grupo de recursos de la imagen.
az group delete -n $imageResourceGroup
Pasos siguientes
Para más información sobre los componentes del archivo JSON que se usan en este artículo, consulte la referencia de la plantilla de VM Image Builder.