PART II: Mastering
Amazon API Gateway:
Eine Einführung

In dieser mehrteiligen Blogreihe möchte ich meine Erfahrungen mit dem Amazon API-Gateway, und den damit verbundenen AWS-Services teilen. Anhand eines einfachen praktischen Beispiels möchte ich die Vorteile des Amazon API-Gateway's in Verbindung mit Lambda, IAM, Cloudwatch, S3 und RDS zeigen. Zum Abschluss wird die API auch noch mittels Swagger-Editor und Swagger UI dokumentiert. Mit diesem noch relativ neuen Service-Stack vom Amazon hat man tolle Möglichkeiten, um seine API schnell, flexibel und skalierbar zu entwickeln.

Komponenten / Services

Zu Beginn noch eine kurze Erklärung zu den verschiedenen Komponenten/Services:

  • API-Gateway: Web-Interface zum Erstellen und Verwalten der Ressourcen, Methoden, Zugriff und ähnlichem (API-Verwaltung).
  • Lambda: Lambda-Funktionen sind Codeblöcke, welche ausgeführt werden, wenn bestimmte Ereignisse eintreten – in diesem Fall ein API-Aufruf. Lambda-Funktionen können in node.js- oder Java-Code geschrieben werden.
  • IAM: Hierbei handelt es sich um Authentifizierungs- und Zugriffmanagement von Amazon. Hierbei wird der Zugriff auf die API-Schnittstelle definiert bzw. gesichert.
  • Cloudwatch: Hierbei handelt es sich um den zentrale Monitoring und Loging Service von Amazon.
  • RDS: Hierbei handelt es sich um die bei Amazon gehosteten Datenbanken
  • Swagger: Wird zum Dokumentieren der API verwendet.

Zu Beginn ist noch zu erwähnen, dass alle oben genannten Services auch in einer gratis Version verfügbar sind. Das heißt, dass während dem Entwickeln noch keine Kosten anfallen, man zahlt, wie bei Amazon üblich, nur Ressourcen die man benötigt.

API-Architektur

Bevor wir nun wirklich starten, möchte ich noch kurz die Architektur, die sich hinter unserer API befindet, skizzieren:

PART I: Mastering Amazon API Gateway: Eine Einführung

Los geht’s: API erstellen

Zu Test- und Demonstrationszwecken werden folgende 3 Test-Requests erstellt:

  • Einen GET-Request ohne Parameter (zBsp. GET /persons)
  • Einen GET-Request mit einem Path-Parameter (zBsp. GET /person/{name})
  • Einen POST-Request mit Body (zBsp. POST /person)

Diese ganze API wird außerdem anhand der verschiedenen Authentifizierungs-Typen konfiguriert und verwendet, die Aufrufe sollen auch Fehlerfälle abfangen, und verschiedene HTTP-Status-Codes als Ergebnis liefern.

Berechtigungen

An dieser Stelle gehe ich davon aus, dass bereits ein Amazon-AWS Account erstellt wurde. Zu allererst werden einige Konfigurationen vorgenommen und Berechtigungsgruppen und Richtlinien erstellt. Der Benutzer muss Zugriff auf die API, CloudWach, IAM und Lambda bekommen. Hierfür öffnen Sie in der Amazon AWS Console IAM (https://console.aws.amazon.com/iam/) und wählen den gwünschten API Benutzer aus (oder erstellen diesen neu). Mittels der Button „Attach Policy“ und „Create User Policy“ können dem Benutzer neue Richtlinien (deutsch für Policies) zugewiesen werden.

1. Benutzer darf API aurufen

{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "execute-api:Invoke"      ],      "Resource": "arn:aws:execute-api:*:*:*"    }  ]}

2. Benutzer darf API verwalten

{  "Version": "2012-10-17",  "Statement": [    {      "Effect": "Allow",      "Action": [        "apigateway:*"      ],      "Resource": [ "*" ]    }  ]}

3. Benutzer darf Lambda-Funktionen aufrufen

{  "Version": "2012-10-17",  "Statement": [    {      "Sid": "Stmt1439722684000",      "Effect": "Allow",      "Action": [        "lambda:*"      ],      "Resource": [        "*"      ]    }  ]}

4. Lambda Ausführungs-Rolle erstellen

  • Wählen Sie „Create Role“ und wählen den Namen „LambdaExecutionRole“
  • Danach unter „AWS Service Roles“ klickt man auf „AWS Lambda“
  • Wählen Sie „AWSLambdaFullAccess“ und klicken auf „Next Step“
  • Schließen Sie den Vorgang mittels „Create Role“ ab

Lambda Funktion erstellen

Wechseln Sie nun zu Amazon Lambda – hier erstellen wir eine neue Funktion mittels „Create a Lambda Function“. Bei Schritt 1 wählen Sie „Skip“ und geben nun folgende Daten ein:

  • Name: getAllPersons
  • Description: Returns all Persons
  • Runtime: Java 8
  • Handler: at.varioous.persons.GetRequest::handleRequest
  • Role: LambdaExecutionRole

Mittels „Next“ und „Create Function“ wird die Funktion erstellt. Diese Funktion wird später verwendet, um alle Personen aus einer Datenbank zu selektieren,und diese zurückzuliefern.

API verwalten

Wechseln Sie nun zum Amazon API Gateway in der Amazon AWS Console. Hier wird nun zuerst eine neue API angelegt mittels „Create API“, und geben Sie einen Namen und eine Beschreibung an. Mittels „Create Ressource“ erstellen wir nun unsere erste Ressource:

  • Resource Name: Persons
  • Resource Path: /Persons

Klicken Sie auf „Create Ressource“ um die Ressource zu erstellen. Nun werden dieser Ressource weitere Methoden zugewiesen, wählen Sie „Create Method“ und danach „GET“. Wählen Sie als Integration Type „Lambda Function“, und geben Sie anschließend ihre Region und den Funktionsnamen „getAllPersons“ an. Den anschließenden Dialog bestätigen Sie mit „Ok“. Nun haben wir also unsere erste Methode der REST-Schnittstelle erstellt. 

Der Übersicht der Methode gliedert sich in folgende Bereiche:

  • Client „Test“: Hier kann die Methode test weise direkt ausgeführt werden
  • Method Request: Hier werden die Eingansgparameter und die Authentifizierungstypen der Schnittstelle definiert
  • Integration Request: Hier wird der auszuführende Dienst und Mapping-Evolutionen definiert
  • Lambda: Die Funktion, die ausgeführt wird
  • Integration Response: Hier werden die Rückgabe-Header und Templates definiert
  • Method Response: Hier werden die möglichen Rückgabe-HTTP-Status-Codes definiert

Mit einem klick auf „Deploy API“ wird die API veröffentlicht. Erstellen Sie hierzu eine neue Phase (deutsch für Stage), diese können verglichen werden mit Versionen. Um etwaige Fehler später besser nachvollziehen zu können, wird nun gleich auch noch CloudWatch aktiviert. Hierzu in der Stage-Ansicht unter Settings die Häkchen bei „Enable CloudWatch Logs“ und „Enable CloudWatch Metrics“ aktivieren. Nun wird jeder Aufruf nachvollziehbar in CloudWatch mitgeloggt. 

Die Implementierung der Methode, und ein durchgängiges Beispiel wird im nächsten Teil dieser Blogreihe vorgenommen. Es sollte nun ein Grundverständnis über die verschiedenen Komponenten vorhanden sein. Wir haben die Konfiguration abgeschlossen, eine erste Lambda-Funktion und eine API mit einem Request erstellt. 

Wie geht’s weiter?

Das erwartet Euch in den weiteren Artikeln dieser Blogreihe:

Wir entwickeln digitale Lösungen mit Leidenschaft

Warum wir das tun? Weil die Verwirklichung Ihrer Vision unser größter Anspruch und die schönste Anerkennung ist. Deshalb nehmen wir uns gerne ausreichend Zeit für die Realisierung Ihres digitalen Projekts.

Kontaktieren Sie uns, wir sind gerne für Ihre Fragen da:

Passend zu diesem Thema:

Das war das TYPO3camp München 2019

Das war das TYPO3camp München 2019

Vom 13. – 15. September fand das TYPO3camp 2019 in München statt und auch varioous war vor Ort um sich mit anderen TYPO3-Entwicklern und Unternehmen z…

TYPO3 Indexed Search mit Segmentierung/Indexierung

TYPO3 Indexed Search mit Segmentierung/Indexierung

In diesem Blogbeitrag will ich Euch den Einsatz der Such-Erweiterung "indexed_search" zeigen und anhand eines Beispiels näher bringen. Wir werden uns …

Richter Pharma Web4Partners

Richter Pharma Web4Partners

Um den Austausch von Marketing-Material und Bilder sowie die Verbreitung von Informationen für Vertriebspartner von Richter Pharma einfacher und schne…