Tutorial: Installieren von Anwendungen in Virtual Machine Scale Sets mit Azure PowerShell
Zum Ausführen von Anwendungen auf VM-Instanzen in einer Skalierungsgruppe müssen Sie zuerst 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:
- Automatisches Installieren von Anwendungen in Ihrer Skalierungsgruppe
- Verwenden der benutzerdefinierten Skripterweiterung von Azure
- Aktualisieren einer ausgeführten Anwendung in einer Skalierungsgruppe
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Azure Cloud Shell
Azure hostet Azure Cloud Shell, eine interaktive Shell-Umgebung, die Sie über Ihren Browser nutzen können. Sie können entweder Bash oder PowerShell mit Cloud Shell verwenden, um mit Azure-Diensten zu arbeiten. Sie können die vorinstallierten Befehle von Cloud Shell verwenden, um den Code in diesem Artikel auszuführen, ohne etwas in Ihrer lokalen Umgebung installieren zu müssen.
Starten von Azure Cloud Shell:
Option | Beispiel/Link |
---|---|
Wählen Sie rechts oben in einem Code- oder Befehlsblock die Option Ausprobieren aus. Durch die Auswahl von Ausprobieren wird der Code oder Befehl nicht automatisch in Cloud Shell kopiert. | |
Rufen Sie https://shell.azure.com auf, oder klicken Sie auf die Schaltfläche Cloud Shell starten, um Cloud Shell im Browser zu öffnen. | |
Wählen Sie im Azure-Portal rechts oben im Menü die Schaltfläche Cloud Shell aus. |
So verwenden Sie Azure Cloud Shell:
Starten Sie Cloud Shell.
Wählen Sie die Schaltfläche Kopieren für einen Codeblock (oder Befehlsblock) aus, um den Code oder Befehl zu kopieren.
Fügen Sie den Code oder Befehl mit STRG+UMSCHALT+V unter Windows und Linux oder CMD+UMSCHALT+V unter macOS in die Cloud Shell-Sitzung ein.
Drücken Sie die EINGABETASTE, um den Code oder Befehl auszuführen.
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 für die Erweiterung bereitgestellt werden.
Die Erweiterung für benutzerdefinierte Skripts ist in Azure Resource Manager-Vorlagen integriert. Sie kann auch mit der Azure CLI, mit Azure PowerShell, mit dem Azure-Portal oder der REST-API verwendet werden. Weitere Informationen finden Sie unter Übersicht über benutzerdefinierte Skripterweiterungen.
Wenn Sie die benutzerdefinierte Skripterweiterung in Aktion sehen möchten, können Sie eine Skalierungsgruppe erstellen, mit der der IIS-Webserver installiert und der Hostname einer VM-Instanz der Skalierungsgruppe ausgegeben wird. Mit der 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 einer Skalierungsgruppe
Erstellen Sie mit New-AzResourceGroup eine Ressourcengruppe. Im folgenden Beispiel wird eine Ressourcengruppe mit dem Namen myResourceGroup am Standort East US (USA, Osten) erstellt:
New-AzResourceGroup -Name myResourceGroup -Location "East US"
Erstellen Sie nun mit New-AzVmss eine VM-Skalierungsgruppe. Um Datenverkehr an die einzelnen VM-Instanzen zu verteilen, wird auch ein Lastenausgleich erstellt. Der Lastenausgleich enthält Regeln zum Verteilen von Datenverkehr über TCP-Port 80. Er lässt außerdem Remotedesktop-Datenverkehr über TCP-Port 3389 und PowerShell-Remoting über TCP-Port 5985 zu. Bei entsprechender Aufforderung können Sie Ihre eigenen Administratoranmeldeinformationen für die VM-Instanzen in der Skalierungsgruppe festlegen:
New-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet" `
-OrchestrationMode "Flexible" `
-Location "EastUS" `
-UpgradePolicyMode "Manual" `
-VirtualNetworkName "myVnet" `
-SubnetName "mySubnet" `
-PublicIpAddressName "myPublicIPAddress" `
-LoadBalancerName "myLoadBalancer"
Die Erstellung und Konfiguration aller Ressourcen und virtuellen Computer der Skalierungsgruppe dauert einige Minuten.
Erstellen der Definition für die benutzerdefinierte Skripterweiterung
In Azure PowerShell wird eine Hashtabelle zum Speichern der herunterzuladenden Tabelle und des auszuführenden Befehls verwendet. Im folgenden Beispiel wird ein Beispielskript von GitHub verwendet. Erstellen Sie zunächst wie folgt dieses Konfigurationsobjekt:
$customConfig = @{
"fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
"commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}
Wenden Sie nun mit Add-AzVmssExtension die benutzerdefinierte Skripterweiterung an. Das zuvor definierte Konfigurationsobjekt wird an die Erweiterung übergeben. Aktualisieren Sie die Erweiterung in den Skalierungsgruppenprofil-Instanzen mithilfe von Update-AzVmss.
# Get information about the scale set
$vmss = Get-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet"
# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension `
-VirtualMachineScaleSet $vmss `
-Name "customScript" `
-Publisher "Microsoft.Compute" `
-Type "CustomScriptExtension" `
-TypeHandlerVersion 1.9 `
-Setting $customConfig
# Update the scale set
Update-AzVmss `
-ResourceGroupName "myResourceGroup" `
-Name "myScaleSet" `
-VirtualMachineScaleSet $vmss
Hinzufügen der Erweiterung zu den vorhandenen Skalierungsgruppeninstanzen
Führen Sie ein manuelles Upgrade aus, um die aktualisierte Erweiterung auf alle vorhandenen Skalierungsgruppeninstanzen anzuwenden. Es kann einige Minuten dauern, bis die Aktualisierung abgeschlossen ist.
Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"
Jede VM-Instanz in der Skalierungsgruppe wird heruntergeladen und führt das Skript von GitHub aus. In einem komplexeren Beispiel können auch mehrere Anwendungskomponenten und Dateien installiert werden. Wenn die Skalierungsgruppe zentral hochskaliert wird, wenden die neuen VM-Instanzen automatisch dieselbe Definition der benutzerdefinierten Skripterweiterung an und installieren die erforderliche Anwendung.
Zulassen von Datenverkehr für die Anwendung
Erstellen Sie mit New-AzNetworkSecurityRuleConfig und New-AzNetworkSecurityRuleConfig eine Netzwerksicherheitsgruppe, um den Zugriff auf die einfache Webanwendung zuzulassen. Weitere Informationen finden Sie unter Netzwerk für Azure-VM-Skalierungsgruppen.
#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
-Name myFrontendNSGRule `
-Protocol Tcp `
-Direction Inbound `
-Priority 200 `
-SourceAddressPrefix * `
-SourcePortRange * `
-DestinationAddressPrefix * `
-DestinationPortRange 80 `
-Access Allow
#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
-ResourceGroupName "myResourceGroup" `
-Location EastUS `
-Name myFrontendNSG `
-SecurityRules $nsgFrontendRule
$vnet = Get-AzVirtualNetwork `
-ResourceGroupName "myResourceGroup" `
-Name myVnet
$frontendSubnet = $vnet.Subnets[0]
$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
-VirtualNetwork $vnet `
-Name mySubnet `
-AddressPrefix $frontendSubnet.AddressPrefix `
-NetworkSecurityGroup $nsgFrontend
Set-AzVirtualNetwork -VirtualNetwork $vnet
Testen Ihrer Skalierungsgruppe
Um Ihren Webserver in Aktion zu sehen, rufen Sie mit Get-AzPublicIpAddress die öffentliche IP-Adresse Ihres Load Balancers ab. Im folgenden Beispiel wird die IP-Adresse angezeigt, die in der Ressourcengruppe myResourceGroup erstellt wurde:
Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress
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:
Lassen Sie den Webbrowser geöffnet, damit Sie im nächsten Schritt die aktualisierte Version sehen können.
Ändern der Upgraderichtlinie
Um die aktualisierte Anwendung auf alle Skalierungssatzinstanzen anzuwenden, war im vorherigen Abschnitt ein manuelles Upgrade erforderlich. 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.
$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"
Update-Azvmss `
-ResourceGroupName "myResourceGroup" `
-Name "myScaleSet" `
-UpgradePolicyMode "Automatic" `
-VirtualMachineScaleSet $vmss
Aktualisieren der App-Bereitstellung
Während des Lebenszyklus einer Skalierungsgruppe müssen Sie ggf. eine aktualisierte Version Ihrer Anwendung bereitstellen. Mit der benutzerdefinierten Skripterweiterung können Sie auf ein aktualisiertes Bereitstellungsskript verweisen und die Erweiterung dann erneut auf Ihre Skalierungsgruppe anwenden.
Erstellen Sie eine neue Konfigurationsdefinition mit dem Namen customConfigv2. Diese Definition führt eine aktualisierte v2-Version des Anwendungsinstallationsskripts aus:
$customConfigv2 = @{
"fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
"commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}
Aktualisieren Sie die Konfiguration der benutzerdefinierten Skripterweiterung auf die VM-Instanzen in Ihrer Skalierungsgruppe. Die Definition customConfigv2 wird verwendet, um die aktualisierte Version der Anwendung auf die Skalierungsgruppe anzuwenden:
$vmss = Get-AzVmss `
-ResourceGroupName "myResourceGroup" `
-VMScaleSetName "myScaleSet"
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
Update-AzVmss `
-ResourceGroupName "myResourceGroup" `
-Name "myScaleSet" `
-VirtualMachineScaleSet $vmss
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. Aktualisieren Sie die Webseite in Ihrem Browser, um die aktualisierte Version anzuzeigen:
Bereinigen von Ressourcen
Löschen Sie mit Remove-AzResourceGroup die Ressourcengruppe und alle dazugehörigen Ressourcen, um Ihre Skalierungsgruppe und die weiteren Ressourcen zu entfernen. Der Parameter -Force
bestätigt ohne eine zusätzliche Aufforderung, dass Sie die Ressourcen löschen möchten. Der Parameter -AsJob
gibt die Steuerung an die Eingabeaufforderung zurück, ohne zu warten, bis der Vorgang abgeschlossen ist.
Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob
Nächste Schritte
In diesem Tutorial wurde beschrieben, wie Sie Anwendungen in Ihrer Skalierungsgruppe mit Azure PowerShell automatisch installieren und aktualisieren:
- Automatisches Installieren von Anwendungen in Ihrer Skalierungsgruppe
- Verwenden der benutzerdefinierten Skripterweiterung von Azure
- Aktualisieren einer ausgeführten Anwendung in einer Skalierungsgruppe
Fahren Sie mit dem nächsten Tutorial fort, um zu erfahren, wie Sie Ihre Skalierungsgruppe automatisch skalieren.