© oneinchpunch/Shutterstock.com
Entwickler Magazin
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.

Sascha Möllering


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 gan...

Entwickler Magazin
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.

Sascha Möllering


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 gan...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang