Données personnalisées et cloud-init sur Machines virtuelles Microsoft Azure

S’applique à : ✔️ Machines virtuelles Linux ✔️ Machines virtuelles Windows ✔️ Groupes identiques flexibles

Vous pouvez avoir besoin d’injecter un script ou d’autres métadonnées dans une machine virtuelle Microsoft Azure au moment de l’approvisionnement. Dans d’autres clouds, ce concept est souvent appelé données utilisateur. Microsoft Azure dispose d’une fonctionnalité similaire appelée données personnalisées.

Les données personnalisées sont mises à la disposition de la machine virtuelle lors du premier démarrage ou de la première configuration, ce que l’on appelle l’approvisionnement. L’approvisionnement est le processus au cours duquel les paramètres de création de la machine virtuelle (par exemple, le nom d’hôte, le nom d’utilisateur, le mot de passe, les certificats, les données personnalisées et les clés) sont mis à la disposition de la machine virtuelle. Un agent d’approvisionnement, tel que l’agent Linux ou cloud-init, traite ces paramètres.

Transmettre des données personnalisées à la machine virtuelle

Pour utiliser des données personnalisées, vous devez encoder le contenu en Base64 avant de transmettre les données à l’API, sauf si vous utilisez un outil CLI qui effectue la conversion pour vous, par exemple Azure CLI. La taille ne peut pas dépasser 64 ko.

Dans l’interface CLI, vous pouvez transmettre vos données personnalisées sous forme de fichier, comme le montre l’exemple suivant. Le fichier est converti en Base64.

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

Dans Azure Resource Manager, il existe une fonction 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')]"
        },

Traiter les données personnalisées

Les agents d’approvisionnement installés sur les machines virtuelles se chargent de la communication avec la plateforme et du placement des données sur le système de fichiers.

Windows

Les données personnalisées sont placées dans %SYSTEMDRIVE%\AzureData\CustomData.bin sous la forme d’un fichier binaire, mais elles ne sont pas traitées. Si vous voulez traiter ce fichier, vous devez générer une image personnalisée et écrire du code pour traiter CustomData.bin.

Linux

Sur les systèmes d’exploitation Linux, les données personnalisées sont transmises à la machine virtuelle via le fichier ovf-env.xml. Ce fichier est copié dans le répertoire /var/lib/waagent lors de l’approvisionnement. Les versions plus récentes de l’agent Linux copient les données encodées en Base64 dans /var/lib/waagent/CustomData pour des raisons pratiques.

Azure prend actuellement en charge deux agents de configuration :

  • Agent Linux. Par défaut, l’agent ne traite pas les données personnalisées. Vous devez générer une image personnalisée avec les données activées. Les paramètres pertinents sont les suivants :

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    Lorsque vous activez des données personnalisées et exécutez un script, la machine virtuelle ne signale pas une mise en service de machine virtuelle réussie tant que l’exécution du script n’est pas terminée. Si le script dépasse la durée totale d’approvisionnement de 40 minutes, la création de la machine virtuelle échoue.

    Si le script ne s’exécute pas ou si des erreurs se produisent pendant l’exécution, il ne s’agit pas d’un échec d’approvisionnement irrécupérable. Vous devez créer un chemin de notification pour vous avertir de l’état d’achèvement du script.

    Pour résoudre les problèmes d’exécution de données personnalisées, consultez /var/log/waagent.log.

  • cloud-init. Par défaut, cet agent traite les données personnalisées. Il accepte plusieurs formats de données personnalisées, tels que la configuration et les scripts de cloud-init.

    Comme pour l’agent Linux, si des erreurs se produisent pendant l’exécution du traitement de la configuration ou des scripts lorsque cloud-init traite les données personnalisées, il ne s’agit pas d’un échec d’approvisionnement irrécupérable. Vous devez créer un chemin de notification pour vous avertir de l’état d’achèvement du script.

    Cependant, contrairement à l’agent Linux, cloud-init n’attend pas que les configurations de données personnalisées de l’utilisateur soient terminées pour signaler à la plateforme que la machine virtuelle est prête. Pour plus d’informations sur cloud-init sur Azure, y compris la résolution des problèmes, consultez Prise en charge de cloud-init pour les machines virtuelles dans Azure.

Questions fréquentes (FAQ)

Puis-je mettre à jour les données personnalisées après la création de la machine virtuelle ?

Pour les machines virtuelles individuelles, vous ne pouvez pas mettre à jour les données personnalisées dans le modèle de machine virtuelle. Toutefois, pour Virtual Machine Scale Sets, vous pouvez mettre à jour des données personnalisées. Pour plus d’informations, consultez Modifier un groupe identique. Lorsque vous mettez à jour les données personnalisées dans le modèle pour un groupe de machines virtuelles identiques :

  • Les instances existantes du groupe identique ne reçoivent pas les données personnalisées mises à jour tant qu’elles n’ont pas été mises à jour avec le dernier modèle et réinitialisées.
  • Les nouvelles instances reçoivent les nouvelles données personnalisées.

Puis-je placer des valeurs sensibles dans les données personnalisées ?

Nous vous conseillons de ne pas stocker des données sensibles dans les données personnalisées. Pour plus d’informations, consultez Meilleures pratiques pour la sécurité et le chiffrement des données Azure.

Les données personnalisées sont-elles rendues disponibles dans IMDS ?

Les données personnalisées ne sont pas disponibles dans Azure Instance Metadata Service (IMDS). Nous vous suggérons d’utiliser des données utilisateur dans IMDS à la place. Pour plus d’informations, consultez Données utilisateur via Azure Instance Metadata Service.