16. Oct 2018 10:10
Keine Kommentare

APIs mit AWS API Gateway und Lambda

Während meiner frühen Jahre, es muss so etwa 2003 gewesen sein, sollte ich eine Präsentation und Vorstellung zum Thema SOAP, dem Simple Object Access Protocol, machen. Ich denke, dass ich eine recht passable Leistung erbrachte, wobei gleichermaßen meine Präsentation mich selbst nicht bedeutend beeindruckte. Ohnehin waren die Anwendungsgebiete für APIs, damals häufig auch Remote Procedure Call genannt, noch relativ einfach oder selten. Heutzutage sind sie jedoch kaum mehr wegzudenken. Aber fangen wir langsam von ganz Vorne an.

API mit AWS Lambda und API Gateway

Wozu brauche ich eine API und was ist das?

Die Abkürzung "API" steht für "Application Programming Interface" also kurzum Schnittstelle zur Anwendungsprogrammierung. In diesem Oberbegriff enthalten sind auch Systembibliotheken von Betriebssystemen oder von Applikationen. Es gibt zahlreiche technische Standards für APIs. In Verbindung mit Netzwerken und dem Internet sind häufig SOAP oder Rest-APIs gemeint. Beide Protokolle, letzteres eher weniger standardisiert als SOAP, nutzen dabei HTTP(S) für die Übermittlung der Informationen.

Enterprise-Service-Bus und Service-orientierte Architektur

Etwa Anfang der 2000er machten Abkürzungen wie EAI also "Enterprise Application Integration" die Runde, danach folgte die Service-orientierte Architektur bzw. "SOA" und das aktuelleste Buzzword im Jahr 2018 ist der "Enterprise Service Bus" bzw. "ESB". Bei den ganzen Abkürzungen kann man schnell den Überblick für das Wesentliche verlieren. Worum geht es hier? Es geht darum, dass alle Systeme in einer Organisation miteinander vernetzt werden und Geschäftsabläufe bzw. Prozesse den maximalen Grad der Automatisierung erreichen. Dazu ist es notwendig, dass diese Systeme alle miteinander Daten austauschen können. Der Begriff "können" ist hierbei sehr wichtig, denn es geht nicht nur um aktuelle Anwendungsfälle, sondern auch darum, dass die Applikationen auch in Zukunft fähig sind alle verfügbaren Daten miteinander auszutauschen und gegenseitig Prozesse auszuführen. Kurzum: jede Software in einem Unternehmen muss für alle seine Prozesse eine API anbieten, damit wiederum andere Systeme die Prozesse starten können. Das gelingt mittlerweile einigen Unternehmen ganz gut, anderen weniger.

Großes Potential mit der API-Economy

Am Ende meiner Präsentation im Jahre 2003, also vor über 15 Jahren, stellte ich eine gewagte These auf: "Spätestens in 10 Jahren wird jedes Unternehmen für seine Dienstleistungen neben einer Website auch eine API anbieten". Zugegeben stand ich mit dieser These damals nicht allein da. SOAP, .NET Remoting und auch REST hatten bereits das Licht der Welt sowie einige Aufmerksamkeit erlangt. In der Tat gibt es heute einige nennenswerte APIs außerhalb der Technologie-Branche:

Das klingt also erst einmal hoffnungsvoll, auch wenn es nun mehr als 15 Jahre dauert. Dabei verpassen viele Unternehmen Chancen, denn ihre Wettbewerber erreichen mit der richtigen Vertriebs- & Marketingstrategie sowie gelungenem API-Management bis zu 30% Ihres Umsatzes über offene APIs. Hier liegen enorme Potentiale, die viele Unternehmen ungenutzt lassen.

37,90 €
Jetzt bestellen »
REST und HTTP: Entwicklung und Integration nach dem Architekturstil des Web
Gewöhnlich versandfertig in 24 Stunden

Schwierigkeiten beim API-Management

Eine eingeschränkte API, z.B. nur in der eigenen Organisation, lässt sich ohne weiteres Zutun oder Entwicklungsaufwand mit Firewalls und Netzwerkkonfiguration ganz gut isolieren. Wer jedoch eine öffentliche API anbietet, die jeder nutzen kann, steht vor neuen Herausforderungen. Es können ungewohnt hohe Anfragen auftreten, die eventuell gedrosselt werden müssen oder wofür weitere Ressourcen kurzfristig notwendig werden. Zudem müssen berechtigte Nutzer und deren Nutzungskontingente verwaltet werden.

APIs mit der Amazon Web Services Cloud

Sowohl Amazon mit AWS, als auch Google mit der Google Cloud und Microsoft mit Azure bieten vollumfängliches serverloses API-Management an. Weder muss man hierfür die Infrastruktur verwalten noch sich um System-Management oder Update kümmern.

