Tutorial: Installieren von Anwendungen in Virtual Machine Scale Sets mit der Azure CLI

Um Anwendungen auf Instanzen virtueller Computer (VM) in einer Skalierungsgruppe auszuführen, müssen Sie zunächst die Anwendungskomponenten und erforderlichen Dateien installieren. In einem vorherigen Tutorial wurde beschrieben, wie Sie ein benutzerdefiniertes VM-Image erstellen und verwenden, um Ihre VM-Instanzen bereitzustellen. Dieses benutzerdefinierte Image umfasste manuelle Anwendungsinstallationen und -konfigurationen. Sie können die Installation von Anwendungen auch per Skalierungsgruppe automatisieren, nachdem die einzelnen VM-Instanzen bereitgestellt wurden, oder eine Anwendung aktualisieren, die bereits in einer Skalierungsgruppe ausgeführt wird. In diesem Tutorial lernen Sie Folgendes:

  • Anwendungen in Ihrer Skalierungsgruppe automatisch installieren
  • Verwenden der benutzerdefinierten Skripterweiterung von Azure
  • Aktualisieren einer laufenden Anwendung in einer Skalierungsgruppe

Wenn Sie nicht über ein Azure-Konto verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.

Voraussetzungen

  • Für diesen Artikel ist mindestens Version 2.0.29 der Azure CLI erforderlich. Bei Verwendung von Azure Cloud Shell ist die aktuelle Version bereits installiert.

Was ist die benutzerdefinierte Skripterweiterung von Azure?

Die benutzerdefinierte Skripterweiterung lädt Skripts auf Azure-VMs herunter und führt sie aus. Diese Erweiterung ist hilfreich bei der Konfiguration nach der Bereitstellung, bei der Softwareinstallation oder bei anderen Konfigurations-/Verwaltungsaufgaben. Skripts können aus Azure Storage oder GitHub heruntergeladen oder dem Azure-Portal zur Laufzeit der Erweiterung bereitgestellt werden.

Die benutzerdefinierte Skripterweiterung kann in Azure Resource Manager-Vorlagen integriert und auch mit der Azure CLI, Azure PowerShell, dem Azure-Portal oder der REST-API verwendet werden. Weitere Informationen finden Sie unter Übersicht über benutzerdefinierte Skripterweiterungen.

Zum Verwenden der benutzerdefinierten Skripterweiterung mit der Azure CLI erstellen Sie eine JSON-Datei, mit der definiert wird, welche Dateien beschafft und welche Befehle ausgeführt werden sollen. Diese JSON-Definitionen können über mehrere Bereitstellungen von Skalierungsgruppen hinweg wiederverwendet werden, um konsistente Anwendungsinstallationen zu gewährleisten.

Erstellen der Definition für die benutzerdefinierte Skripterweiterung

Um die Custom Script Extension in Aktion zu sehen, erstellen wir eine VM-Skalierungsgruppe, die den NGINX-Webserver installiert und den Hostnamen der VM-Instanz in der Skalierungsgruppe ausgibt. Mit der folgenden Definition der benutzerdefinierten Skripterweiterung wird ein Beispielskript von GitHub heruntergeladen, die erforderlichen Pakete werden installiert, und anschließend wird der Hostname der VM-Instanz auf eine einfache HTML-Seite geschrieben.

Erstellen Sie in der aktuellen Shell eine Datei namens customConfig.json, und fügen Sie die folgende Konfiguration ein. Erstellen Sie die Datei beispielsweise in Cloud Shell, nicht auf dem lokalen Computer. Dazu können Sie einen beliebigen Editor verwenden. In diesem Tutorial verwenden Sie vi. Geben Sie vi in der Cloud Shell ein. Fügen Sie den folgenden JSON-Code in den Editor ein, und geben Sie :w customConfig.json ein.

{
  "fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx.sh"],
  "commandToExecute": './automate_nginx.sh'
}

Hinweis

