Datos personalizados y cloud-init en máquinas virtuales de Azure

Precaución

En este artículo se hace referencia a CentOS, una distribución de Linux que está cerca de su estado Final de ciclo vida (EOL). Tenga en cuenta su uso y planifique en consecuencia. Para más información, consulte la Guía de fin de ciclo de vida de CentOS.

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. En otras nubes, este concepto suele conocerse como datos de usuario. Microsoft Azure posee una característica similar llamada 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 el agente de Linux o cloud-init, procesa esos parámetros.

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 centos74 \
  --image OpenLogic:CentOS-CI:7-CI:latest \
  --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 incluyen en %SYSTEMDRIVE%\AzureData\CustomData.bin como archivo binario, pero no se procesan. Si desea procesar este archivo, deberá crear una imagen personalizada y escribir código para procesar CustomData.bin.

Linux

En sistemas operativos Linux, los datos personalizados se pasan a la máquina virtual a través del servidor 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 una ruta de acceso de notificación para alertar sobre el 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 acceso de notificación para alertar sobre el estado de finalización del script.

    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 para Virtual Machine Scale Sets, puede 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 del conjunto de escalado no obtienen los datos personalizados actualizados hasta que se actualizan al último modelo y se restablece la imagen inicial.
  • 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?

Los datos personalizados no están disponibles en Azure Instance Metadata Service (IMDS). En su lugar, se recomienda usar datos de usuario a través de IMDS. Para más información, consulte Datos de usuario a través de Azure Instance Metadata Service.