Zeit und Geld sparen: Geteilte Module für PowerShell in Azure Functions

Warum Module teilen?

Manchmal gibt es eigenentwickelte Module oder einfach Bibliotheken, die zwischen mehreren Functions in einer Function-App geteilt werden muss.

Beispiel: Die PowerShell Patterns-and-Practices-Module – Mithilfe dieses Moduls können PnP-Funktionen für die SharePoint/Office 365-Bereitstellung eingesetzt werden.

Aber: Das Modul ist ca. 40 MB groß. Sie mögen sich denken: „Lächerlich, wegen so wenig Speicherplatz brauche ich nicht mal zu denken!“.

Es gibt aber andere Gründe, warum das schnell unübersichtlich werden kann:

  1. 40 MB kosten derzeit ca. 10 Cent/Monat (Westeuropa-Preise). Sobald noch 2-3 Funktionen hinzukommen, die denselben Modul benötigen, so steigen die Kosten linear d.h. man bezahlt faktisch für Mehrfachdatenhaltung! Dies ist aber eine Art von Verschwendung (japanisch: muda).
  2. Auch nicht zu unterschätzen: Update-Aufwand. Mal angenommen, wir wollen die nächste Version bei allen Funktionen einsetzen. Dann müssen wir bei angenommene 3 Functions diese Arbeit gleich 3 mal machen! Auch eine Form von Verschwendung (oder, wie landläufig bekannt : Arbeitsbeschaffungsmaßnahmen 🙂 )

Meine Lösung

Zuerst unter https://portal.azure.com einloggen, die Function-App öffnen und das Kudu Tool (Erweiterte Tools) öffnen:

Reiter Plattformfeature. Zeigt eine Auflistung der verfügbarken Optionen. Erweiterte Tools (Kudu) ist hervorgehoben.
Erweiterte Tools vom Reiter Plattformfeatures auswählen

Unter Debug console CMD oder PowerShell öffnen (Präferenzsache) und zum Ordner „home\site\wwwroot“ wechseln und dort einen leeren Ordner z.B. sharedmodules anlegen. Der Grund dafür ist, dass wwwroot unter allen Funktionen geteilt ist (IIS, jemand?).

Ausschnitt aus Kudu. Oben in der Ordnerstruktur da
sharedmodules-Ordner angelegt unter wwwroot

Und letzter Schritt – Moduldateien in den sharedmodules-Ordner kopieren (gerne auch mit Unterordner). Danach können die Module via Import-Module referenziert werden.

Wichtig: Die Unterordner bitte manuell erstellen. Nur die Dateien können anschließend mit Drag-and-Drop hochgeladen werden, Ordner werden ignoriert.

Fenster Zeigt Kudu-Konsole. Rechts oben ein Fortschrittsbalken.
Dateien werden hochgeladen (drag-and-drop)
Und so soll es am Ende im Modul-Ordner aussehen

Zur Nutzung in PowerShell: Kopiert dann den Ordnerpfad und fügt die Moduldatei (für PowerShell ist es eine Datei mit psd1-Erweiterung. Unten ein Beispiel für das SharePoint PnP-Modul

Import-Module  "D:\home\site\wwwroot\sharedmodules\SharePointPnPOnline\SharePointPnPPowerShellOnline.psd1"

Kommentar verfassen