In diesem Artikel wollen wir uns mit dem API-Gateway von Amazon Web Services beschäftigen und zwar insbesondere im Zusammenspiel mit AWS Lambda Funktionen. Letzteres ermöglicht das Ausführen serverloser Anwendungen. Serverlose Anwendungen werden von den darunter liegenden Systemen automatisch verwaltet und bis zu einem bestimmten konfigurierbaren Grad auch skaliert.

Erstellen der ersten API mit Amazon API-Gateway

Ich gehe davon aus, dass der interessierte Leser bereits über ein Amazon Web Services Konto verfügt. Wenn nicht, lässt sich ein solches hier erstellen: Kostenloses AWS-Konto erstellen. Viele Dienste werden bei AWS sogar kostenfrei angeboten. Bevor man hier weiter macht, empfiehlt sich das Auseinandersetzen mit den Grundlagen der AWS Cloud bzw. Cloud Computing im Allgemeinen.

API erstellen mit API-Gateway

Das Erstellen einer API gestaltet sich recht einfach. Mit wenigen Klicks hat man die Grundlagen gelegt und findet im linken Menü die Übersicht der eigenen APIs. Wählen wir nun unsere API aus, so gelangen wir zur Baumansicht für "Resources". Dort lässt sich die Pfadkonstruktion der API, also die Struktur der URLs für die API, konfigurieren. Für jede "Resource" muss auch eine "Method" (zu dt. "Methode") angelegt werden. Damit wird definiert, wie ein API-Aufruf über HTTP POST, GET, PUT und andere Methoden verarbeitet werden soll.

AWS API Gateway Method Execution

In der Abbildung lässt sich die Konfiguration recht gut erkennen. Das Erstellen der Methode sowie die Integration in Lambda mithilfe des Lambda-Proxy geht eigentlich recht einfach und selbstverständlich von der Hand. Mit einem Klick auf den "Deploy API"-Menüeintrag unter "Actions" kann die API auch bereits veröffentlicht werden. Man muss lediglich ein "Stage" (Produktiv, Test oder Entwicklung z.B.) erstellen. Damit hat man in wenigen Minuten seine erste API bereitgestellt und erhält eine AWS-Url von wo aus die API aufgerufen werden kann.

Lambda-Funktionen für den API-Gateway

Mit AWS-Lambda lässt sich im Handumdrehen eigener Code in der Cloud ausführen. Hierbei stehen eine Vielzahl von Programmiersprachen bereit, darunter C#, Python, Java, Go und JavaScript auf NodeJs. Für NodeJs bzw. JavaScript steht sogar eine web-basierte IDE bzw. Programmierumgebung bereit. Es benötigt also nicht einmal lokale Software für die Entwicklung.

AWS Lambda Function

Nach dem Erstellen einer NodeJs Lambda wird automatisch Beispielcode in der "index.js"-Datei erzeugt. Wer über npm jedoch Bibliotheken laden möchte, der muss dies leider lokal tun und das Paket dann also ZIP-Datei hochladen. Ein Bearbeiten im Editor ist danach jedoch dennoch möglich. Für schnelles Testen von Lambdas ist der webbasierte Editor sehr gut geeignet. Für die lokale Entwicklung lohnt sich ein Blick auf AWS SAM CLI, der lokalen Laufzeitumgebung. Schauen wir uns jedoch einmal ein komplettes Beispiel für eine Lambda mit API-Gateway-Integration an.

Der obenstehende Code ist ein Auszug aus einer meiner Lambda-Funktionen, die einerseits Orte in der Umgebung von Koordination zurück liefert und andererseits auch eine Textsuche für Orte bietet. Das ist genau genommen erst einmal irrelevant. Der Rahmen bzw. die Hauptfunktion der Lambda lässt sich auf folgendes reduzieren.

Es wird nun ein einfaches JSON mit der Eigenschaft "text" am API-Gateway ausgegeben. Im Event-Object befinden sich einige Informationen, die der Lambda-Proxy uns übermittelt hat. Bei der Konfiguration eines Tests für Lambda, hilft die Vorlage "'Amazon API Gateway AWS Proxy" enorm weiter. Meine Suchabfrage für Orte beinhaltet z.B. folgenden Lambda-Test.

Die in der Testvorlage vorhandenen Variablen geben einen guten Aufschluss über die zahlreichen Informationen, die der API-Gateway Lambda-Proxy übermittelt. Den Möglichkeiten in Lambdas sind hier keine Grenzen gesetzt.

Ein paar wichtige Dinge zu API-Gateway

Ich habe beschrieben, wie man relativ zügig und frustfrei zur ersten API kommt. Das ist insbesondere für einfache Prototypen und Proof-Of-Concept Anwendungen vollkommen ausreichend. Spätestens jedoch bei der Entwicklung mit mehreren Personen und natürlich in der Produktivumgebung gibt es einige Dinge zu beachten. Ich empfehle dringend die Verwendung von CodePipeline, wie in meinem Artikel DevOps mit CodePipeline beschrieben.

Zugriff auf die API mit Tokens schützen

Die Sicherheit ist für APIs mindestens genauso wichtig wie für alle anderen Applikationen oder Dienste (z.b. Websites). Grundsätzlich sollte man immer Tokens für die API verwenden, sofern man diese nicht der gesamten Welt öffentlich zur Verfügung stellen möchte. Wer komplexere Identifizierung bzw. Sicherheit benötigt, kann über sog. "Authorizer" entweder Lambdas oder Cognito für die Autorisierung der API-Nutzung verwenden. Für einen Großteil der APIs sind Tokens vollkommen ausreichend.

Custom Domain Names und SSL-Zertifikate mit ACM und Route 53

Auch wenn der API-Endpunkt bzw. die -Url nur in einer Applikation versteckt ist, sollte man sich die Mühe machen einen sinnvollen Domain-Namen inklusive SSL-Zertifikat anstelle der Amazon-Endpunkte zu verwenden. Für den ersten Einstieg reicht das jeoch vollkommen. Anzumerken sei, dass die Konfiguration von API-Gateway bedeutend einfacher ist, wenn man seine Domain bei Route 53 und die SSL-Zertifikate in AWS Certificate Manager vorliegen hat. Bei der Konfiguration von Custom Domain Names lauern einige Stolperfallen.

Meine wichtigsten Aha-Momente:

  • Zertifikate für "Edge Optimized" API-Gateway Domains müssen in der Region "us-east-1" angefordert und verwaltet werden
  • Das Erstellen von Custom Domains mit ACM-Zertifikaten kann bis zu 40 Minuten dauern

Ansonsten ist der Prozess doch recht einfach, wenn man eine gewisse Genauigkeit walten lässt. Das Verwenden eigener DNS-Server geht ebenfalls. Für Projekte, die vollständige auf AWS aufsetzen, empfehle ich dringend auch die Domain über AWS Route 53 zu verwalten.

Versionsverwaltung der API und Produktionsumgebung

Wer seine API in die Produktion übergeben möchte, sollte dies nicht unüberlegt tun. Es gibt zahlreiche Möglichkeiten Produktiv von Test- und Entwicklungsumgebung zu trennen. Ein sehr gutes Beispiel ist die Verwendung der Lambda-Versionierung: Verwendung von Stage-Variablen für die Lambda-Versionierung über API-Gateway.

Fazit zu AWS API-Gateway und Lambda

Wer in der Vor-Cloud-Zeit schon einmal APIs entwickelt hat, weiß wie unglaublich aufwendig die Konfiguration der Infrastruktur und dessen Planung ist. Für eine gewissen Flexibilität in der Konfiguration sowie dem Deployment waren nicht zu verachtende Kraftanstrengungen notwendig. Mit API-Gateway ist sowohl die Entwicklung als auch die Bereitstellung von APIs ein Kinderspiel geworden, insbesondere dank dem Zusammenspiel mit Lambda. Man benötigt nicht einmal eine Entwicklungsumgebung! Wer heute eine API entwickeln muss, sollte AWS API-Gateway mit oder ohne Lambda in jedem Fall immer in Betracht ziehen.

Bücher zum Thema „NodeJs“

Die nachfolgenden Bücher behandeln das Thema "NodeJs" und werden von Amazon empfohlen. Viele dieser Bücher habe ich selbst gelesen und teilweise auch zur Recherche für diesen Artikel genutzt.
49,90 €
Jetzt bestellen »
Node.js: Das umfassende Handbuch. Serverseitige Web-Applikationen mit JavaScript entwickeln
Sebastian Springer, Rheinwerk Computing
45,99 €
Jetzt bestellen »
JavaScript: Das umfassende Handbuch
Philip Ackermann, Rheinwerk Computing
39,90 €
Jetzt bestellen »
Node.js: Das umfassende Handbuch. Serverseitige Webapplikationen mit JavaScript entwickeln
Sebastian Springer, Rheinwerk Computing
49,90 €
Jetzt bestellen »
Galileo Computing: Node.js: Das umfassende Handbuch. Serverseitige Webapplikationen mit JavaScript entwickeln
Sebastian Springer, Galileo Computing

Diese Artikel könnten Dich auch interessieren

Besucher, die diesen Beitrag gelesen haben, haben sich auch die unten aufgeführten Beiträge angesehen. Schau' doch einfach mal in die Artikel rein.
10 Besucher haben auch das gelesen
8 Besucher haben auch das gelesen
8 Besucher haben auch das gelesen
4 Besucher haben auch das gelesen
3 Besucher haben auch das gelesen
3 Besucher haben auch das gelesen

Kommentare zum Thema „APIs mit AWS API Gateway und Lambda“

Wenn Du möchtest, kannst Du hier Kommentare zum Thema hinterlassen und Dich mit anderen Nutzern austauschen. Damit Du kommentieren kannst, musst Du Dich nur anmelden und schon kann es losgehen.
Jetzt zum Kommentieren anmelden