Erstellen einer Lambda-Funktion Einführung in AWS Lambda - Teil 2

AWS-Lambda ist ein Ereignis-getriebener Compute-Service für die Cloud.

AWS hat mit Lambda „Serverless Computing“ salonfähig gemacht. Im Vergleich zu Azure Functions von Microsoft und Cloud Function von Google unterstützt AWS aber deutlich mehr Programmiersprachen und interagiert mit mehr Diensten. Der Einstieg in Lambda gelingt dank vollständiger Integration in der AWS Management Console recht einfach, auch wenn in der Praxis vorrangig programmatische Verarbeitung zum Einsatz kommt.

Für einen ersten Eindruck soll es daher genügen, Lambda-Funktionen über die AWS Management Console bereit zu stellen, auch wenn Entwickler Lambda-Funktionen in der Praxis meist programmatisch über die CLI/SDK nutzen. Hierzu klickt man in der Management Console im Bereich „Compute“ auf „Lambda / Get Started Now“. AWS bietet daraufhin die Möglichkeit, entweder eine neue Lambda-Funktion („Blank Function“) oder auf Basis vorhandener Vorlagen (Blueprints) zu erstellen. Deren Anzahl ist inzwischen auf 96 angewachsen. Die Lambda-Templates sind gruppiert nach der Programmiersprache und der Art der Interaktion mit anderen AWS-Diensten für Amazon S3, Amazon DynamoDB, SNS (AWS Simple Notification Service), Amazon Kinesis, Amazon CloudWatch oder externen Tools und Services, zu erkennen jeweils am unteren Rand der jeweiligen Blue-Print-Box.

Das folgende Beispiel soll vorrangig den Workflow demonstrieren und zeigen, wie sich Lambda-Funktionen prinzipiell einsetzen lassen, wozu AWS dankenswerterweise den Blueprint „hello-world-python“ zur Verfügung stellt. Hierbei handelt es sich um exemplarischen Python-Code; prinzipiell ist die verwendete Programmiersprache hierbei nicht von Bedeutung. Nach Auswahl des Blueprints „hello-world-python“ hat man dann im ersten Schritt des Assistenten „Configure triggers“ die Möglichkeit, einen Service auszuwählen, der die Lambda Funktion automatisch triggert. Ein Klick in die graue Box liefert eine Liste verfügbarer Services.

In Abhängigkeit des hier gewählten Services wird der Nutzer von AWS aufgefordert, weitere für diese Service relevante Informationen bereit zu stellen, bei einer DynamoDB-NoSQL-Datenbankbeispielsweise den Tabellen-Namen, die Batch-Größe und die Start-Position. Bei S3 bedarf es hingegen eines Bucket-Namen und eines Event-Typs. Da eine Lambda-Funktion immer „live“ ist, lässt sich der erstellte Trigger wahlweise erst einmal nur erstellen oder mit „Enable“ gleich aktivieren.

Wir wählen S3 als Trigger und können damit z. B. auf Veränderungen in einem S3-Bucket reagieren (Event type = Object Created (All)), etwa wenn ein Nutzer eine Datei hochlädt.

Hello Lambda

Mit einem Klick auf „Next“ geht es weiter mit der Konfiguration der Lambda-Funktion. Da es sich um ein Blueprint handelt, sind viele Konfigurationsoptionen bereits voreingestellt.

Als Funktionsname verwenden wir „hello-world-python-s3“. Die „Description“ ist optional. Das Hello-World-Beispiel nutzt Python 2.7 als Laufzeitumgebung, stellt ein Beispiel-Codegerüst bereit und identifiziert den Handler im Code-Beispiel; bei Python etwa wird ein „exports.handler()“ bereit gestellt.

Im Abschnitt „Lambda function code“ steht dann der komplette Beispiel-Code. Hierin ist „lambda_handler (event, context)“ der Funktionsname, der das Ereignis als Parameter aufnimmt, wenn die Lambda-Funktion ausgelöst wird. Der Beispiel-Code wird von der Management Console in der Datei „lambda_function.py“ gesichert.

Der Code verarbeitet hier drei eingehende Ereignisse in der Form …

{

“key3”: “value3”,

“key2”: “value2”,

“key1”: “value1″’

}

Unterhalb des Codes im Bereich „Lambda function handler and role“ steht bei „Handler“ der Wert „lambda_function.lambda_handler“. Er bezeichnet die „filename.handler-function“.

Ferner lässt sich bei „Role*“ automatisch eine IAM-Rolle (execution role) erstellen, die die benötigten Berechtigungen hat, damit AWS Lambda die Lambda-Funktion auf die verknüpften Ressourcen loslassen darf. Die Rolle kann komplett neu oder Template-basiert erstellt werden. Für das Hello-World-Beispiel besteht hier zwar kein Handlungsbedarf, weil die erstellte Lambda-Funktion bereits über benötigte elementare Ausführungs-Berechtigungen verfügt, wählt der Nutzer aber eine falsche oder unpassende Rolle aus, würde das entsprechende Event zwar die Funktion auslösen, das Ergebnis wäre aber nur ein Permission-Error. Erweiterte Einstellungen (Advanced settings) sind für das Beispiel nicht erforderlich. Nach einem Klick auf „Next“ und anschließend auf „Create Function“ wird AWS die Lambda-Funktion erstellen.

Die Management Console sichert den Code in einer Datei unter den angegebenen Dateinamen und verpackt sie in ein Zip-File. Anschließend wird das Zip zu AWS Lambda hochgeladen. Danach landet der Nutzer im Lambda-Dashboard. Jetzt könnte man die Funktion auslösen, sofern der oben definierte Trigger (Veränderungen am S3-Bucket) scharfgeschaltet ist. Einfacher und vor allem kostengünstiger funktioniert das Testen der Lambda-Funktion in der Console. Hierzu navigiert man zum Abschnitt „Test“ und kann dort seine Lambda-Funktion testen. Der Reiter „Triggers“ zeigt die oben definierten „Triggers“, hier ein S3-Bucket.

Im Reiter „Code“ lässt sich der Code der Lambda-Funktion einsehen und anpassen, während im Reiter „Configuration“ die beschriebene Konfiguration verändert werden kann. Die dort definierten Tags tauchen im Dashboard im Reiter „Tags“ auf und im Reiter „Monitoring“ lassen sich die zugrunde liegenden CloudWatch-Metriken einsehen. Im Menü „Actions“ ist es nun möglich, z. B. mit dem Eintrag „Configure test event“ ein Test-Szenario zu kreieren.

Hier weiterlesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

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