Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à : ✔️ Machines virtuelles Linux ✔️ Machines virtuelles Windows ✔️ Groupes de machines virtuelles 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. Azure prend en charge ce scénario par le biais d’une fonctionnalité 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 cloud-init, traite ces paramètres.
Note
Azure propose également une fonctionnalité de données utilisateur distincte. Contrairement aux données personnalisées, les données utilisateur sont récupérables à partir du service de métadonnées d’instance de Azure (IMDS), sont persistantes pendant la durée de vie de la machine virtuelle et peuvent être mises à jour sans arrêter ou recréer la machine virtuelle. Utilisez des données utilisateur lorsque vous avez besoin d’un accès ou d’une mise à jour post-provisionnement ; utilisez des données personnalisées lorsque vous avez besoin d’une charge utile traitée par l’agent d’approvisionnement au premier démarrage.
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 en tant que fichier binaire, mais elles ne sont pas traitées. Pour traiter ce fichier, générez une image personnalisée et écrivez du code qui lit CustomData.bin.
Le dossier%SystemDrive%\AzureData est sécurisé pendant l’approvisionnement afin que seuls NT AUTHORITY\SYSTEM et BUILTIN\Administrators aient un contrôle total, et CustomData.bin hérite de ces autorisations. Si vous copiez CustomData.bin ailleurs pour le traitement, définissez explicitement les autorisations sur la destination, car ses autorisations ne sont pas transférées avec le fichier..
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.DecodeCustomDataProvisioning.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 prend en charge plusieurs formats de données personnalisées, tels que la configuration cloud-init et les scripts.
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 Support 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 de machines virtuelles identiques. Lorsque vous mettez à jour les données personnalisées du modèle pour un groupe de machines virtuelles identiques :
- Les instances existantes du groupe identique de machines virtuelles ne reçoivent pas les données personnalisées mises à jour tant qu’elles n’ont pas été mises à jour vers le dernier modèle et réimagé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 en matière de sécurité et de chiffrement des données dans Azure.
Les données personnalisées sont-elles rendues disponibles dans IMDS ?
Non. Les données personnalisées ne sont pas exposées via le service de métadonnées d'instance Azure (IMDS). Si vous devez récupérer une charge utile à partir de l’intérieur de la machine virtuelle après l’approvisionnement ou la mettre à jour sans arrêter ou réimager la machine virtuelle, utilisez la fonctionnalité de données utilisateur à la place. Pour plus d’informations sur la lecture des données utilisateur à partir d’IMDS, consultez Obtenir des données utilisateur.