© oneinchpunch/Shutterstock.com
In nur wenigen Schritten von der Anwendung zur Ausführung gelangen

Laufzeitumgebung in AWS Lambda


AWS Lambda [1] ist ein serverloser Compute-Service, der Code als Reaktion auf Ereignisse ausführt und automatisch die zugrunde liegenden Compute-Ressourcen verwaltet. Lambda unterstützt nativ Java, Go, PowerShell, Node.js, C#, Python und Ruby. Vor kurzem wurde eine interessante neue Funktionalität vorgestellt: ein Runtime API [2], das es ermöglicht, jede andere Programmiersprache im Kontext von Lambda zu nutzen, um eigene Funktionen zu implementieren. Im Folgenden werden wir einen genauen Blick auf AWS Lambda, AWS Lambda Layers [3] und AWS Lambda Custom Runtimes [4] werfen.

Der Service AWS Lambda kann verwendet werden, um eigene Anwendungen zu implementieren oder um AWS-Dienste mit benutzerdefinierter Logik zu erweitern. Ein besonderer Aspekt von AWS Lambda ist, dass dieser Service automatisch Code als Reaktion auf Ereignisse ausführen kann, wie z. B. HTTP Requests über das Amazon API Gateway, Änderungen an Objekten in Amazon S3 Buckets und Statusübergänge in AWS Step Functions.

Lambda führt Code auf einer hochverfügbaren Compute-Infrastruktur aus und übernimmt dabei vollständig die Verwaltung der Computerressourcen, einschließlich Server- und Betriebssystemwartung, Kapazitätsbereitstellung und automatischer Skalierung sowie der Bereitstellung von Code und Sicherheitspatches. Es muss lediglich der eigene Code zu AWS Lambda hochgeladen werden.

Container-Reuse in AWS Lambda

AWS-Lambda-Funktionen werden in einem Container (also in einer Sandbox) ausgeführt, der sie von anderen Funktionen isoliert und die in der Konfiguration der Funktion angegebenen Ressourcen wie beispielsweise Speicher bereitstellt. Wenn eine Funktion zum ersten Mal nach der Erstellung oder Aktualisierung des Codes oder der Ressourcenkonfiguration ausgeführt wird, wird ein neuer Container mit den entsprechenden Ressourcen erstellt, um sie auszuführen, und der Code für die Funktion wird in den Container geladen. Am Beispiel von Node.js kann sehr gut demonstriert werden, wie der Container-Reuse in AWS Lambda funktioniert. Der Initialisierungscode in Node.js wird einmal pro Containererstellung ausgeführt, bevor der Handler zum ersten Mal aufgerufen wird.

In Node.js kann eine Lambda-Funktion auf eine von drei Arten beendet werden:

  • Timeout: Eine benutzerdefinierte Dauer ist erreicht. Die Ausführung wird unabhängig davon, was der Code gerade tut, vorübergehend gestoppt.

  • Kontrollierter Abbruch: Einer der Callbacks (der nicht der ursprüngliche Einstiegspunkt des Handlers sein muss) ruft context.done() auf und beendet dann seine eigene Ausführung. Die Ausführung wird unabhängig davon beendet, was die anderen Callbacks (falls vorhanden) tun.

  • Standardmäßige Beendigung. Wenn alle Callbacks beendet sind (auch wenn keiner context.done() aufgerufen hat), wird die Funktion ebenfalls beendet. Wenn kein Aufruf von context.done() existiert, kann in der Logdatei der Eintrag „Process exited before completing request“ gefunden werden.

Betrachten wir jetzt die zweite Ausführung: Eine Funktion ist beendet und nach einiger Zeit wird sie wieder aufgerufen. Lambda kann einen Container ganz neu erstellen, in dem Fall passiert exakt das, was soeben beschrieben wurde. Wenn der Code nicht modifiziert wurde und noch nicht zu viel Zeit vergangen ist, kann Lambda den vorherigen Container wiederverwenden. Das bietet folgende Leistungsvorteile: Lambda kann die Sprachinitialisierung von Node.js und zusätzlich die Initialisierung des Funktionscodes überspringen. Dateien, die beim letzten Aufruf in /tmp geschrieben wurden, werden auch beim aktuellen Aufruf vorhanden sein, wenn die Sandbox wiederverwendet wird. Wenn Lambda-Funktionscode implementiert wird, sollte nicht davon ausgegangen werden, dass AWS Lambda den Ausführungskontext für nachfolgende Funktionsaufrufe automatisch wiederverwendet. Andere Faktoren können es erforderlich machen, dass AWS Lambda einen neuen Ausführungskontext erstellt, was zu unerwarteten Ergebnissen führen kann, wie beispielsweise zu Ausfällen der Datenbankverbindung.

Funktionalitäten mit A...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Gewinner-Teams

Wir bieten Lizenz-Lösungen für Teams jeder Größe: Finden Sie heraus, welche Lösung am besten zu Ihnen passt.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang