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:
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: