{"id":724,"date":"2019-07-16T08:41:25","date_gmt":"2019-07-16T06:41:25","guid":{"rendered":"https:\/\/azure.teamprojects.de\/?page_id=724"},"modified":"2019-09-17T17:09:28","modified_gmt":"2019-09-17T15:09:28","slug":"einrichten-azure-function","status":"publish","type":"page","link":"https:\/\/azure.teamprojects.de\/?page_id=724","title":{"rendered":"Azure-Function"},"content":{"rendered":"\n<h2><strong>Einrichtung<\/strong><\/h2>\n\n\n\n<p>Azure-Function ist ein serverloser Computerdienst, mit dem Code bedarfsgesteuert ausgef\u00fchrt werden kann, ohne eine explizite Infrastruktur bereitstellen oder verwalten zu m\u00fcssen. Azure Functions k\u00f6nnen verwendet werden, um ein Skript oder Codeabschnitte als Reaktion auf verschiedene Ereignisse auszuf\u00fchren.  <\/p>\n\n\n\n<p>Folgende Runtime Stacks k\u00f6nnen verwendet werden:<\/p>\n\n\n\n<ul><li>.NET Core<\/li><li>Node.js<\/li><li>Java<\/li><li>PowerShell<\/li><\/ul>\n\n\n\n<h2><strong>Erstellen einer neuen Function App<\/strong><\/h2>\n\n\n\n<p>Um Azure-Functions nutzen und ausf\u00fchren zu k\u00f6nnen, muss eine neue Function App erstellt werden. Hierf\u00fcr muss im Azure Portal, durch klicken auf die Schaltfl\u00e4che <em>Create a resource<\/em>, eine neue Ressource angelegt werden. Unter &#8218;Popular&#8216; sollte dann die Kachel <em>Function App<\/em> zu finden sein. Ist das nicht der Fall, kann \u00fcber die Suchfunktion die entsprechende Ressource gefunden werden.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"823\" height=\"806\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp-1.png\" alt=\"\" class=\"wp-image-770\" srcset=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp-1.png 823w, https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp-1-300x294.png 300w, https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp-1-768x752.png 768w\" sizes=\"(max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption>Erstellen einer Function App Ressource<\/figcaption><\/figure>\n\n\n\n<p>Anschlie\u00dfend muss ein Name vergeben werden, sowie eine <em>Subscription<\/em>, eine <em>Resource Group<\/em>,  ein <em>OS,<\/em>  ein <em>Hosting Plan<\/em>, die <em>Location <\/em>sowie der <em>Runtime Stack<\/em> festgelegt werden. Au\u00dferdem wird ein <em>Storage Account<\/em> ben\u00f6tigt. Sollte ein solcher noch nicht existieren, muss dieser angelegt werden. Hierf\u00fcr wird im entsprechenden Feld ein Name festgelegt. Den Rest \u00fcbernimmt das Azure Portal. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"319\" height=\"634\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp_1.png\" alt=\"\" class=\"wp-image-771\" srcset=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp_1.png 319w, https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/CreateFunctionApp_1-151x300.png 151w\" sizes=\"(max-width: 319px) 100vw, 319px\" \/><figcaption>Detail der Function App<br><\/figcaption><\/figure>\n\n\n\n<p><em>App name <\/em>definiert den Namen der Function App, welcher global eindeutig sein muss. Unter <em>Subscription<\/em> ist die entsprechende Subscription festzulegen, f\u00fcr die die Ressource erzeugt wird. In der Regel ist es die, mit der man sich angemeldet hat. Bei der <em>Resource Group<\/em> kann entschieden werden, ob eine bereits Bestehende verwendet oder eine Neue angelegt  wird. Es ist g\u00e4ngige Praxis, Ressourcen die zusammen geh\u00f6ren, in einer Ressourcen Gruppe zu b\u00fcndeln. Als <em>Betriebssystem<\/em> sollte derzeit noch Windows ausgew\u00e4hlt werden, da sich Linux noch in der Beta Phase befindet. Als <em>location<\/em> ist West Europe zu w\u00e4hlen. Unter<em> Runtime Stack<\/em> wird eine der oben aufgef\u00fchrten Optionen gew\u00e4hlt. Durch diese Option wird festgelegt, in welcher Programmiersprache die Azure-Functions entwickelt werden. Dies kann nachtr\u00e4glich nicht mehr ge\u00e4ndert werden. Zu guter Letzt muss ein Storage-Account festgelegt werden, in dem alle Daten und Skripts gespeichert werden. F\u00fcr eine detaillierte Beschreibung aller Auswahlfelder wird auf die offizielle <a href=\"https:\/\/docs.microsoft.com\/de-de\/azure\/azure-functions\/functions-create-first-azure-function\">Dokumentation<\/a> verwiesen.  <\/p>\n\n\n\n<h2><strong>Erstellen einer Funktion<\/strong><\/h2>\n\n\n\n<p>Einzelne Funktionen k\u00f6nnen auf zwei verschiedene Arten erstellt werden. Im Azure Portal oder in einer Entwicklungsumgebung. Das Vorgehen zum Erstellen aus dem Azure Portal heraus, ist in der offiziellen <a href=\"https:\/\/docs.microsoft.com\/de-de\/azure\/azure-functions\/functions-create-first-azure-function\">Dokumentation<\/a> beschrieben. Der Nachteil dieser Herangehensweise ist, dass die der Source Code nicht exportiert werden kann. Das hat zur Folge, dass er im Browser editiert werden muss. Es stehen also nicht die gewohnten Funktionen einer IDE zur Verf\u00fcgung. <\/p>\n\n\n\n<p>Das Vorgehen zum Erstellen aus einer IDE wird an dieser Stelle exemplarisch f\u00fcr Visual Studio Code gezeigt. Hierf\u00fcr wird die Azure Functions Erweiterung ben\u00f6tigt. Diese kann wie schon die Azure-IoT Erweiterung \u00fcber den Marketplace bezogen werden. Daf\u00fcr w\u00e4hlt man die <em>Extensions-Schaltfl\u00e4che<\/em> und gibt in der Suche <em>Azure Functions<\/em> ein. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"472\" height=\"451\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/InstallAzureFunctons.png\" alt=\"\" class=\"wp-image-774\" srcset=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/InstallAzureFunctons.png 472w, https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/InstallAzureFunctons-300x287.png 300w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><figcaption>Installieren der Azure Functions Erweiterung<\/figcaption><\/figure>\n\n\n\n<p>Durch Dr\u00fccken der <em>F1<\/em>-Taste wird die Befehlspalette ge\u00f6ffnet. Hier muss der Eintrag <em>Azure Functions: Create New Project<\/em> gew\u00e4hlt werden. Als erstes wird ein Projekt Verzeichnis festgelegt. Im Anschluss m\u00fcssen noch folgenden Optionen fest gelegt werden:<\/p>\n\n\n\n<ul><li>Sprache f\u00fcr das Funktions-App-Projekt<\/li><li>Trigger f\u00fcr die den Einstiegspunkt<\/li><li>Name der Funktion<\/li><li>Erstellen eines Namespaces<\/li><li>Weitere Trigger spezifische Optionen<\/li><li>Festlegen des Storage-Accounts<\/li><\/ul>\n\n\n\n<h3>Erstellen einer Funktion mit IoT-Hub Trigger<\/h3>\n\n\n\n<p>Es gibt eine sehr gro\u00dfe Zahl an m\u00f6glichen Triggern und jeder ben\u00f6tigt spezielle Einstellungen. F\u00fcr die Umsetzung dieses Projektes wurde der IoT-Hub Trigger verwendet. Deswegen beschr\u00e4nken wir uns auf die Beschreibung dieser Variante.<\/p>\n\n\n\n<p>Zuerst muss, wie oben beschrieben, ein neues Projekt erstellt werden. Als Programmiersprache ist eine der aufgef\u00fchrten Sprachen zu w\u00e4hlen. Alle weiteren Schritte beziehen sich auf ein C#-Projekt.    <\/p>\n\n\n\n<ol><li><strong>Auswahl der Sprache<\/strong>: Alle weiteren Schritte beziehen sich auf ein C#-Projekt. Also ist als Sprache C# zu w\u00e4hlen.<\/li><li><strong>Trigger-Typ festlegen<\/strong>: Um einen IoT-Hub Trigger w\u00e4hlen zu k\u00f6nnen, muss zuerst <em>Change template filter<\/em> und dann <em>All<\/em> gew\u00e4hlt werden. Jetzt steht der<em> IoT-Hub Trigger<\/em> zur Auswahl.<\/li><li><strong>Funktionsnamen festlegen<\/strong>: Das ist der Name unter dem die Funktion sp\u00e4ter zu finden ist. Dieser ist gleichzeitig der Name der Klasse in der sich die <em>Run-Methode<\/em> befindet, die aufgerufen wird, sobald die Funktion getriggert wird.  <\/li><li><strong>Namespace definieren<\/strong>: Der Namepace, in dem die Klasse mit der Run-Methode existiert.<\/li><li><strong>Settings Datei festlegen<\/strong>: <em>Create new local app setting<\/em> w\u00e4hlen<\/li><li><strong>Event hub namespace w\u00e4hlen<\/strong>: <em>Skip for now<\/em> w\u00e4hlen<\/li><li><strong>IoT-Hub endpoint festlegen<\/strong>: Hier muss als Endpunkt der IoT-Hub gew\u00e4hlt werden, der die Funktion triggert.  <em>messages\/events<\/em> ist der Default-Endpoint.<\/li><li><strong>Storage-Account w\u00e4hlen: <\/strong>Zum Schluss muss noch ein Storage-Account  festgelegt werden. Hier ist einer aus der Auswahlliste zu nehmen.<\/li><\/ol>\n\n\n\n<p> Nun wird von Visual Studio Code ein frisches Projekt mit der spezifizierten Basisklasse angelegt. Diese enth\u00e4lt eine Methode<em> Run()<\/em><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>[FunctionName(\"SmartHomeMaster\")]\npublic static void Run([IoTHubTrigger(\"samples-workitems\", \n                       Connection=\"HdaSmartHomeHub_events_IOTHUB\", \n                       ConsumerGroup = \"web-app\")]EventData message, \n                       ILogger log)<\/code><\/pre>\n\n\n\n<p>Die Parameter<em> Connection<\/em> und <em>ConsumerGroup<\/em> m\u00fcssen manuell ausgef\u00fcllt werde. <\/p>\n\n\n\n<ul><li> <strong>Connection:<\/strong> <em>NamedesIoTHu<\/em>b_events_IOTHUB wobei <em>NamedesIoTHu<\/em>b der Name des IoT-Hubs ist. Dieser kann im Azure-Portal im entsprechenden IoT-Hub unter<em> Properties<\/em> gefunden werden.<\/li><li><strong>ConsumerGroup:<\/strong> Wird nur die Funktion vom IoT-Hub getriggert, kann dieser Parameter weggelassen werden. Werden mehrere Ressourcen einer Consumer-Gruppe getriggert, muss diese hier angegeben werden. Die Consumer-Gruppen sind im Azure-Portal im entsprechenden IoT-Hub unter<em> Build-in endpoints<\/em> zu finden.<\/li><\/ul>\n\n\n\n<h4>Funktion in die Cloud deployen<\/h4>\n\n\n\n<p>Damit die erstellte Funktion in der Cloud ausgef\u00fchrt wird, muss sie deployed werden. Um die Funktion zu deployen, wird in Visual Studio Code <em>F1<\/em> gedr\u00fcckt. Dann wird der Punkt <em>Azure Functions: Deploy to Function App<\/em> gew\u00e4hlt und die zu deployende Funktion angegeben. Draufhin l\u00e4dt Visual Studio Code die Funktion in die Cloud und startet sie. <\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" loading=\"lazy\" width=\"471\" height=\"298\" src=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/FunctionInVSCode.png\" alt=\"\" class=\"wp-image-777\" srcset=\"https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/FunctionInVSCode.png 471w, https:\/\/azure.teamprojects.de\/wp-content\/uploads\/2019\/08\/FunctionInVSCode-300x190.png 300w\" sizes=\"(max-width: 471px) 100vw, 471px\" \/><figcaption>Funktion in Visual Studio Code<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einrichtung Azure-Function ist ein serverloser Computerdienst, mit dem Code bedarfsgesteuert ausgef\u00fchrt werden kann, ohne eine explizite Infrastruktur bereitstellen oder verwalten zu m\u00fcssen. Azure Functions k\u00f6nnen verwendet werden, um ein Skript oder Codeabschnitte als Reaktion auf verschiedene Ereignisse auszuf\u00fchren. Folgende Runtime Stacks k\u00f6nnen verwendet werden: .NET Core Node.js Java PowerShell Erstellen einer neuen Function App Um &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/azure.teamprojects.de\/?page_id=724\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eAzure-Function\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":100,"featured_media":0,"parent":714,"menu_order":2,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"_links":{"self":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/724"}],"collection":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/users\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=724"}],"version-history":[{"count":6,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/724\/revisions"}],"predecessor-version":[{"id":1173,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/724\/revisions\/1173"}],"up":[{"embeddable":true,"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=\/wp\/v2\/pages\/714"}],"wp:attachment":[{"href":"https:\/\/azure.teamprojects.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=724"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}