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:
- 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).
- 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:

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?).

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.


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"
