Deploying Azure Functions – My favorite
Als Software- und Lösungsarchitekt kommt man im Azure Umfeld nicht um den Einsatz von Azure Functions drum herum. Und das ist auch gut so, da diese ein idealer Baustein für eine schlanke, skalierbare Lösungsarchitekturen sind.
Aus der Entwicklungsumgebung oder über die Continuous Deployment Mechanismen ist das Publizieren einer neuen Funktion Version nach Azure bis dato immer reibungslos verlaufen. Kürzlich sollte ich allerdings eine entwickelte Function komplett auf manuellem Wege in einer Kundenumgebung bereitstellen und habe mich im Vorfelde über die Best Practice schlau gemacht. Unter https://docs.microsoft.com/de-de/azure/azure-functions/deployment-zip-push ist Microsofts präferierter Weg über die Zip Push API ausführlich beschrieben.
Also habe ich mich voller Tatendrang ans Werk gemacht und die Beispiele adoptiert. Leider musste ich nach ca. einer Stunde feststellen, dass keiner der dort skizzierten Wege für mich funktioniert hat.
Azure CLI (az functionapp deployment source…) war fest der Meinung, dass die Ressourcengruppe nicht existiert?!
REST API und PowerShell antworteten mit 401 – Unauthorized: Access is denied due to invalid credentials. (Deployment Credentials waren definitiv richtig!)
Da das Veröffentlichen mit Visual Studio aber ohne Probleme funktioniert, habe ich nach einen Weg gesucht die Function mit MS Web Deploy (ohne Visual Studio) auszurollen und habe unter https://blogs.technet.microsoft.com/livedevopsinjapan/2017/09/12/build-and-deploy-azure-functions-without-using-visual-studio-2017/ eine super Anleitung gefunden, die auf Anhieb funktioniert.
In Kürze zusammengefasst:
Im ersten Schritt muss man in Azure vom angelegten App Service das Publishing Profile exportieren und Web Deploy (https://www.microsoft.com/en-us/download/details.aspx?id=43717) installieren.
Aus dem Publishing Profi (Teil 1 mit publishMethod=”MSDeploy”) benötigt man folgende Informationen:
- msdeploySite
- userName
- userPWD
Nach dem Installieren von Web Deploy kann das Zip mit folgendem Befehl ohne Probleme installiert werden:
“C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe” -verb:sync -source:package='<path-to-Function.zip>’ -dest:auto,ComputerName=’https://<msdeploySite>.scm.azurewebsites.net:443/msdeploy.axd?site=<msdeploySite>’,UserName='<userName>’,Password='<userPWD>’,AuthType=’Basic’ -enableRule:DoNotDeleteRule
Übrigens der Aufbau des Zip-Archives muss wie folgt aussehen:
FunctionApp | - host.json | - Myfirstfunction | | - function.json | | - ... | - mysecondfunction | | - function.json | | - ... | - SharedCode | - bin
Ich wünsche euch frohes, entspanntes Deployen!