RestfulAPIs auf AWS selbst gebaut AWS Lambda und API Gateway, Teil 1

Amazon API Gateway soll das Erstellen, Veröffentlichen, Pflegen, Überwachen und Sichern von APIs jeder beliebigen Größenordnung sehr einfach machen. In diesem Beitrag zeigen wir, wie man dem Service einen AWS-Zugang via HTTPS ermöglicht.

Kennen Sie Swagger? Swagger ist ein Open-Source-Software-Framework, das das Entwerfen, Erstellen, Dokumentieren und Verwenden von RESTful Webservices erlaubt. Das Open-Source-Framework wird von zahlreichen weiteren Tools erkannt und unterstützt.

Vielen Entwicklern kennen Swagger in Form des Swagger-UI-Tools. Das Swagger-Toolset bietet darüber hinaus Unterstützung für automatisierte Dokumentation, Code-Generierung und Testfallgenerierung. Damit gehört Swagger neben RAML und API Blueprint zu den am häufigsten benutzen API-Beschreibungssprachen. Auch der AWS-Dienst „Amazon API Gateway“ unterstütz unter anderem Swagger-Modelle und Apache-Velocity-Templates. Mit Amazon API Gateway können Entwickler über die AWS-Managementkonsole mit wenigen Klicks eine API erstellen, die ihren Anwendungen quasi als „Haupteingang“ dient. Über die API ist es fortan möglich, auf Daten, Geschäftslogik oder Funktionen der auf AWS gehosteten Backend-Services zuzugreifen. Als Beispiel denke man an Anwendungen, die auf Amazon EC2 oder AWS Elastic Beanstalk laufen, unter AWS Lambda ausgeführter Code oder eine beliebige Webanwendung.

Amazon API Gateway kümmert sich dabei um sämtliche Aufgaben, die mit der Annahme und Verarbeitung zehntausender bis hunderttausender gleichzeitiger API-Aufrufe im Zusammenhang stehen. Man denke zum Beispiel an Datenverkehrsmanagement, Autorisierung/Zugriffssteuerung, Überwachung und API-Versionsmanagement. Wie bei AWS üblich, berechnet das Unternehmen für Amazon API Gateway weder Mindestgebühren Vorabkosten. Der Kunde zahlt lediglich für eingehende API-Aufrufe und ausgehende Datenübertragungen. Zusätzlich zahlt er bei Websocket-APIs für Nachrichten, die gesendet und empfangen wurden sowie für die Zeit, die ein Benutzer/Gerät mit dem Websocket API verbunden ist.

Auch wenn API Gateway verschiedene Backend-Typen unterstützt, kommt der Dienst in der Praxis sehr häufig im Zusammenhang mit AWS Lambda zum Einsatz. Der Grund liegt nahe. Lambda ist ein rein Event-getriebener Compute Service, dessen Trigger in der Regel AWS-interne Services sind bzw. sein müssen. Einer der unterstützten Trigger für Lambda ist allerdings API Gateway. Auf diese Weise ist es z. B. möglich, eine existierende Lambda-Funktion durch einen HTTPS-Aufruf von „außen“ auslösen zu lassen, die dann wiederrum mit anderen Backend-Systemen kommuniziert. Folgender Workshop zeigt anhand einer einfache Demo-Lambda-Function „HelloWorld“, wie ein Workflow zum Hosten einer passenden RestAPI aussehen könnte, um die Lambda-Function durch einen Nutzer Browser-basiert auflösen zu können.

Demo-Lambda-Funktion

Für die Anbindung ans API-Gateway ist es zunächst unerheblich, welche Logik die Lambda-Funktion ausführt. Wir begnügen aus daher mit einem einfache „Hello World“ in Node.Js. Dazu könnte man wahlweise das passende HelloWorld-Sample aus dem Lambda-Vorlagenkatalog verwenden oder eine Lambda-Funktion im Inline-Editor from scratch schreiben. In diesem Fall fügt das die Lambda-Konsole automatischen ein HelloWorld-Skeleton ein:

exports.handler = async (event) => {
   // TODO implement
   const response = {
      statusCode: 200,
      body: JSON.stringify(‚Hello from Lambda!‘),
   };
   return response;
};

Der Skeleton erklärt sich von selbst. Für den Datenaustausch mit einem Webserver kommt heute häufig das JSON-Format zum Einsatz. Allerdings müssen beim Senden von Daten an einen Webserver die Daten selbst als Zeichenfolge zur Verfügung stehen. Die Funktion JSON.stringify () konvertiert ein bestehendes JavaScript-Objekt in einen String.

Bevor man die Funktion im Inline-Editor einfügen kann, verlangt die Lambda-Konsole wie üblich einen Rollennamen, eine IAM-Rolle nebst Richtlinie und die gewünschte Laufzeitumgebung. Wir lassen in diesem Fall eine neue Rolle aus einer Vorlage erstellen und verwenden als Richtlinienvorlage „Einfache Microservices-Berechtigungen“. Wir schreiben jedoch unserer Hello-World-Funktion für dieses Beispiel vollständig selbst, wobei wir es so einfach wie möglich halten, und überschreiben daher das Standard-Skeleton-Vorschlag wie folgt:

 

exports.handler = (event, context, callback) => {
      callback(null,’Dies ist mein erstes ‚)
   };

Um die korrekte Ausführung der neuen Lambda-Funktion an Ort und Stelle testen zu können bietet die Lamda-Konsole bekanntlich die Möglichkeit, neue Funktionen lokal zu testen und dazu ein Test-Template auszuwählen. Dazu klickt man in der Lambda-Konsole oben rechts auf die Schaltfläche „Test“, wähl dann als „Ereignisvorlage“ den Eintrag „HelloWorld“ und vergeben einen beliebigen Ereignisnamen. Anschließend ersetzen wir den Key1 durch einen einprägsamen Value wie z. B. „Hallo Welt von NodeJS“

{
   „key1“: „Hallo Welt von NodeJS“,
   „key2“: „value2“,
   „key3“: „value3“
}

 

Nun ergänzen wir unseren Beispiel-Code um die Ausgabe des Test-Events.

   exports.handler = (event, context, callback) => {
      callback(null,’Dies ist mein erstes ‚ + event.key1)
      };

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.