Teilen über


Benutzerdefinierte Daten und cloud-init auf virtuellen Azure-Computern

Gilt für: ✔️ Linux-VMs ✔️ Windows-VMs ✔️ Flexible Skalierungsgruppen

Möglicherweise müssen Sie zum Zeitpunkt der Bereitstellung ein Skript oder andere Metadaten in einen virtuellen Microsoft Azure-Computer (VM) einfügen. In anderen Clouds wird dieses Konzept häufig als Benutzerdaten bezeichnet. Microsoft Azure verfügt über ein ähnliches Feature, das als benutzerdefinierte Daten bezeichnet wird.

Benutzerdefinierte Daten werden dem virtuellen Computer während des ersten Starts oder der Einrichtung zur Verfügung gestellt, was als Bereitstellung bezeichnet wird. Bei der Bereitstellung werden VM-Erstellungsparameter (z. B. Hostname, Benutzername, Kennwort, Zertifikate, benutzerdefinierte Daten und Schlüssel) für den virtuellen Computer zur Verfügung gestellt. Ein Bereitstellungs-Agent, z. B. der Linux-Agent oder cloud-init, verarbeitet diese Parameter.

Übergeben von benutzerdefinierten Daten an die VM

Wenn Sie benutzerdefinierte Daten verwenden möchten, müssen Sie die Inhalte mit Base64 codieren, bevor Sie die Daten an die API übergeben. Dies gilt jedoch nicht, wenn Sie ein CLI-Tool verwenden, das diese Konvertierung durchführt, z. B. die Azure-Befehlszeilenschnittstelle. Die Dateigröße darf 64 KB nicht überschreiten.

In der CLI können Sie Ihre benutzerdefinierten Daten wie im folgenden Beispiel gezeigt als Datei übergeben. Die Datei wird in Base64 konvertiert.

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

In Azure Resource Manager gibt es eine Base64-Funktion:

"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')]"
        },

Verarbeiten benutzerdefinierter Daten

Die auf den virtuellen Computern installierten Bereitstellungs-Agents verarbeiten die Kommunikation mit der Plattform und das Platzieren der Daten im Dateisystem.

Windows

Benutzerdefinierte Daten werden in %SYSTEMDRIVE%\AzureData\CustomData.bin als Binärdatei abgelegt, jedoch nicht verarbeitet. Wenn Sie diese Datei verarbeiten möchten, müssen Sie ein benutzerdefiniertes Image erstellen und Code schreiben, der die Datei CustomData.bin verarbeitet.

Linux

Unter Linux-Betriebssystemen werden benutzerdefinierte Daten über die Datei ovf-env.xml an den virtuellen Computer übergeben. Diese Datei wird während der Bereitstellung in das Verzeichnis /var/lib/waagent kopiert. Neuere Versionen des Linux-Agents kopieren die Base64-codierten Daten zur Vereinfachung in /var/lib/waagent/CustomData.

Azure unterstützt derzeit zwei Bereitstellungs-Agents:

  • Linux-Agent. Standardmäßig verarbeitet der Agent keine benutzerdefinierten Daten. Sie müssen ein benutzerdefiniertes Image mit aktivierten Daten erstellen. Die relevanten Einstellungen sind:

    • Provisioning.DecodeCustomData
    • Provisioning.ExecuteCustomData

    Wenn Sie benutzerdefinierte Daten aktivieren und ein Skript ausführen, meldet der virtuelle Computer erst dann eine erfolgreiche VM-Bereitstellung, wenn die Ausführung des Skripts abgeschlossen ist. Wenn das Skript die VM-Bereitstellungsdauer von 40 Minuten überschreitet, tritt beim Erstellen des virtuellen Computers ein Fehler auf.

    Wenn das Skript nicht ausgeführt werden kann oder während der Ausführung Fehler auftreten, ist dies kein schwerwiegender Bereitstellungsfehler. Sie müssen einen Benachrichtigungspfad erstellen, damit Sie hinsichtlich des Abschlusszustands des Skripts gewarnt werden.

    Weitere Informationen zur Problembehandlung für die Ausführung von benutzerdefinierten Daten finden Sie unter /var/log/waagent.log.

  • cloud-init. Standardmäßig verarbeitet dieser Agent benutzerdefinierte Daten. Er akzeptiert mehrere Formate von benutzerdefinierten Daten, z. B. die cloud-init-Konfiguration und Skripts.

    Ähnlich wie beim Linux-Agent ist dies kein schwerwiegender Bereitstellungsfehler, wenn während der Ausführung der Konfigurationsverarbeitung oder von Skripts Fehler auftreten, wenn cloud-init die benutzerdefinierten Daten verarbeitet. Sie müssen einen Benachrichtigungspfad erstellen, damit Sie hinsichtlich des Abschlusszustands des Skripts gewarnt werden.

    Im Gegensatz zum Linux-Agent wartet cloud-init jedoch nicht, bis benutzerdefinierte Datenkonfigurationen vom Benutzer abgeschlossen sind, bevor die Meldung an die Plattform erfolgt, dass der virtuelle Computer bereit ist. Weitere Informationen zu cloud-init in Azure, einschließlich der Problembehandlung, finden Sie unter cloud-init-Unterstützung für virtuelle Computer in Azure.

Häufig gestellte Fragen

Kann ich benutzerdefinierte Daten nach dem Erstellen der VM aktualisieren?

Bei einzelnen virtuellen Computern können Sie die benutzerdefinierten Daten im VM-Modell nicht aktualisieren. Für Virtual Machine Scale Sets können Sie jedoch benutzerdefinierte Daten aktualisieren. Weitere Informationen finden Sie unter Ändern einer Skalierungsgruppe. Wenn Sie benutzerdefinierte Daten im Modell für eine VM-Skalierungsgruppe aktualisieren:

  • Vorhandene Instanzen in der Skalierungsgruppe erhalten die aktualisierten benutzerdefinierten Daten erst, wenn sie auf das aktuelle Modell aktualisiert und für sie ein Reimaging durchgeführt wurde.
  • Neue Instanzen erhalten die neuen benutzerdefinierten Daten.

Kann ich vertrauliche Werte in benutzerdefinierte Daten einschließen?

Es wird empfohlen, vertrauliche Daten nicht in benutzerdefinierten Daten zu speichern. Weitere Informationen finden Sie unter Bewährte Methoden für die Datensicherheit und Verschlüsselung in Azure.

Werden benutzerdefinierte Daten in IMDS zur Verfügung gestellt?

Benutzerdefinierte Daten sind in Azure Instance Metadata Service (IMDS) nicht verfügbar. Wir empfehlen stattdessen die Verwendung von Benutzerdaten in IMDS. Weitere Informationen finden Sie unter Benutzerdaten über Azure Instance Metadata Service.