Update: Die Web-Konsole für AWS Lambda hat seit dem 11. August 2017 eine neue Benutzeroberfläche. Diesen Artikel und die Screenshots habe ich entprechend angepasst.
In dieser praktischen Einführung lernst du Schritt für Schritt, wie du eine einfache AWS Lambda-Funktion erstellst, die den Messwert eines Thermometers verarbeitet. Der Einfachheit halber schließe ich kein echtes Thermometer an, sondern zeige dir, wie du Test-Events erzeugen und an deine Lambda-Funktion senden kannst.
Hinweis: Um dieses Tutorial selbst auszuprobieren, benötigst du ein Konto bei AWS. Falls du noch kein Konto hast, kannst du direkt bei AWS eines eröffnen und erhältst zwölf Monate lang Zugriff auf das kostenlose Nutzungskontingent von AWS.
Was ist AWS Lambda?
Bei AWS Lambda handelt es sich um einen von Amazon Web Services (AWS) bereitgestellten Dienst, der deinen Programmcode ausführt, sobald bestimmte Ereignisse (engl. Events) eintreten. Ein solches Event kann durch den Aufruf einer bestimmten Webadresse ausgelöst werden, aber auch z.B. durch Änderungen in einer Datenbank, das Hochladen oder Verändern einer Datei oder durch Sensor-Daten in einem IoT-Szenario.
Automatische Resourcenverwaltung durch Serverless-Technologie
Bei AWS Lambda handelt es sich um eine sogenannte „Serverless“-Technologie. Das bedeutet, dass AWS die erforderlichen Rechnerressourcen für dich verwaltet. Du muss dich also nicht um die darunterliegende Serverinfrastruktur kümmern, sondern lediglich dafür sorgen, dass im Falle eines entsprechenden Events die richtige Funktion ausgeführt wird.
Automatische Skalierung
Das macht AWS Lambda auch zu einer hervorragenden Basis für Anwendungen mit wechselnder oder nur gelegentlicher Auslastung, denn es skaliert automatisch, wenn die Nachfrage steigt, und spart Kosten in Zeiten mit wenig Betrieb.
Kosten fallen nur für tatsächliche Rechenzeit an
Tatsächlich lassen sich mit AWS Lambda eine Menge Kosten sparen, denn du bezahlst nur für die Zeit, die die Ausführung deines Programmcodes tatsächlich benötigt. Wenn du stattdessen EC2-Instanzen – also virtuelle Maschinen in der Cloud – betreiben würdest, dann würde AWS dir die gesamte Laufzeit der Instanzen in Rechnung stellen, ganz gleich, ob sie gerade Anfragen bearbeiten oder nicht.
Deine erste AWS-Lambda-Funktion
Melde dich zunächst an der AWS Management Console an und öffne das AWS-Lambda-Dashboard, indem du in der Service-Übersicht nach der Sektion „Compute“ und dort den Unterpunkt „Lambda“ suchst. Alternativ kannst du auch diesen Link verwenden.
Wenn du noch keine Lambda-Funktionen angelegt hast, dann wird dir zunächst die im folgenden Screenshot abgebildete Quick-Start-Seite angezeigt.
Mit einem Klick auf „Get Started Now“ beginnst du die Erstellung deiner ersten Lambda-Funktion. Diese besteht aus drei Schritten, durch die ich in den kommenden Abschnitte führe.
1. Select Blueprint – Eine Vorlage auswählen
Im ersten Schritt kannst du aus einer großen Zahl bereits vorkonfigurierter Vorlagen (engl. Blueprints) für viele der typischen Anwendungsfälle wählen. Wirf gerne einen Blick auf die verschiedenen Blueprints, um ein Gefühl dafür zu bekommen, was man mit AWS Lambda alles machen kann. Für unser Beispiel reicht jedoch erstmal das „Blank Function“-Blueprint aus:
2. Configure Triggers – Einen Auslöser konfigurieren
Sobald du eine Vorlage ausgewählt hast, kannst du deine Lambda-Funktion mit einem anderen AWS-Service verbinden, der als Auslöser für die Funktion dienen soll. Um dieses Beispiel möglichst einfach zu halten, wirst du die Funktion später manuell auslösen. Lasse den Trigger also leer und klicke auf „Next“.
3. Configure Function – Die eigentliche Lambda-Funktion konfigurieren
Jetzt bist du bei der Konfiguration der eigentlichen Lambda-Funktion angelangt. Hier kannst du deiner Funktion einen Namen geben – in unserem Beispiel „Thermostat“ – und eine Runtime auswählen, in der der Code ausgeführt werden soll. Hier stehen dir C#, Java, Node.js und Python zur Verfügung (Stand Juli 2017). Wir schreiben unser Beispiel in JavaScript, d.h. du kannst hier Node.js 6.10 auswählen:
Das Beispiel in desem Artikel verwendet JavaScript, wähle hier also die neuste Version von Node.js aus:
Im eigentlichen Programmcode kannst du erstmal die Beispielfunktion so lassen, wie sie ist. Etwas weiter unten musst du der Lambda-Funktion eine IAM-Rolle zuweisen. Dies ist erforderlich, damit die Funktion die Rechte erhält, die sie zur Ausführung benötigt:
Sobald du im Eingabefeld für die Rolle den Punkt „Create a custom role“ auswählst, öffnet sich ein neues Fenster, in dem du die konkrete Rolle anlegen kannst. Hier reicht es aus, die Standardeinstellungen zu übernehmen.
Die hiermit erstellte Rolle bekommt automatisch die erforderlichen Berechtigungen, um Logausgaben in den AWS-internen Logging-Dienst CloudWatch zu schreiben.
Hinweis: Die hier erstellte Rolle kannst du in Zukunft wiederverwenden. So musst du nicht für jede Lambda-Funktion eine eigene Rolle anlegen. Hier findest du weitere Informationen über Rollen und die damit verbundene Zugriffssteuerung.
Sobald du die neue Rolle erstellt hast, klicke auf „Create“ und du kommst zurück zur eigentlichen Funktion. Mit einem Klick auf „Next“ schließt du die Konfiguration ab.
Auf der folgenden Seite hast du die Möglichkeit, noch einmal einen Blick auf alle Einstellungen zu werfen. Mit „Create Function“ wird die neue Funktion schließlich erstellt und du bekommst die folgende Meldung zur Bestätigung:
Die Lambda-Funktion testen
Du befindest dich nun auf der Funktionsseite und hast die Möglichkeit, den Programmcode zu ändern und zu testen sowie weitere Konfigurationen vorzunehmen.
Um zu sehen, ob die Konfiguration grundlegend funktioniert, klicke einfach auf den Button „Test“. Das öffnet ein Fenster, in dem du ein Test-Event konfigurieren kannst.
Events, mit denen Lambda-Funktionen ausgelöst werden, bestehen einfach aus einem JSON-Dokument, das an die API der Funktion gesendet wird. Daher bestehen auch die Test-Events aus einfachen JSON-Objekten.
Das Test-Event für unsere Funktion kann zunächst so bleiben, wie es ist, da die Funktion bisher nicht auf den Inhalt zugreift. Klicke rechts unten einfach auf „Save and test“, um das Fenster zu schließen und den Test auszuführen.
Im Hauptfenster wird nach Abschluss der Verarbeitung das Ausführungsergebnis (engl. Execution result) sowie ein Hinweis darauf angezeigt, ob die Funktion erfolgreich ausgeführt werden konnte:
Wenn alles richtig konfiguriert ist, siehst du links oben den Rückgabewert der Funktion „Hello from Lambda“, darunter eine Zusammenfassung sowie auf der rechten Seite eine detaillierte Log-Ausgabe.
Eine echte Lambda-Funktion implementieren
Nachdem du sichergestellt hast, dass alles richtig zusammenspielt, kannst du nun die Funktionalität des Thermostats implementieren. Schreibe hierzu das folgende Codebeispiel in das dafür vorgesehene Eingabefeld:
1exports.handler = function(event, context) {
2 var max_temp = 23,
3 min_temp = 14,
4 response;
5 var message = JSON.parse(event.Records[0].Sns.Message);
6
7 console.log(message);
8
9 if (message.temp < min_temp) { response = "Temparatur zu niedrig!"; } else if (message.temp > max_temp) {
10 response = "Temparatur zu hoch!";
11 } else {
12 response = "Temparatur im zulässigen Bereich.";
13 }
14 context.succeed(response);
15};
Die Funktion besteht aus einem einfachen Handler, der ein Event von einem Thermometer erwartet. Dieses (in unserem Beispiel simulierte) Thermometer versendet seine Events via den AWS-eigenen Benachrichtigungsdienst Amazon Simple Notification Service (SNS) .
Der Handler holt sich die eigentliche Nachricht (engl. Message) aus dem Event, gibt sie zunächst auf der Konsole aus und gibt schließlich das Verarbeitungsergebnis zurück: Wenn die Temperatur zwischen 14 und 23 Grad Celsius liegt, dann ist sie im zulässigen Bereich, ansonsten entsprechend zu hoch oder zu niedrig.
Nun musst du noch das Test-Event anpassen, da die Funktion jetzt ein Event im Format einer SNS-Nachricht mit der Angabe einer Temperatur erwartet. Klicke hierzu auf „Actions -> Configure test event“ und gib das folgende JSON-Dokument ein:
1{ 2 "Records": [ 3 { 4 "EventSource": "aws:sns", 5 "EventVersion": "1.0", 6 "Sns": { 7 "Type": "Notification", 8 "MessageId": "e16b9470-0fdd-4df1-8fb8-3fe209b1cf51", 9 "Subject": "Test", 10 "Message": "{\"gid\":\"1234\",\"temp\":20}" 11 } 12 } 13 ] 14}
Mit „Save and test“ schickst du es schließlich an die Lambda-Funktion. Wenn alle Eingaben richtig waren, dann solltest du nach einer kurzen Verarbeitungszeit die folgende Ausgabe sehen:
Jetzt kannst du die Funktion beliebig oft durch einen Klick auf „Test“ ausführen. Außerdem kannst du über „Actions -> Configure test event“ die übergebene Temperatur ändern und schauen, welche Auswirkungen das auf die Funktion hat.
Wenn dich dieses Beispiel neugierig gemacht hat, dann findest du hier eine Menge Ressourcen, weitere Codebeispiele und Referenzarchitekturen für komplexere Anwendungsszenarien.
Viel Spaß beim Experimentieren,
Dennis
Weitere Beiträge
von Dennis Traub
Dein Job bei codecentric?
Jobs
Agile Developer und Consultant (w/d/m)
Alle Standorte
Weitere Artikel in diesem Themenbereich
Entdecke spannende weiterführende Themen und lass dich von der codecentric Welt inspirieren.
Gemeinsam bessere Projekte umsetzen.
Wir helfen deinem Unternehmen.
Du stehst vor einer großen IT-Herausforderung? Wir sorgen für eine maßgeschneiderte Unterstützung. Informiere dich jetzt.
Hilf uns, noch besser zu werden.
Wir sind immer auf der Suche nach neuen Talenten. Auch für dich ist die passende Stelle dabei.
Blog-Autor*in
Dennis Traub
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.
Du hast noch Fragen zu diesem Thema? Dann sprich mich einfach an.