Einführung in AWS Lambda - Teil 2

Erstellen einer Lambda-Funktion

| Autor / Redakteur: Thomas Drilling / Florian Karlstetter

Mit AWS Lambda lässt sich Code ausführen, ohne dafür Server bereitstellen und verwalten zu müssen - ein Einstieg in die Funktionen.
Mit AWS Lambda lässt sich Code ausführen, ohne dafür Server bereitstellen und verwalten zu müssen - ein Einstieg in die Funktionen. (Bild: Amazon Web Services)

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.

Was ist Lambda und was kann man damit machen?

Einführung in AWS Lambda – Teil 1

Was ist Lambda und was kann man damit machen?

10.08.17 - AWS hat mit Lambda „Serverless Computing“, bzw. „Serverless Applications“ salonfähig gemacht. Microsoft hat mit Azure Functions und Google mit Cloud Functions nachgezogen. In allen drei Fällen handelt es sich um eine Ereignis-basierte und asynchrone Computing-Lösung, mit deren Hilfe sich kleine, einzelne, direkt mit anderen Cloud-Services korrespondierende Funktionen erstellen lassen, ohne dass dazu ein virtueller Server oder eine Laufzeitumgebung erstellt und verwaltet werden muss. lesen

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-Datenbank beispielsweise 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 erkennt man dann die drei im Beispielcode definierten Sample-Events, deren Keys und Values sich hier in Form eines JSON-Files ändern lassen. Die Struktur darf indes nicht verändert werden. Hier in der Console vorgenommene Änderungen sind immer lokal, d. h. mit „Save and test“ lässt sich die Funktionsweise der Lambda-Funktion testen, ohne dass durch das reale Auslösen eines Ereignisses Kosten entstehen.

Zur Erinnerung: jede Lambda-Funktion ist immer „live“. Ist der Trigger scharf, erscheint im Lambda-Dashboard grün hinterlegt der Eintrag „Your „Lambda function <function-name is now receiving events from <s3-bucket-name>, wobei <s3-bucket-name> dem hier gewählten Trigger entspricht. Um das Beispiel-JSON in der Test-Console so anzupassen, dass sich der Code testen lässt, müsste man z. B. das entsprechende S3 Bucket angeben und anschließend ein passendes Ereignis auslösen, z. B. einen S3-File-Upload. Im Reiter „Monitor lassen sich die Ergebnisse“ dann verfolgen.

Kommentare werden geladen....

Kommentar zu diesem Artikel

Der Kommentar wird durch einen Redakteur geprüft und in Kürze freigeschaltet.

Anonym mitdiskutieren oder einloggen Anmelden

Avatar
Zur Wahrung unserer Interessen speichern wir zusätzlich zu den o.g. Informationen die IP-Adresse. Dies dient ausschließlich dem Zweck, dass Sie als Urheber des Kommentars identifiziert werden können. Rechtliche Grundlage ist die Wahrung berechtigter Interessen gem. Art 6 Abs 1 lit. f) DSGVO.
  1. Avatar
    Avatar
    Bearbeitet von am
    Bearbeitet von am
    1. Avatar
      Avatar
      Bearbeitet von am
      Bearbeitet von am

Kommentare werden geladen....

Kommentar melden

Melden Sie diesen Kommentar, wenn dieser nicht den Richtlinien entspricht.

Kommentar Freigeben

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

Freigabe entfernen

Der untenstehende Text wird an den Kommentator gesendet, falls dieser eine Email-hinterlegt hat.

copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Kontaktieren Sie uns über: support.vogel.de/ (ID: 44809204 / Microservices)