Datos personalizados en máquinas virtuales de Azure

Se aplica a: ✔️ Máquinas virtuales Linux ✔️ Máquinas virtuales Windows ✔️ Conjuntos de escalado flexibles

Es posible que tenga que insertar un script u otros metadatos en una máquina virtual (MV) de Microsoft Azure en tiempo de aprovisionamiento. Azure admite este escenario a través de una característica denominada datos personalizados.

Los datos personalizados están disponibles para la máquina virtual durante el primer inicio o configuración, lo que se denomina aprovisionamiento. El aprovisionamiento es el proceso en el que los parámetros de creación de máquinas virtuales (por ejemplo, nombre de host, nombre de usuario, contraseña, certificados, datos personalizados y claves) están disponibles para la máquina virtual. Un agente de aprovisionamiento, como cloud-init, procesa esos parámetros.

Note

Azure también ofrece una característica de datos de usuario independiente. A diferencia de los datos personalizados, los datos de usuario se pueden recuperar del servicio de metadatos de instancia de Azure (IMDS), es persistente durante la vigencia de la máquina virtual y se pueden actualizar sin detener ni restablecer la máquina virtual. Use datos de usuario cuando necesite acceso o actualizaciones posteriores al aprovisionamiento; use datos personalizados cuando necesite una carga procesada por el agente de aprovisionamiento en el primer arranque.

Pasaje de datos personalizados a la máquina virtual

Para usar datos personalizados, primero debe codificar como Base64 el contenido antes de pasarlo a la API, a menos que use una herramienta de la CLI que realice la conversión automáticamente, como la CLI de Azure. El tamaño no puede ser superior a 64 KB.

En la CLI, puede pasar los datos personalizados como un archivo, como se muestra en el ejemplo siguiente. El archivo se convierte a Base64.

az vm create \
  --resource-group myResourceGroup \
  --name myVM \
  --image Ubuntu2204 \
  --custom-data cloud-init.txt \
  --generate-ssh-keys

En Azure Resource Manager hay una función base64:

"name": "[parameters('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-07-01",
"location": "[parameters('location')]",
"dependsOn": [
..],
"variables": {
        "customDataBase64": "[base64(parameters('stringData'))]"
    },
"properties": {
..
    "osProfile": {
        "computerName": "[parameters('virtualMachineName')]",
        "adminUsername": "[parameters('adminUsername')]",
        "adminPassword": "[parameters('adminPassword')]",
        "customData": "[variables('customDataBase64')]"
        },

Procesamiento de datos personalizados

Los agentes de aprovisionamiento instalados en las máquinas virtuales controlan la comunicación con la plataforma y la inclusión de datos en el sistema de archivos.

Windows

Los datos personalizados se colocan en %SystemDrive%\AzureData\CustomData.bin como un archivo binario, pero no se procesan. Para procesar este archivo, cree una imagen personalizada y escriba código que lea CustomData.bin.

La carpeta %SystemDrive%\AzureData se protege durante el aprovisionamiento para que solo NT AUTHORITY\SYSTEM y BUILTIN\Administrators tengan control total y CustomData.bin hereda estos permisos. Si copia CustomData.bin en otro lugar para su procesamiento, establezca permisos en el destino explícitamente, ya que sus permisos no se transfieren con el archivo.

Linux

En sistemas operativos Linux, los datos personalizados se pasan a la máquina virtual a través del archivo ovf-env.xml. Ese archivo se copia en el directorio /var/lib/waagent durante el aprovisionamiento. Las versiones más recientes del agente Linux de Microsoft Azure copian los datos codificados en Base64 en /var/lib/waagent/CustomData para mayor comodidad.

Azure admite actualmente dos agentes de aprovisionamiento:

  • Agente Linux. De forma predeterminada, el agente no procesa los datos personalizados. Debe crear una imagen personalizada con los datos habilitados. La configuración pertinente es:

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    Al habilitar los datos personalizados y ejecutar un script, la máquina virtual no notificará un aprovisionamiento correcto de la máquina virtual hasta que el script haya terminado de ejecutarse. Si el script supera el tiempo límite total de aprovisionamiento de máquinas virtuales de 40 minutos, se producirá un error en la creación de la máquina virtual.

    Si el script no se puede ejecutar o se producen errores durante la ejecución, no se trata de un error de aprovisionamiento grave. Debe crear un canal de notificación para avisarle del estado de finalización del script.

    Para solucionar problemas de ejecución de datos personalizados, revise /var/log/waagent.log.

  • cloud-init. De forma predeterminada, este agente procesa los datos personalizados. Acepta varios formatos de datos personalizados, como la configuración de cloud-init y los scripts.

    De forma similar al agente de Linux, si se producen errores durante la ejecución del procesamiento de configuración o de scripts cuando cloud-init está procesando los datos personalizados, no se trata de un error de aprovisionamiento grave. Debe crear una ruta de notificación para alertarle cuando el script finalice.

    Sin embargo, a diferencia del agente de Linux, cloud-init no espera a que finalicen las configuraciones de datos personalizados del usuario antes de informar a la plataforma de que la máquina virtual está lista. Para más información sobre cloud-init en Azure, incluida la solución de problemas, consulte compatibilidad de cloud-init con máquinas virtuales en Azure.

Preguntas más frecuentes

¿Se pueden actualizar los datos personalizados una vez creada la máquina virtual?

En el caso de las máquinas virtuales únicas, no se pueden actualizar los datos personalizados en el modelo de máquina virtual. Pero en los Virtual Machine Scale Sets se pueden actualizar los datos personalizados. Para obtener más información, consulte Modificar un conjunto de escalado. Al actualizar datos personalizados en el modelo para un conjunto de escalado de máquinas virtuales:

  • Las instancias existentes en el conjunto de escalado no obtienen los datos personalizados actualizados hasta que se actualizan al modelo más reciente y se recrea la imagen.
  • Las nuevas instancias reciben los nuevos datos personalizados.

¿Se pueden incluir valores confidenciales en los datos personalizados?

Se recomienda no almacenar los datos confidenciales en los datos personalizados. Para obtener más información, consulte Procedimientos recomendados de cifrado y seguridad de datos de Azure.

¿Están disponibles los datos personalizados en IMDS?

N.º Los datos personalizados no se muestran a través del servicio de metadatos de instancia (IMDS) de Azure. Si necesita recuperar una carga útil desde el interior de la máquina virtual después del aprovisionamiento, o actualizarla sin detenerla ni reaplicar una imagen a la máquina virtual, utilice en su lugar la función datos de usuario. Para obtener más información sobre cómo leer datos de usuario de IMDS, consulte Obtención de datos de usuario.