Modern IT - Modern Workplace - Modern Collaboration

Allgemein

Azure Functions – Der Beispiel-Code

Nachdem ich nun angesprochen habe wie meine ersten Eindrücke und Erfahrungen waren möchte ich nun etwas technischer werden.

Wenn ich nun also eine Azure Function für PowerShell erstellt habe bekomme ich direkt einen Beispiel-Code angezeigt.

2018-02-14_21-22-41

In diesem ist sofort zu erkennen das es Umgebungsvariablen gibt die für die Arbeit mit HTTP POST und GET unabdingbar sind. Somit zu aller erst die Frage, wie ist die Funktion aufgebaut? Ich kann mir die Dateien innerhalb meiner Funktion anzeigen lassen und im Standard gibt es hier aktuell nur zwei. Die „run.ps1“ und „function.json“.

Beginnen wir mit der „functions.json“. Ich möchte kurz und knapp gehalten die einzelnen Parameter erklären:

{
"bindings": [
    {
      # Name der Variable mit dem HTTP Body
      "name": "reg", 
      # Auslöser der Funktion über eine HTTP URL
      "type": "httpTrigger", 
      # Definition für eingehende Verbindung (POST/GET)
      "direction": "in", 
      # Authentifizierung über den Schlüssel der Funktion
      "authLevel": "function" 
    },

    {
      # Name der Variable mit der HTTP Antwort
      "name": "res", 
      # Ausgabe über HTTP
      "type": "http",
      # Definition für ausgehende Verbindung (POST/GET)
      "direction": "out" 
    }
  ],
  # Die Funktion ist aktiviert und kann angesprochen werden
  "disabled": false 
}

Ich habe mich aktuell nur mit den Möglichkeiten des HTTP GET und HTTP POST beschäftigt, damit ich eine Funktion entweder Aufrufen kann um Aktion zu starten (POST) oder um Daten bzw. einen Status von etwas abzufragen (GET).

Betrachten wir einmal den Beispiel-Code, die „run.ps1“. Diese wir beim Auslösen des HTTP-Triggers ausgeführt, dass kann auch aktuell nicht geändert werden. Somit haben wir immer die „run.ps1“ als Einstiegspunkt.

Im ersten Abschnitt sehe ich wie die Variable $reg angenommen und in ein PSObject ($requestBody) konvertiert wird. Anschließend kann ich auf die übergebene Parameter zugreifen.

Dieses Beispiel geht also davon aus das wir beim Auslösen des HTTP POST einen Parameter „Name“ übergeben. Diesen speichern wir anschließend in der Variable $name.

# POST method: $req

$requestBody = Get-Content $req -Raw | ConvertFrom-Json

$name = $requestBody.name

In diesem Abschnitt geht das Beispiel darauf ein das wir einen HTTP GET Auslösen.

Hier sehen wir auch die Variable $req_query_name. Bei einem HTTP GET können wir Parameter übergeben die wir anschließend für eine Aktion verwenden, dabei wird automatisch für jeden Parameter den wir übergeben eine Variable im Format $req_query_PARAMETERNAME erzeugt.

# GET method: each querystring parameter is its own variable

if ($req_query_name)

{

    $name = $req_query_name

}

Der letzte Abschnitt gibt auf unsere jeweilige HTTP Anfrage eine Antwort, ob es nun ein POST oder GET ist.

Out-File -Encoding Ascii -FilePath $res -inputObject "Hello $name"

Damit ich nun einmal testen kann wie ich das Ganze über ein anderes PowerShell Skript aufrufe, habe ich mir ein paar Zeilen geschrieben. Diese können von jedem Beliebigen Windows 10 System ausgeführt werden.

$uri = "https://nav-deploy.azurewebsites.net/api/MeineFunktion?code=MeinFunctionKey"

##### POST #####

$Post = New-Object PSObject

Add-Member -InputObject $Post -MemberType NoteProperty -Name Name -Value "Nummer5" -Force

Invoke-WebRequest -Uri $uri -Method Post -ContentType "application/json" -Body $Post

##### GET #####

$Get = ConvertTo-Hashtable -PSObject $Post

Invoke-WebRequest -Uri $uri -Method Get -ContentType "application/json" -Body $Get

Zu Anfang benötige ich die Azure Function URL ($uri) und auch einen Body ($post) für den Aufruf.

Leider wir der Body bei einem POST als JSON und bei einem GET als hash-Tabelle verarbeitet. Somit muss ich mir mein PSObject erst noch einmal konvertieren. ($Get)

Anschließend kann ich mit dem „Invoke-WebRequest“ Cmdlet den jeweiligen aufruf durchführen und bekomme als Antwort bei beiden Aufrufen den von mir übergebenen Namen „Nummer5“.

In meinem nächsten Artikel zum Thema Azure Functions werde ich dann näher erläutern wie man eine etwas komplexere Entwicklung umsetzen kann.

%d bloggers like this: