Azure Cloud Shell

AzureCLI

Als das ist wirklich cool, wer viel mit Azure und der Cloud arbeitet, hat sich ja bestimmt schon eigene PowerShell Skripte oder Module gebaut. Mit der neuen Azure Cloud Shell kann man jetzt sein Skript Repository direkt in der Cloud ausführen.

Update 30.07.2018: Kapitel „Update Linux Cloud Shell“ hinzugefügt

Update 23.10.2018: Diverse Fehler in den Skripten korrigiert (Ordner, Variablen eingefügt, Enable-AzureRMAlias). Informationen entfernt, die es mit dem aktuellen Release nicht mehr gibt bzw. nicht mehr funktionieren.

Für mich ganz besonders spannend, denn ich habe ein Modul zur Verwaltung verschiedenster Testumgebungen und SharePoint PaaS Umgebungen, die weitesgehend auf Azure VMs, Storage und co basieren. Solche Aufgaben laufen von mehreren Minuten bis hin zu Stunden, und wehe wenn ich mal an einem anderen Rechner sitze. Cloud Shell löst das, einfach im Azure Portal anmelden, PowerShell starten und alles wie gewohnt starten.

Installation Azure Cloud Shell

Die Installation erfolgt leicht und ist kostenlos. Es werden lediglich folgende Ressourcen angelegt:

  • Resource Group (am Besten eine Eigene)
  • Storage Account

Los geht’s mit dem Klick auf die Shell:

AzureCLI-InitialSetup
Screenshot: Azure Cloud Shell – Initial Setup

Aus Gewohnheit und Prinzip drücken wir Admins immer auf „Erweitert“, damit kann ich auch sicherstellen, dass ich in der Region meiner Wahl bin:

AzureCLI-InitialSetup-Advanced
Screenshot: Azure Cloud Shell – Initial Setup Advanced

Bitte bei der Eingabe von Storage Account und File Share darauf achten, dass nur Kleinbuchstaben ohne Leerzeichen verwendet werden – sonst kommt es zum Fehler.

Installation AzureRM PowerShell Module

Wer dies vorher per MSI installiert hat, darf jetzt direkt per PowerShell installieren, denn MSI gibt es hier nicht, auch wenn dahinter eine VM steckt:

Update 23.10.2018: Nicht mehr notwendig, bzw. funktioniert auch gar nicht mehr. Die Azure PowerShell ist vorinstalliert und heißt jetzt „Az“, z.B. Get-AzVM für Get-AzureRMVM.

Install-Module AzureRM -AllowClobber

Installation eigener Module

Wie gesagt habe ich ein eigenes PowerShell Modul, das ich bereitstellen möchte. Grundsätzlich geht das auch mit jedem anderen Skript, denn die Azure Cloud Shell stellt ein SMB Share bereit, auf das ich meine Daten ablegen kann. Das geht auch direkt über Azure – Storage Accounts – <CLI Account > – Files – .pscloudshell\WindowsPowerShell\Module (also fast wie bei Windows lokal) und über Upload hochladen:

AzureCLI-UploadCustomModule
Screenshot: Azure Cloud Shell – Upload Custom Module

Update Linux Cloud Shell

Update 30.07.2018: Ich wollte wieder mein Cloud Shell Modul verwenden und musste feststellen, es geht irgendwie nicht. Es stellte sich heraus, dass die Windows Variante eingestellt wurde, und nur noch die Linux Version unterstützt wird (seit Mai 2018).

Um das bisherige PowerShell Modul nutzen zu können, muss man eigentlich nur die Umgebungsvariable anpassen. Denn der Azure Storage wird als als $Home/clouddrive gemounted und alles was darin liegt, wird als IMG gespeichert.

Das geht wie folgt:

#Ausgabe
PS /home/dennis> $env:PSModulePath
/home/dennis/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/6-preview/Modules
#Anpassung
#Entscheident ist dieser Pfad (passend zum vorherigen Artikel, der Nutzername variiert) ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules"
PS /home/dennis> $env:PSModulePath = $env:PSModulePath + ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules"
#Ausgabe
PS /home/dennis> $env:PSModulePath
/home/dennis/.local/share/powershell/Modules:/usr/local/share/powershell/Modules:/opt/microsoft/powershell/6-preview/Modules:/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules

