AWS Lambda Amazon Web Service für serverlose Datenverarbeitung

Autor / Redakteur: Sascha Möllering * / Stephan Augsten

„Wir würden gerne AWS Lambda nutzen, um bestehende Anwendungen ohne eigens verwaltete Server zu implementieren. Welche Empfehlungen und Entwurfsmuster existieren für AWS Lambda?“

Anbieter zum Thema

AWS Lambda ist ein serverloser Datenverarbeitungsservice, der Code beim Eintreten bestimmter Ereignisse ausführt und automatisch verwaltet.
AWS Lambda ist ein serverloser Datenverarbeitungsservice, der Code beim Eintreten bestimmter Ereignisse ausführt und automatisch verwaltet.
(Bild: Amazon Web Services)

AWS Lambda ist ein serverloser Datenverarbeitungsservice, der Code beim Eintreten bestimmter Ereignisse ausführt und automatisch für die zugrundeliegenden Datenverarbeitungsressourcen verwaltet. Lambda-Funktionen werden in einem Container (also in einer Sandbox) ausgeführt, der sie von anderen Funktionen isoliert und Ressourcen wie Speicher bereitstellt.

Eines der wesentlichen Merkmale ist, dass die Lambda-Funktionen zustandslos implementiert werden müssen. Nach der Ausführung einer Funktion ist der Zustand nicht mehr verfügbar. Falls es notwendig ist, einen Applikationszustand zu halten (wie der Warenkorb eines E-Commerce-Systems), muss dieser in externen Systemen wie beispielsweise Amazon DynamoDB gehalten werden.

Jede Lambda-Funktion hat eine sogenannte „Cold Start“-Phase, also einen gewissen Zeitraum, in dem eine Initialisierung der Lambda-Funktion durchgeführt wird. Dazu gehört beispielsweise auch die Verbindung zu einer Datenbank. Nach der Ausführung einer Lambda-Funktion wird der Container von der darunterliegenden Infrastruktur nach einer gewissen Zeit wieder entfernt.

Beim nächsten Aufruf würde demnach erneut ein Cold Start der Funktion auftreten. Um das zu verhindern, kann mithilfe von „Amazon CloudWatch Events“ eine Lambda-Funktion in regelmäßigen Abständen aufgerufen werden.

Jede Lambda-Funktion besitzt einen Handler als Einstiegspunkt für Events. Datenbankverbindungen und AWS-Clients sollten außerhalb dieses Handlers erzeugt werden, damit die Verbindung nicht bei jedem Event-Aufruf aufgebaut werden muss. Ein Beispiel für dieses Pattern ist folgende Lambda-Funktion, die außerhalb des Handlers die Verbindung zu einer DynamoDB-Tabelle aufbaut:

var aws = require('aws-sdk');
var ddb = new aws.DynamoDB(
  {endpoint: "https://dynamodb.eu-west-1.amazonaws.com/",
  params: {TableName: "messages"}});
exports.handler = function(event, context) {
  var tableName = " messages";
  ddb.scan({
    TableName : tableName,
    Limit : 10
  });
};

AWS Lambda bietet unter dem Ordner /tmp 512 Megabyte temporären Speicher, der für Dateisystemoperationen genutzt werden kann. Ein typischer Einsatzzweck ist beispielsweise die Konvertierung von kurzen Videos mit FFmpeg.

Sascha Möllering
Sascha Möllering
(Bild: AWS Germany GmbH)

Es kann nicht davon ausgegangen werden, dass der Zustand im temporären Dateisystem über die Ausführungszeit der Lambda-Funktion hinaus erhalten bleibt. Die Dateien, die durch Applikationen wie FFmpeg entstehen, müssen demzufolge nach der Erzeugung zur persistenten Speicherung in einem Service wie Amazon S3 abgelegt werden.

* Sascha Möllering arbeitet als Solutions Architect bei der Amazon Web Services Germany GmbH. Seine Interessen liegen in den Bereichen Automation, Infrastructure as Code, Distributed Computing, Container und JVM.

(ID:44599374)