Web APIs mit Azure Functions: Bereitstellung via API Management (Teil 5)

post-thumb

In meiner Serie zu Web APIs mit Azure Functions stelle ich neben einigen Pattern auch Codebeispiele vor. In Summe können diese Beiträge als Handlungsanweisung verwendet werden, um effizient Web APIs mit Azure Functions zu erstellen und in Azure bereitzustellen.

Hier nochmal eine Übersicht der bisher veröffentlichten Beiträge:

Überblick

Im vorherigen Beitrag habe ich über die Verwendung von OpenAPI mit Swashbuckle in Azure Functions gesprochen und welche grundsätzlichen Vorteile die Verwendung eines API Managements bietet.

In diesem Blogbeitrag werden die Funktionsweise und weitere Vorteile eines API Managements auf Basis von Azure aufgezeigt. Mit einem praktischen Beispiel wird die erstellte Azure Function aus der bisherigen Serie dieser Blogbeiträge in Azure bereitgestellt (GitHub Repo) und in ein API Management eingebunden. Dabei steht u.a. die automatische Konfiguration anhand der OpenAPI-Definition im Fokus.

API Management in Azure

Das API Management (APIM) in Azure bildet die zentrale Anlaufstelle für Anforderungen an die Backend Systeme (APIs) im Hintergrund. Damit kann das APIM als Fassade betrachtet werden, welche die Anfragen an einem einheitlichen Endpunkt (Domain) entgegennimmt und entsprechend der Vorgaben an die Backend-Systeme weiterleitet.

Dabei spielt es keine Rolle, ob das Backend eine Azure Function, eine Logic App, einen Endpunkt auf einem lokalen Server (OnPrem) oder einen externen Endpunkt (bspw. AWS) darstellt. Die Authentifizierung erfolgt hierbei z.B. über einen JWT-Token.

Das APIM kann neben einer einheitlichen Domäne die Anfragen soweit modifizieren/verändern und anpassen, sodass die jeweiligen Endpunkte diese entsprechend verarbeiten können, unabhängig vom Aufrufer.

Das APIM bietet die Möglichkeit Azure Functions mittels eines Imports zu verwenden, dabei kann auch die vorherige Definition der OpenAPI (JSON) so genutzt werden, sodass wir hierauf über das APIM zugreifen können.

Deployment: Azure Function

Zur Erstellung der Notwendigen Ressourcen in Azure verwenden wir das Azure CLI. Hierbei werden zunächst eine Ressourcen Gruppe erstellt. Darin wird anschließend ein Storage-Account angelegt. Zum Schluss wird eine Function App (Consumption Plan) mit der Function Runtime Version 3 erzeugt. Die entsprechenden Aktionen sind im folgenden Listing aufgeführt:

storageName=mystorageaccount$RANDOM
functionAppName=okblog-myTodo-func
region=westeurope
resourceGroupName=okBlogResourceGroup
 
# Erstellen einer Ressourcen Gruppe
az group create --name $resourceGroupName --location $region
 
# Erstellen eines Azure Storage Accounts in der selben Ressourcen Gruppe
az storage account create \
  --name $storageName \
  --location $region \
  --resource-group $resourceGroupName \
  --sku Standard_LRS
 
# Erstellen einer Function App in der selben Ressourcen Gruppe
az functionapp create \
  --name $functionAppName \
  --storage-account $storageName \
  --consumption-plan-location $region \
  --resource-group $resourceGroupName \
  --functions-version 3

Nach der Bereitstellung der Ressourcen in Azure, können wir nun das Veröffentlichungsprofil herunterladen und unsere Azure Function via Visual Studio deployen.

Nach dem Deployment in Azure können wir neben dem Aufruf der eigentlichen Funktionen unserer Azure Function auch den Endpunkt zur Anzeige der OpenAPI-Definition via JSON betrachten. Diese URL wird für die spätere Einrichtung im APIM benötigt.

Integration Azure Function in das APIM

Für die Einrichtung der Azure Function via APIM wird zunächst einmal eine APIM Instanz benötigt, welche im weiteren Verlauf dieses Beitrags entsprechend konfiguriert wird.

Erzeugung APIM-Instanz

Für eine rasche Bereitstellung einer APIM-Instanz in Azure eignet sich die Azure CLI hier am besten. Für die Erstellung sollte folgender Befehl in der Shell ausgeführt werden:

apiManagementInstanceName=okBlogApim
 
az apim create \
-g $resourceGroupName  \
-n $apiManagementInstanceName \
-l $region \
--sku-name Consumption \
--publisher-name okblogtest \
--publisher-email apim@okblogtest.com
--no-wait 

Hinweis: Die Erzeugung einer neuen APIM-Instanz dauert zwischen 30-40 Minuten. Mit der Verwendung der SKU „Consumption“ verringert sich die Bereitstellungszeit auf bis zu zwei Minuten. Standardmäßig kann hier die SKU „Development“ gewählt werden.

Importieren der Azure Function App in das APIM

Nachdem die Ressource bereitgestellt wurde, navigieren wir zum APIM und legen uns hier eine neue API an. Hierzu genügt ein Klick im Azure Portal auf „APIs“ in der linken Navigation und dann „Add API“. Mit einem Klick auf OpenAPI erscheint eine neue Maske.

In der Maske werden die benötigten Informationen eingegeben. Hierzu gehört u.a. die Angabe der OpenAPI Definition (hierfür haben wir den Link beim Deployment der Azure Function kopiert) und die Angabe eines Namens, einer Beschreibung und optional ein Suffix für die APIM URL.

Anschließend wird die Azure Function in das APIM importiert und sämtliche Informationen für die Endpunkte wird entsprechend der OpenAPI-Definition gesetzt. So werden u.a. die Query-Parameter direkt angezeigt, welche der Aufruf benötigt.

Im Tab „Test“ können die APIs nun die Endpunkte über das APIM getestet werden.

Zusammenfassung

Mit der Verwendung eines APIMs haben wir nun neben der eigentlichen Erstellung der Web API mittels Azure Functions selbige auf Azure deployt und darüber verfügbar gemacht. Weitere Web APIs, welche nach dem ähnlichen Prinzip dieser Serie erstellt werden, können nun ebenfalls in das APIM integriert werden. Gleichzeitig wurden die Vorteile von OpenAPI zu Nutze gemacht und das APIM automatisch damit konfiguriert.

Der Objektkultur-Newsletter

Mit unserem Newsletter informieren wir Sie stets über die neuesten Blogbeiträge,
Webcasts und weiteren spannende Themen rund um die Digitalisierung.

Newsletter abonnieren