Das sieht dann so aus:

CloudShellLinux
Zeigt die Anpassung der Variable $env:PSModulePath in Azure CloudShell Linux

Anschließend funktioniert der Import wieder, einmalig bis zum nächsten Neustart der Konsole.

Damit das dauerhaft funktioniert, muss man noch ein paar mehr Schritte unternehmen und zwar über ein Profil. Dazu muss man im Home Verzeichnis in den Ordern .config wechseln, ein Verzeichnis „PowerShell“ erstellen und mit „vi“ ein Profil „Microsoft.PowerShell_profile.ps1“ erzeugen (Der Pfad sollte mit $Profile übereinstimmen, diese Datei lädt er automatisch beim Start der PowerShell. Diese muss nicht existieren, daher legen wir diese nun an):

cd $Home/.config
mkdir PowerShell
vi Microsoft.PowerShell_profile.ps1

In dem Editor vi muss man „i“ eingeben, um in den Editormodus zu wechseln. Anschließend folgendes Abtippen:

Write-Host 'Add PowerShell Modules file path'
$env:PSModulePath = $env:PSModulePath + ":/home/dennis/clouddrive/.pscloudshell/WindowsPowerShell/Modules"
Write-Host 'Variable ' $env:PSModulePath

Danach einmal „Esc“ drücken um den Editor zu verlassen und mit „:wq“ (write quit) den Editor verlassen:

AzureShell-Vi
Linux Vi Editor für Azure Shell

Anschließend wird auch beim Neustart der Konsole die Variable entsprechend hinzugefügt.

Anschließend steht das Modul zur Verfügung:

AzureCLI-CustomModule
Screenshot: Azure Cloud Shell – Custom Module

Weitere Probleme bei Cloud Shell auf Linux

Ein Problem ergibt sich speziell bei PowerShell Modulen, da zumindest bei der Azure PowerShell die Module anders bezeichnet sind, Versionen ebenfalls:

  • Windows = „AzureRM.Profile“; Version 5.3.3
  • Linux = Zwischenzeitlich „AzureRM.Profile.Netcore“; Version 0.13.1
    Linux aktuell = „Az.Profile“; Version 0.3.0 (Alle cmdlet’s heißen auch anders, damit die Alten wieder funktionieren, muss man „Enable-AzureRMAlias“ ausführen.

Update 23.10.2018: Führen Sie einmalig „Enable-AzureRMAlias“ aus, damit auch die Skripte die identischen AzureRM* cmdlets nutzen können.

Das bedeutet ich muss eine eigene Version für Windows und Linux pflegen oder zumindest im Build Prozess berücksichtigen.

Weitere Probleme, Windows Programme lassen sich damit nicht mehr ausführen. Ich nutze z.B. AzCopy (um große Datenmengen von Storage Account A nach Storage Account B zu kopieren). Bei der Ausführung kommt natürlich ein Fehler:

Program ‚AzCopy.exe‘ failed to run: Exec format errorAt line:1 char:1

Da kenne ich zurzeit keine Alternative, denn mit dem Profile AzureRM.Storage.Netcore geht das leider nicht.

Außerdem sollte im Modul peinlichst genau auf Groß- und Kleinschreibung geachtet werden… Linux nimmt das persönlich, Windows ist es egal.

Aus meiner Sicht leidet dadurch die Portierbarkeit von Skripten. Für einfache Tätigkeiten aber vermutlich irrelevant.

Referenz

0 0 votes
Article Rating
Teilen

Autor: Dennis Hobmaier

Dennis Hobmaier ist Strategic Consultant bei AvePoint Deutschland GmbH. Er hat über 15 Jahre Erfahrung in IT-Enterprise Umgebung aller Größenordnungen und bedient Kunden aus den unterschiedlichsten Branchen. Als MCSE SharePoint hat er tiefgreifende Kenntnisse in den Bereichen Microsoft Active Directory, Windows, Azure, SharePoint und Office 365. Gerne teilt er seine Projekterfahrung mit Ihnen.

Subscribe
Notify of
guest

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .

0 Comments
Inline Feedbacks
View all comments