Möglicherweise müssen Sie die Verwendung der einfachen (') und doppelten Anführungszeichen (") innerhalb des JSON-Blocks umkehren, wenn Sie sich dazu entschließen, im Parameter --settings weiter unten direkt auf den JSON-Code zu verweisen (anstatt auf die Datei customConfig.json).

Erstellen einer Skalierungsgruppe

Wichtig

Ab November 2023 werden VM-Skalierungsgruppen, die mit PowerShell und der Azure CLI erstellt wurden, standardmäßig auf den flexiblen Orchestrierungsmodus festgelegt, wenn kein Orchestrierungsmodus angegeben wird. Weitere Informationen zu dieser Änderung und zu den Maßnahmen, die Sie ergreifen sollten, finden Sie unter Breaking Change für PowerShell-/CLI-Kunden mit VMSS – Microsoft Community Hub.

Erstellen Sie mit az group create eine Ressourcengruppe. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup am Standort eastus erstellt:

az group create --name myResourceGroup --location eastus

Erstellen Sie dann mit az vmss create eine VM-Skalierungsgruppe. Im folgenden Beispiel wird eine Skalierungsgruppe mit dem Namen myScaleSet erstellt, und es werden SSH-Schlüssel generiert, falls sie noch nicht vorhanden sind:

az vmss create \
  --resource-group myResourceGroup \
  --name myScaleSet \
  --image Ubuntu2204 \
  --orchestration-mode Flexible \
  --admin-username azureuser \
  --generate-ssh-keys

Das Erstellen und Konfigurieren aller Ressourcen und VMs des Skalierungssets dauert einige Minuten.

Anwenden der benutzerdefinierten Skripterweiterung

Wenden Sie die Konfiguration der benutzerdefinierten Skripterweiterung auf die VM-Instanzen in Ihrer Skalierungsgruppe an, indem Sie az vmss extension set verwenden. Im folgenden Beispiel wird die Konfiguration customConfig.json auf die myScaleSet-VM-Instanzen in der Ressourcengruppe myResourceGroup angewendet:

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings customConfig.json

Achtung

Bei Dateinamen wird zwischen Groß- und Kleinschreibung unterschieden. Verwenden Sie den genauen Dateinamen, der in diesen Anweisungen angegeben ist, um ein Scheitern zu vermeiden.

Anwenden der Erweiterung auf die vorhandenen Skalierungsgruppeninstanzen

Aktualisieren Sie alle Instanzen, um das benutzerdefinierte Skript anzuwenden. Das Upgrade kann einige Minuten dauern.

az vmss update-instances --resource-group myResourceGroup --name myScaleSet --instance-ids "*"

Datenverkehr über Port 80 zulassen

Damit Datenverkehr über den Lastenausgleich an die VMs übertragen werden kann, muss die standardmäßige Netzwerksicherheitsgruppe aktualisiert werden.

az network nsg rule create --name AllowHTTP --resource-group myResourceGroup --nsg-name myScaleSetNSG --access Allow --priority 1010 --destination-port-ranges 80 

Testen Sie Ihre Skalierungsgruppe

Um den Webserver in Aktion zu sehen, rufen Sie mit az network public-ip show die öffentliche IP-Adresse des Lastenausgleichsmoduls ab. Im folgenden Beispiel wird die IP-Adresse für myScaleSetLBPublicIP abgerufen, die als Teil der Skalierungsgruppe erstellt wurde:

az network public-ip show \
  --resource-group myResourceGroup \
  --name myScaleSetLBPublicIP \
  --query [ipAddress] \
  --output tsv

Geben Sie die öffentliche IP-Adresse des Lastenausgleichsmoduls in einen Webbrowser ein. Das Lastenausgleichsmodul verteilt den Datenverkehr auf eine Ihrer VM-Instanzen. Dies ist im folgenden Beispiel dargestellt:

Einfache Webseite in NGINX

Lassen Sie den Webbrowser geöffnet, damit Sie im nächsten Schritt die aktualisierte Version sehen können.

Ändern Sie die Upgrade-Richtlinie

Im vorherigen Abschnitt war eine manuelle Aktualisierung erforderlich, um die aktualisierte Anwendung auf alle Scale-Set-Instanzen zu übernehmen. Damit Updates automatisch auf alle vorhandenen Skalierungsgruppeninstanzen angewendet werden können, ändern Sie die Upgraderichtlinie von „Manuell“ in „Automatisch“. Weitere Informationen zu Upgraderichtlinien finden Sie unter Upgraderichtlinien für VM-Skalierungsgruppen.

az vmss update \
    --name myScaleSet \
    --resource-group myResourceGroup \
    --set upgradePolicy.mode=automatic

Aktualisieren der App-Bereitstellung

Erstellen Sie in der aktuellen Shell eine Datei namens customConfigv2.json, und fügen Sie die folgende Konfiguration ein. Diese Definition führt eine aktualisierte v2-Version des Anwendungsinstallationsskripts aus:

{
  "fileUris": ["https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate_nginx_v2.sh"],
  "commandToExecute": "./automate_nginx_v2.sh"
}

Wenden Sie die Konfiguration der benutzerdefinierten Skripterweiterung mit az vmss extension set erneut auf Ihre Skalierungsgruppe an. Die Definition customConfigv2.json wird verwendet, um die aktualisierte Version der Anwendung anzuwenden:

az vmss extension set \
  --publisher Microsoft.Azure.Extensions \
  --version 2.0 \
  --name CustomScript \
  --resource-group myResourceGroup \
  --vmss-name myScaleSet \
  --settings @customConfigv2.json

Da die Skalierungsgruppe jetzt eine Richtlinie für automatische Upgrades verwendet, wird die aktualisierte Anwendung automatisch auf vorhandene Skalierungsgruppeninstanzen angewendet. Aktualisieren Sie Ihren Webbrowser, um die aktualisierte Anwendung anzuzeigen.

Aktualisierte Webseite in NGINX

Bereinigen von Ressourcen

Um Ihre Skalierungsgruppe und weitere Ressourcen zu entfernen, löschen Sie die Ressourcengruppe und alle darin enthaltenen Ressourcen mit az group delete. Der Parameter --no-wait gibt die Steuerung an die Eingabeaufforderung zurück, ohne zu warten, bis der Vorgang abgeschlossen ist. Der Parameter --yes bestätigt ohne eine zusätzliche Aufforderung, dass Sie die Ressourcen löschen möchten.

az group delete --name myResourceGroup --no-wait --yes

Nächste Schritte

In diesem Tutorial wurde beschrieben, wie Sie Anwendungen in Ihrer Skalierungsgruppe mit der Azure CLI automatisch installieren und aktualisieren:

  • Anwendungen in Ihrer Skalierungsgruppe automatisch installieren
  • Verwenden der benutzerdefinierten Skripterweiterung von Azure
  • Aktualisieren einer laufenden Anwendung in einer Skalierungsgruppe

Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie die Größe Ihrer Skalierungsgruppe automatisch anpassen.