JohanSwanepoel - Fotolia
Azure: Cloud Deployments mit der PowerShell automatisieren
Mit dieser Schritt-für-Schritt-Anleitung lässt sich ein Azure Deployment per PowerShell automatisieren. Die Schritte erzeugen und starten einen virtuellen Server auf Azure.
Eines der grundlegenden Konzepte von Cloud Computing sind programmatisch wiederholbare Vorgänge. Das Deployment von Infrastruktur über die grafische Benutzerschnittstelle benötigt Zeit, ganz zu schweigen vom Faktor Mensch als Fehlerursache Nummer 1. IT-Administratoren sollten daher das Automatisieren von Cloud Deployments beherrschen.
Es gibt eine ganze Bandbreite von Werkzeugen für die Provisionierung, die mit Automatisierungsfähigkeiten ausgestattet sind. Administratoren können die PowerShell einsetzen, um Deployments von Microsoft-Produkten in der Cloud und vor Ort vorzunehmen. Die nachfolgend beschriebenen Schritte führen Sie als Anwender der PowerShell durch das Deployment von Microsoft Azure mit der Hilfe von Azure PowerShell Cmdlets.
Wir gehen in diesem Artikel davon aus, dass die PowerShell Cmdlets zuvor installiert worden sind. Wenn das nicht der Fall ist, laden Sie sie bitte hier herunter. Scrollen Sie herunter zu Befehlszeilentools und klicken Sie unter PowerShell auf Windows-Installation.
Die Schritte in dieser Anleitung erzeugen und starten einen virtuellen Server auf Azure. Ein IaaS-Deployment (Infrastructure as a Service) gliedert sich in zwei Prozesse: Das anfängliche Einrichten von Netzwerk, Firewall, Ressourcengruppen und Speicher sowie danach folgend das Anlegen und Deployment von VMs für Workloads.
Bevor Sie eine VM in Azures IaaS-Umgebung einbringen können, sollten Sie die Voraussetzungen an den Dienst oder die Infrastruktur kennen, die dort laufen wird. Führen Sie zuerst diesen Prozess korrekt aus, so spart Ihnen das später Zeit. Sind die ersten Setup-Werte eingetragen, so können Administratoren sich zukünftig den ermüdenden Prozess sparen, jedes einzelne Asset direkt in die Kommandozeile eingeben zu müssen.
Dieses Deployment basiert auf einer Ressourcengruppe, die logisch miteinander verbundene Arbeitsschritte zusammenlegt. Ressourcengruppen erleichtern die Verwaltung der darin enthaltenen Ressourcen. Ihr Cloud Deployment wird dadurch sauber und Sie können Aktionen auf ganze Ressourcengruppen statt nur auf einzelne Ressourcen anwenden.
Erzeugen der Infrastruktur
Um ein automatisiertes Cloud Deployment zu starten, öffnen Sie die PowerShell und loggen Sie sich mit dem folgenden Befehl in Azure ein:
Login-AzureRMAccount
Geben Sie bei Nachfrage Ihre Zugangsdaten für Azure ein. Die nachfolgende Ausgabe führt Ihre Azure Subscription ID und weitere Informationen auf. Erzeugen Sie jetzt die notwendige Ressourcengruppe für die VM-Ressourcen:
New-AzureRmResourceGroup -Name TechTargetTestGroup -Location "East US"
Statt TechTargetTestGroup sollten Sie hier einen eigenen Namen für diese Ressourcengruppe wählen. Geben Sie der Gruppe einen hilfreichen und erkennbaren Namen, etwa den der Anwendung, die darin gehostet wird. Letztlich geben Sie die gewünschte Azure-Region Ihrer Wahl an, im Beispiel ist das die Region East US.
Konfigurieren Sie die darunterliegenden Netzwerkressourcen für Netzwerkkonnektivität in der Ressourcengruppe. Dazu gehören Netzwerke, Subnetze, öffentliche IP-Adressen und Netzwerk-Sicherheitsgruppen.
Mit dem nachfolgenden Code werden alle benötigten Informationen an Variablen zugewiesen, die durch das Zeichen $ eingeleitet werden. Letztlich nutzen die Befehle diese Variablen an Stelle des Textes der Variablen. Cloud-Automatisierung macht auf diese Weise die Arbeit viel einfacher.
Das Deployment muss innerhalb Azure über ein Netzwerk verfügen, von dem es ein Subnetz ableitet:
$subnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name TechTargetSubnet -AddressPrefix 10.0.1.0/24
Der Adressbereich des Netzwerks ist in diesem Beispiel als 10.0.1.0/24 definiert. Erzeugen Sie das virtuelle Netzwerk unter Angabe des Subnetzes:
$vnet = New-AzureRmVirtualNetwork -ResourceGroupName TechTargetTestGroup -Location EastUS -Name MYTTNET -AddressPrefix 10.0.0.0/16 -Subnet $subnetConfig
Der Server benötigt eine öffentliche IP-Adresse, die zufällig zugeordnet werden kann:
$pip = New-AzureRmPublicIpAddress -ResourceGroupName TechTargetTestGroup -Location EastUS -AllocationMethod Static -IdleTimeoutInMinutes 4 -Name "mypublicdns$(Get-Random)"
Die Netzwerke und die öffentliche IP-Adresse sind jetzt konfiguriert. Netzwerk-Sicherheitsgruppen (Network Security Groups, NSGs) sind in einem Azure Deployment das Äquivalent von Firewall-Regeln, die auf eine oder mehrere Ressourcen oder Ressourcengruppen zur Verwaltung des Zugriffs angewendet wird.
Die nachfolgende Regel verwenden die NSG für eingehenden Traffic des Remote Desktop Protocols (RDP) und erzeugt die Gruppe:
$nsgRuleRDP = New-AzureRmNetworkSecurityRuleConfig -Name TT_Security_rule_RDP -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow
$nsg = New-AzureRmNetworkSecurityGroup –ResourceGroupName TechTargetTestGroup -Location EastUS -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
Bringen Sie nun die Konfigurationen für IP und Sicherheit zusammen:
# Erzeugen einer virtuellen Netzwerkkarte und Zuordnung einer öffentlichen IP-Adresse und NSG
$nic = New-AzureRmNetworkInterface -Name myNic –ResourceGroupName TechTargetTestGroup -Location EastUS -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id
Es gibt in einem Azure Deployment mehrere Möglichkeiten, das Konto für den Administrator anzulegen. Der nachfolgende Code ermittelt die Zugangsdaten aus den Eingabefeldern Username/Password und legt sie in der Variablen $cred ab.
$admindetails = Get-Credential
Deployment der VMs in der Azure Infrastruktur
Die vorbereitenden Arbeiten sind erledigt. Der Administrator kann nun die Größe der VM und den Typ des Betriebssystems festlegen. Der Befehl dafür nutzt all die Variablen, die wir in den obigen Schritten zusammengestellt haben.
Um Publisher vom Azure Marketplace für bestimmte gewünschte Systemimage-Typen einzubringen, folgen Sie den Anweisungen Microsofts. Wer sich es zutraut, kann dafür auch den PowerShell-Befehl verwenden:
Get-AzureVMImage | Where-Object {$_.OS -like 'Windows' -and $_.PublisherName -like 'Microsoft Windows Server Group'} | select Label, OS, PublisherName | FT
Auf ähnliche Weise erhalten Sie auch die Typen und Größen verfügbarer VMs, indem Sie den Befehl Get einsetzen:
Get-AzureRmVmSize -Location "East US" | select Name, NumberOfCores, MemoryInMB
Dieses Beispiel zeigt eine kleine Vielzweck-VM in der Größe A0. Der nachfolgende Code zieht im Wesentlichen alle Konfigurationsaspekte in der Variablen vmConfig so zusammen, dass nur noch die Ausführung auf sie wartet:
$vmConfig = New-AzureRmVMConfig -VMName TechTest1 -VMSize Standard_A0 | Set-AzureRmVMOperatingSystem -Windows -ComputerName TechTest1 -Credential $admindetails | Set-AzureRmVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | Add-AzureRmVMNetworkInterface -Id $nic.Id
Mit diesen Vorgaben erstellen Sie die VM mit dem nachfolgenden Befehl. Ersetzen Sie dabei die angegebenen Bezeichnungen und Werte durch Ihre eigenen:
New-AzureRmVM -ResourceGroupName TechTargetTestGroup -Location EastUS -VM $vmConfig
Das Anlegen der VM dauert durchaus ein paar Minuten, und es dauert sogar noch länger, bis eine Verbindung für Remote Desktop zur Verfügung steht. Um den Stand des Fortschritts zu ermitteln, loggen Sie sich im Azure-Portal ein, navigieren Sie zu Ihrer Ressourcengruppe und klicken Sie auf die VM. Sofern sie noch immer in der Erstellung befindlich ist, so werden Sie dort den Hinweis Creating lesen. Wenn schließlich alles funktioniert hat, berichtet PowerShell den Erfolg des Befehls.
Wenn Sie sich mit der erzeugten VM verbinden möchten, klicken Sie auf das Icon Connect im Azure VM Ribbon. Damit wird der Download einer Konfigurationsdatei für RDP ausgelöst, die vom RDP Client gelesen und importiert werden kann.
Zum Abschluss gilt es zu bedenken, dass die eingeschalteten Server in Ihrem Cloud-Deployment Ressourcen verbrauchen. Um die gesamte Umgebung zu löschen, navigieren Sie zu Ihrer Ressourcengruppe, wählen Sie Delete und geben Sie den Namen der Ressourcengruppe ein. Dadurch werden sämtliche Einrichtungen gelöscht, die Sie konfiguriert hatten. Diese Aktion zeigt besonders deutlich, wie viel einfacher das Leben eines Administrators durch das logische Gruppieren von zusammenhängenden Ressourcen wird.
Mit diesen grundlegenden Schritten kann ein Administrator bereits das Deployment von VMs auf Azure IaaS automatisieren. Sämtliche Dienste von Azure sind per PowerShell verfügbar, so dass Administratoren sie in vergleichbarer Weise aufsetzen und konsumieren können.
Automatisierung per Skript
Einzelne Befehle sind funktional. Erst durch Skripte werden sie wirklich nützlich. Kopieren Sie alle Befehle aus dieser Einführung, fügen Sie sie in eine einzelne Datei ein und lassen Sie diese als Skript ablaufen. Das mehrfache Ausführen von Skripten bedarf nahezu keines Aufwands, erfordert aber dennoch ein hohes Maß an Aufmerksamkeit, um Fehler bei der Automatisierung zu vermeiden.
Folgen Sie SearchDataCenter.de auch auf Twitter, Google+, Xing und Facebook!