VM benötigt Agent- oder Skriptinstallation? Installiere eine VM-Erweiterung

Veröffentlicht am:

CloudTrips muss Software auf einer VM ohne interaktive SSH-Sitzung installieren. Azure VM-Erweiterungen sind kleine Pakete, die der Azure VM Agent für Konfiguration, Überwachung, Sicherheit oder Verwaltung nach der Bereitstellung herunterlädt und ausführt.

Dieser Trip verwendet die Custom Script Extension Version 2, um NGINX zu installieren. NGINX ist ein Webserver: Er empfängt HTTP-Anfragen und liefert Webinhalte zurück. Hier dient er als einfache Arbeitslast, die beweist, dass die Erweiterung das Gastbetriebssystem geändert hat.

Verwende die vorhandene Linux-VM

Starte diese VM aus dem Linux-VM-Trip:

Resource group: rg-cloudtrips-compute-test-weu
Virtual machine: vm-cloudtrips-linux01-test-weu
Operating system: Ubuntu Server 24.04 LTS
Power state: Running

Falls sie nicht mehr existiert, führe zuerst Schnell einen Linux-Server benötigt? Erstelle eine Linux-VM aus. Azure-Marketplace-Images enthalten bereits den Azure Linux Agent, der Erweiterungen verarbeitet. Die VM benötigt außerdem ausgehenden Zugriff, damit Ubuntu die NGINX-Pakete herunterladen kann.

Installiere die Custom Script Extension

Öffne Azure Cloud Shell und wähle Bash. Führe aus:

az vm extension set \
  --resource-group rg-cloudtrips-compute-test-weu \
  --vm-name vm-cloudtrips-linux01-test-weu \
  --name CustomScript \
  --publisher Microsoft.Azure.Extensions \
  --version 2.1 \
  --settings '{"commandToExecute":"apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y nginx && systemctl enable --now nginx"}'

Die Erweiterung wird als root ausgeführt, daher benötigt der Befehl kein sudo. Er aktualisiert den Ubuntu-Paketindex, installiert NGINX, aktiviert den Dienst für den Systemstart und startet ihn sofort. Das Skript benötigt keine Benutzereingabe und seine Paketinstallationsbefehle können wiederholt werden.

Lege keine Passwörter, Schlüssel oder Token in --settings ab; öffentliche Einstellungen können über die Ressourcenkonfiguration sichtbar sein. Verwende geschützte Einstellungen oder eine verwaltete Identität, wenn ein echtes Skript Geheimnisse oder privaten Azure-Storage-Zugriff benötigt.

Überprüfe die Erweiterung

Öffne im Portal die VM > Extensions + applications. Bestätige:

Extension: CustomScript
Publisher: Microsoft.Azure.Extensions
Provisioning state: Succeeded

Seite „Extensions + applications“ der VM mit der CustomScript-Erweiterung und erfolgreichem Bereitstellungsstatus

Du kannst den Instanzstatus auch in Cloud Shell abfragen:

az vm extension show \
  --resource-group rg-cloudtrips-compute-test-weu \
  --vm-name vm-cloudtrips-linux01-test-weu \
  --name CustomScript \
  --instance-view \
  --query "{ProvisioningState:provisioningState,Status:instanceView.statuses[0].displayStatus,Message:instanceView.statuses[0].message}" \
  --output yaml

Überprüfe NGINX

Öffne die VM > Run command > RunShellScript und führe aus:

systemctl is-enabled nginx
systemctl is-active nginx
curl --fail --silent http://localhost/ | head

Die ersten beiden Befehle sollten enabled und active zurückgeben. Der letzte Befehl sollte den Anfang der NGINX-Willkommensseite liefern. Das beweist, dass die Software installiert ist und lokal HTTP bereitstellt; die Website wird dadurch nicht öffentlich erreichbar.

Run-Command-Ausgabe mit aktiviertem und aktivem NGINX sowie der lokalen Willkommensseite

Verstehe den Lebenszyklus

Die Custom Script Extension führt das konfigurierte Skript einmal aus. Sie ist weder ein Skript für jeden Systemstart noch ein vollständiges Konfigurationsverwaltungssystem. Eine aktualisierte Erweiterungskonfiguration kann einen neuen Befehl ausführen, aber auf einer VM kann jeweils nur eine Instanz der Custom Script Extension angewendet werden. Skripte sollten ohne Interaktion und idempotent laufen, innerhalb von 90 Minuten fertig werden und weder neu starten noch den Azure Linux Agent stoppen.

Das Löschen der Erweiterung entfernt ihren Handler und ihre Azure-Konfiguration, macht die Änderungen des Skripts jedoch nicht rückgängig. NGINX bleibt installiert, bis du es separat entfernst.

Bereinige

Entferne die Erweiterungsressource im Portal unter Extensions + applications > CustomScript > Uninstall, oder führe aus:

az vm extension delete \
  --resource-group rg-cloudtrips-compute-test-weu \
  --vm-name vm-cloudtrips-linux01-test-weu \
  --name CustomScript

Behalte die gemeinsam verwendete VM für spätere Trips. Wenn du auch NGINX entfernen möchtest, verwende RunShellScript:

sudo apt-get purge -y nginx nginx-common
sudo apt-get autoremove -y