Die PowerShell als plattformübergreifendes Framework zur Automatisierung, Konfiguration und Verwaltung von Systemen automatisiert auch Clouds abseits von Azure. So unterstützen auch AWS und Google Cloud Platform das Werkzeug – unser Workshop liefert das Rüstzeug für den Einsatz der PowerShell in diesen Infrastrukturen.
Starten wollen wir unsere Reise in den Cloudkosmos der PowerShell mit der Google Cloud Plattform (GCP). Wir zeigen, wie der verlässliche Automatisierer dort in Betrieb geht und wie Sie sich mit ihm typische Verwaltungsaufgaben vereinfachen. Der zweite Teil unseres Workshops zeigt dies dann analog für die AWS-Plattform.
PowerShell für GCP einrichten
In der Google-Cloud ist die PowerShell mittels der "Cloud Tools for PowerShell" [1] verfügbar. Google selbst sieht die PowerShell für Anwendungsfälle vor wie die Automatisierung von Windows-Arbeitslasten, die in GCP laufen. Dabei haben die bereitgestellten PowerShell-Module nicht den vollen Umfang der zugrundeliegenden SDK, es ist also keine Featureparität mit anderen Tools wie zum Beispiel Terraform vorhanden. Google veröffentlicht die Sourcen auf GitHub, sodass Sie bei Bedarf oder Interesse Einsicht in den aktuellen Stand nehmen können. Zum jetzigen Zeitpunkt liegt der Fokus auf der Automatisierung von virtuellen Maschinen, Cloud-Storage und Cloud-SQL – also vor allem bei IaaS-Workloads.
Die Installation der PowerShell für Google geht schnell von der Hand. Voraussetzung ist natürlich ein GCP-Zugang und ein Projekt, für das die Kostenabrechnung aktiviert ist. So ausgestattet, installieren Sie die gcloud-Befehlszeile über die PowerShell wie folgt:
Starten wollen wir unsere Reise in den Cloudkosmos der PowerShell mit der Google Cloud Plattform (GCP). Wir zeigen, wie der verlässliche Automatisierer dort in Betrieb geht und wie Sie sich mit ihm typische Verwaltungsaufgaben vereinfachen. Der zweite Teil unseres Workshops zeigt dies dann analog für die AWS-Plattform.
PowerShell für GCP einrichten
In der Google-Cloud ist die PowerShell mittels der "Cloud Tools for PowerShell" [1] verfügbar. Google selbst sieht die PowerShell für Anwendungsfälle vor wie die Automatisierung von Windows-Arbeitslasten, die in GCP laufen. Dabei haben die bereitgestellten PowerShell-Module nicht den vollen Umfang der zugrundeliegenden SDK, es ist also keine Featureparität mit anderen Tools wie zum Beispiel Terraform vorhanden. Google veröffentlicht die Sourcen auf GitHub, sodass Sie bei Bedarf oder Interesse Einsicht in den aktuellen Stand nehmen können. Zum jetzigen Zeitpunkt liegt der Fokus auf der Automatisierung von virtuellen Maschinen, Cloud-Storage und Cloud-SQL – also vor allem bei IaaS-Workloads.
Die Installation der PowerShell für Google geht schnell von der Hand. Voraussetzung ist natürlich ein GCP-Zugang und ein Projekt, für das die Kostenabrechnung aktiviert ist. So ausgestattet, installieren Sie die gcloud-Befehlszeile über die PowerShell wie folgt:
Install-Module GoogleCloud
Für die initiale Nutzung müssen Sie sich natürlich bei der Google-Cloud authentifizieren. Dies gelingt mit der gcloud-CLI – im Hintegrund nutzen die CloudTools für PowerShell diese Anmeldedaten, um mit der Google-API zu kommunizieren. Tippen Sie dazu schlicht gcloud init ein und sobald die Authentifizierung abgeschlossen ist, stehen Ihnen die Google-Cmdlets zur Verfügung.
Daten in GCP-Storage sichern
Ein beliebter Use Case der Cloud ist, Daten kostengünstig in einem Objektspeicher zu sichern. Dafür legen Sie zunächst einfach einen Bucket an:
$bucket = "<Name des Backup-Bucket>"
New-GcsBucket $bucket
Das New-GcsBucket-Cmdlet legt dabei den Bucket mit der vorher definierten Variablen an. Wichtig ist, dass Buckets weltweit eindeutig sein müssen und es sich so anbietet, mit einer Random-ID im Namen zu arbeiten.
Abschließend sind Sie in der Lage, Dateien in den Bucket hochzuladen. Dies erledigen Sie mit dem New-Gcs-Object-Cmdlet. Bei diesem Aufruf geben Sie den Ziel-Bucket und einen Objektnamen als Parameter an. Mit dem Parameter "-File" sichern Sie eine einzelne Datei und mittels des "Folder"-Parameters auch gleich einen ganzen Ordner.
Wenn dieser nicht direkt im Stammverzeichnis des Cloud-Storage-Buckets landen soll, geben Sie mit "-ObjectNamePrefix" ein Präfix an, das auf jedes hoch- geladene Objekt angewendet wird:
Um die Daten zu durchsuchen, nutzen Sie das Get-GcsObject-Cmdlet:
Get-GcsObject $bucket | Select Name, Size
Auch für das Lesen und Löschen gibt es Unterstützung – diese Vorgänge gelingen mit dem ReadGcs-Object- beziehungsweise dem Remove-GcsObject-Befehl.
Arbeiten mit Cloud DNS
Mit der PowerShell verwalten Sie in GCP auch Domains und deren Subdomains. Derart können Sie den Zonen Ressourceneinträge hinzufügen oder entfernen. Dabei ist es wichtig zu wissen, dass der DNS-Namespace aus mehreren Domains zusammengesetzt ist.
In Cloud DNS lassen sich verwaltete Zonen anlegen, um DNS-Zonen zu modellieren. Diese Zonen dienen als Container, in dem Sie DNS-Einträge wie zum Beispiel A-, CNAME- oder TXT-Einträge erstellen. Die verwalteten Einträge gruppieren sich nach dem Suffix. So befinden sich beispielsweise die Einträge "sclabs.net." und die Subdomain "gcp.sclabs.net." in der gleichen Zone, da sie den gleichen Suffix "sclabs.net." haben.
So ist es auch verständlich, dass Sie vor dem Hinzufügen von DNS-Einträgen zuerst eine verwaltete Zone anlegen müssen. Dies gelingt Ihnen wie folgt – wenn Sie zuvor Cloud DNS im entsprechenden Projekt aktiviert haben:
Add-GcdManagedZone -Name "<sclabs-net-zone>" -DnsName "<sclabs.net.>" -Description "<Name der Zone>"
Der Output dieses Befehls (NameServerSet : NameServers : {ns-cloud-e1.googledomains.com.[…]) zeigt Ihnen, dass für die Zone auch Nameserver definiert sind. Das Bild zeigt, dass sich die Zone anschließend auch in der Google-Cloud-Konsole betrachten und bei Bedarf ändern lässt.
Leider ist das PowerShell-Cmdlet an dieser Stelle nicht so mächtig wie sein gcloud-Pendant. So lassen sich zum aktuellen Zeitpunkt leider nur Public-Zonen anlegen – für Private-Zonen gibt es noch keine Unterstützung.
Um nun Ressourceneinträge zu erstellen, greifen Sie auf das Cmdlet "New-GcdResourceRecordSet" zurück. Hier legen wir beispielsweise einen A-Eintrag an:
$ARecord = New-GcdResourceRecordSet -Name "<sclabs.net.>" -Rrdata "<50.51.52.53>" -Type "A"
Um nun den Resource Record Set in die Zone einzubringen, verwenden Sie:
Natürlich gilt es in der Praxis, nicht nur Einträge hinzuzufügen, sondern bei Bedarf auch wieder zu löschen. Auch hierfür stellt GCP entsprechende PowerShell-Befehle parat:
Mithilfe des Remove-GcdManagedZone-Cmdlets gelingt anschließend das Löschen der ganzen Zone.
Compute-Engine-Instanzen verwalten
Wie auch bei den anderen Hyperscalern, sind virtuelle Maschinen die am meist angefragten Ressourcen in der Google-Cloud. Dementsprechend ist eine Unterstützung des Compute-Engine-Diensts durch PowerShell selbstverständlich. Dabei ist es Ihnen möglich, sowohl Instanzen zu erstellen als auch zu verwalten.
Vor dem Anlegen ist aber eine Instanzkonfiguration zu erzeugen. Dafür benötigen Sie einen Namen, einen Maschinentyp und ein Bootlaufwerk-Image (beziehungsweise ein bestehendes Bootlaufwerk). Ein Beispiel:
Um die VMs nun zu administrieren, müssen Sie sich zunächst eine Objektreferenz auf die zu ändernde VM besorgen:
$instance = Get-GceInstance my-vm
Nun steuern Sie mittels der folgenden Cmdlets den Lebenszyklus der virtuellen Maschine:
Stop-GceInstance $instance
Start-GceInstance $instance
Restart-GceInstance $instance
AWS PowerShell-Tools bereistellen
In AWS laufen die zugehörigen PowerShell-Cmdlets unter dem Namen "AWS Tools für PowerShell" [2] und basieren auf der vom "AWS SDK for .NET" bereitgestellten Funktionalität. Dabei unterstützen die Werkzeuge dieselben Services und AWS-Regionen wie das SDK. Genauso wie bei Google lässt sich die Umgebung auf Windows, Linux und macOS installieren. Die Basisinstallation geht schnell von der Hand:
Install-Module -Name AWS.Tools.Installer
Allerdings ist diese Installation noch nicht genug und Sie müssen für jeden Dienst, den Sie nutzen möchten, noch das entsprechende Modul nachinstallieren. Der folgende Befehl installiert beispielsweise die Module für EC3 und S3:
Install-AWSToolsModule AWS.Tools.EC2,AWS.Tools.S3
Wie beim Arbeiten mit der AWS-SDK üblich, benötigen Sie für die Authentifizierung und Autorisierung gegenüber der AWS-API einen Access- und einen Secret-Key. Damit diese allen Cmdlets zur Verfügung gestellt werden können, legen Sie ein neues Profil an:
Um nun eine Datei hochzuladen, gehen Sie folgendermaßen vor:
Write-S3Object -BucketName <Name des Bucket> -File <Name der Datei> -Key <S3-Schlüssel>
Dabei gibt der Parameter "-File" die hochzuladende Datei an und "-Key" sagt, unter welchem Schlüssel die Datei in S3 auffindbar ist. Sie entfernen eine Datei dem Remove-S3Object-Befehl wieder und löschen Buckets auf diese Art und Weise:
Remove-S3Bucket -BucketName <Name des Bucket>
Arbeiten mit EC2-Instanzen
Für das Erstellen einer EC2-Instanz in AWS benötigen Sie im Vorfeld einige Informationen: Mit dem Schlüsselpaar stellen Sie die notwendigen Informationen zur Anmeldung bereit. Dabei speichert AWS den öffentlichen Teil des Schlüsselpaars und hinterlegt ihn in den virtuellen Maschinen. Der private Teil verbleibt beim Nutzer und wird für die Anmeldung benötigt. Außerdem braucht AWS eine Sicherheitsgruppe, um den Netzwerkzugriff auf eine VM zu gestatten. Innerhalb einer Sicherheitsgruppe definieren Sie, wer (IP-Adresse oder Instanz) auf welchem Port Zugriff auf die VM erhält. Und schließlich spezifiziert ein AMI (Amazon Machine Image) das zu nutzende Template der VM. Legen wir also im ersten Schritt ein EC2-Schlüsselpaar an:
Für das Auflisten von AMIs gibt es zwei relevante Cmdlets: "Get-EC2Image" und "Get-EC2ImageByName". Der erste Befehl ruft eine Liste der einsetzbaren AMIs ab und erlaubt mit Filtern, die Ausgabe der AMIs einzuschränken:
Name : Windows_Server-2016-English-Core-Base-2019.08.16
OwnerId : 801119661308
Platform : Windows
ProductCodes : {}
Public : True
RamdiskId :
RootDeviceName : /dev/sda1
RootDeviceType : ebs
SriovNetSupport : simple
State : available
StateReason :
Tags : {}
VirtualizationType : hvm
Das Ergebnis dieses Kommandos zeigt Ihnen der Listing-Kasten. Wichtig ist dabei die "imageId", die Sie für das Erzeugen einer VM benötigen. Nun sind Sie in der Lage, eine Instanz zu starten:
Die PowerShell ist ein verlässlicher Begleiter in Sachen Automatisierung, den mittlerweile alle Hyperscaler unterstützen. Bei AWS bieten die PowerShell-Module den vollen Funktionsumfang der SDK, Google jedoch nur eingeschränkt. Dennoch stellen sie wertvolle Werkzeuge der Cloudverwaltung bereit und Administratoren benötigen nur wenig Einarbeitungszeit.