Funktionsweise von Lambda
Lambda-Funktionen sind die grundlegenden Bausteine, die Sie zum Erstellen von Lambda-Anwendungen verwenden. Beim Schreiben von Funktionen ist es wichtig, die Kernkonzepte und -komponenten zu verstehen, aus denen das Lambda-Programmiermodell besteht. In diesem Abschnitt werden die grundlegenden Elemente vorgestellt, die Sie benötigen, um mit der Entwicklung von Serverless-Anwendungen mit Lambda zu beginnen.
-
Lambda-Funktionen und -Funktionshandler: Eine Lambda-Funktion ist ein kleiner Codeblock, der als Reaktion auf Ereignisse ausgeführt wird. Funktionen sind die grundlegenden Bausteine, die Sie zum Erstellen von Anwendungen verwenden. Funktionshandler sind der Einstiegspunkt für Ereignisobjekte, die Ihr Lambda-Funktionscode verarbeitet.
-
Lambda-Ausführungsumgebung und -Laufzeiten: Lambda-Ausführungsumgebungen verwalten die Ressourcen, die zum Ausführen Ihrer Funktion erforderlich sind. Laufzeiten sind die sprachspezifischen Umgebungen, in denen Ihre Funktionen ausgeführt werden.
-
Ereignisse und Auslöser: Wie andere AWS-Services Ihre Funktionen als Reaktion auf bestimmte Ereignisse aufrufen.
-
Lambda-Berechtigungen und -Rollen: Wie Sie kontrollieren, wer auf Ihre Funktionen zugreifen kann und mit welchen anderen AWS-Services Ihre Funktionen interagieren können.
Tipp
Wenn Sie die Entwicklung von Serverless-Komponenten zuerst besser verstehen möchten, lesen Sie die Informationen zum Unterschied zwischen herkömmlicher Entwicklung und Serverless-Entwicklung im AWS-Serverless-Entwicklerhandbuch.
Lambda-Funktionen und -Funktionshandler
In Lambda sind Funktionen die grundlegenden Bausteine, mit denen Sie Anwendungen erstellen. Eine Lambda-Funktion ist ein Codeteil, der als Reaktion auf Ereignisse ausgeführt wird, z. B. wenn ein Benutzer auf eine Schaltfläche auf einer Website klickt oder eine Datei in einen Bucket in Amazon Simple Storage Service (Amazon S3) hochgeladen wird. Sie können sich eine Funktion als eine Art eigenständiges Programm mit den folgenden Eigenschaften vorstellen. Ein Lambda-Funktionshandler ist die Methode in Ihrem Funktionscode, die Ereignisse verarbeitet. Wenn eine Funktion als Reaktion auf ein Ereignis ausgeführt wird, führt Lambda den Funktionshandler aus. Daten zum Ereignis, das die Ausführung der Funktion verursacht hat, werden direkt an den Handler übergeben. Während der Code in einer Lambda-Funktion mehrere Methoden oder Funktionen enthalten kann, können Lambda-Funktionen nur einen Handler enthalten.
Um eine Lambda-Funktion zu erstellen, bündeln Sie den Funktionscode und die zugehörigen Abhängigkeiten in einem Bereitstellungspaket. Lambda unterstützt zwei Arten von Bereitstellungspaketen: ZIP-Dateiarchive und Container-Images.
-
Eine Funktion hat eine bestimmte Aufgabe oder einen bestimmten Zweck.
-
Sie wird nur ausgeführt, wenn sie als Reaktion auf bestimmte Ereignisse benötigt wird.
-
Sie wird automatisch beendet, wenn sie fertig ist.
Lambda-Ausführungsumgebung und -Laufzeiten
Lambda-Funktionen werden in einer sicheren, isolierten Ausführungsumgebung ausgeführt, die Lambda für Sie verwaltet. Diese Ausführungsumgebung verwaltet die Prozesse und Ressourcen, die zum Ausführen der Funktion erforderlich sind. Wenn eine Funktion zum ersten Mal aufgerufen wird, erstellt Lambda eine neue Ausführungsumgebung, in der die Funktion ausgeführt werden kann. Nachdem die Ausführung der Funktion abgeschlossen wurde, beendet Lambda die Ausführungsumgebung nicht sofort. Wenn die Funktion erneut aufgerufen wird, kann Lambda die vorhandene Ausführungsumgebung wiederverwenden.
Die Lambda-Ausführungsumgebung enthält außerdem eine Laufzeit, eine sprachspezifische Umgebung, die Ereignisinformationen und Antworten zwischen Lambda und Ihrer Funktion weiterleitet. Lambda bietet eine Reihe von verwalteten Laufzeiten für die gängigsten Programmiersprachen, Sie können aber auch eigene erstellen.
Bei verwalteten Laufzeiten wendet Lambda automatisch Sicherheitsupdates und Patches auf Funktionen an, die die Laufzeit verwenden.
Ereignisse und Auslöser
Sie können eine Lambda-Funktion auch direkt über die Lambda-Konsole, die AWS CLI
Damit Ihre Funktion auf Ereignisse reagiert, richten Sie einen Auslöser ein. Ein Auslöser verbindet Ihre Funktion mit einer Ereignisquelle und Ihre Funktion kann mehrere Auslöser haben. Wenn ein Ereignis eintritt, empfängt Lambda Ereignisdaten als JSON-Dokument und konvertiert es in ein Objekt, das Ihr Code verarbeiten kann. Sie können das folgende JSON-Format für Ihr Ereignis definieren und die Lambda-Laufzeit konvertiert dieses JSON-Dokument in ein Objekt, bevor es an den Handler Ihrer Funktion übergeben wird.
Beispiel Benutzerdefiniertes Lambda-Ereignis
{ "Location": "SEA", "WeatherData":{ "TemperaturesF":{ "MinTempF": 22, "MaxTempF": 78 }, "PressuresHPa":{ "MinPressureHPa": 1015, "MaxPressureHPa": 1027 } } }
Lambda verwendet wie Stream- und Warteschlangenservices wie Amazon Kinesis oder Amazon SQS eine Zuordnung von Ereignisquellen anstelle eines Standardauslösers. Bei Zuordnungen von Ereignisquellen wird die Quelle nach neuen Daten abgefragt, Datensätze gebündelt und anschließend Ihre Funktion mit den gebündelten Ereignissen aufgerufen. Weitere Informationen finden Sie unter Wie unterscheiden sich Zuordnungen von Ereignisquellen von direkten Auslösern.
Um zu verstehen, wie ein Auslöser funktioniert, beginnen Sie mit dem Tutorial Verwenden eines Amazon-S3-Auslösers. Einen allgemeinen Überblick über die Verwendung von Auslösern und Anweisungen zum Erstellen eines Auslösers mithilfe der Lambda-Konsole finden Sie unter Integration anderer Services.
Lambda-Berechtigungen und -Rollen
Bei Lambda gibt es zwei Haupttypen von Berechtigungen, die Sie konfigurieren müssen:
-
Berechtigungen, die Ihre Funktion benötigt, um auf andere AWS-Services zuzugreifen
-
Berechtigungen, die andere Benutzer und AWS-Services für den Zugriff auf Ihre Funktionen benötigen
In den folgenden Abschnitten werden diese beiden Berechtigungstypen beschrieben und bewährte Methoden für die Anwendung von geringsten Berechtigungen erörtert.
Berechtigungen für Funktionen für den Zugriff auf andere AWS-Ressourcen
Lambda-Funktionen müssen häufig auf andere AWS-Ressourcen zugreifen und Aktionen für sie ausführen. Eine Funktion könnte beispielsweise Elemente aus einer DynamoDB-Tabelle lesen, ein Objekt in einem S3-Bucket speichern oder in eine Amazon-SQS-Warteschlange schreiben. Um Funktionen die Berechtigungen zu geben, die sie für die Ausführung dieser Aktionen benötigen, verwenden Sie eine Ausführungsrolle.
Eine Lambda-Ausführungsrolle ist eine besondere AWS Identity and Access Management (IAM)-Rolle, eine Identität, die Sie in Ihrem Konto erstellen und der bestimmte in einer Richtlinie definierte Berechtigungen zugeordnet sind.
Jede Lambda-Funktion muss eine Ausführungsrolle haben und eine einzelne Rolle kann von mehr als einer Funktion verwendet werden. Wenn eine Funktion aufgerufen wird, übernimmt Lambda die Ausführungsrolle der Funktion und erhält die Berechtigung, die in der Richtlinie der Rolle definierten Aktionen auszuführen.
Wenn Sie eine Funktion in der Lambda-Konsole erstellen, erstellt Lambda automatisch eine Ausführungsrolle für Ihre Funktion. Die Richtlinie der Rolle gibt Ihrer Funktion grundlegende Berechtigungen zum Schreiben von Protokollausgaben in Amazon CloudWatch Logs. Um Ihrer Funktion die Berechtigung zu erteilen, Aktionen für andere AWS-Ressourcen auszuführen, müssen Sie die Rolle bearbeiten, um die zusätzlichen Berechtigungen hinzuzufügen. Berechtigungen können am einfachsten mithilfe einer von AWS verwalteten Richtlinie hinzugefügt werden. Verwaltete Richtlinien werden von AWS erstellt und verwaltet und stellen Berechtigungen für viele gängige Anwendungsfälle bereit. Wenn Ihre Funktion beispielsweise CRUD-Operationen für eine DynamoDB-Tabelle ausführt, können Sie Ihrer Rolle die AmazonDynamoDBFullAccess-Richtlinie hinzufügen.
Berechtigungen für andere Benutzer und Ressourcen für den Zugriff auf Ihre Funktion
Um anderen AWS-Service Zugriffsberechtigungen auf Ihre Lambda-Funktion zu gewähren, verwenden Sie eine ressourcenbasierte Richtlinie. In IAM werden ressourcenbasierte Richtlinien einer Ressource zugeordnet (in diesem Fall Ihrer Lambda-Funktion). Sie definieren, wer auf die Ressource zugreifen kann und welche Aktionen sie ausführen können.
Damit ein anderer AWS-Service Ihre Funktion über einen Auslöser aufrufen kann, muss die ressourcenbasierte Richtlinie Ihrer Funktion diesem Service die Berechtigung zur Verwendung der Aktion lambda:InvokeFunction erteilen. Wenn Sie den Auslöser mit der Konsole erstellen, fügt Lambda diese Berechtigung automatisch für Sie hinzu.
Um anderen AWS-Benutzern die Berechtigung zum Zugriff auf Ihre Funktion zu erteilen, können Sie dies in der ressourcenbasierten Richtlinie Ihrer Funktion genauso definieren wie für einen anderen AWS-Service oder eine andere Ressource. Sie können auch eine identitätsbasierte Richtlinie verwenden, die dem Benutzer zugeordnet ist.
Bewährte Methoden für Lambda-Berechtigungen
Wenn Sie Berechtigungen mithilfe von IAM-Richtlinien festlegen, empfiehlt es sich aus Sicherheitsgründen nur die zum Ausführen einer Aufgabe erforderlichen Berechtigungen zu erteilen. Dies wird als Prinzip der geringsten Berechtigungen bezeichnet. Um mit der Erteilung von Berechtigungen für Ihre Funktion zu beginnen, können Sie sich für die Verwendung einer von AWS verwalteten Richtlinie entscheiden. Verwaltete Richtlinien können die schnellste und einfachste Methode sein, um Berechtigungen für die Ausführung einer Aufgabe zu erteilen. Sie können jedoch auch andere Berechtigungen beinhalten, die Sie nicht benötigen. Wenn Sie von der frühen Entwicklungsphase über die Testphase bis hin zur Produktion voranschreiten, empfehlen wir Ihnen, die Berechtigungen auf die erforderlichen zu reduzieren, indem Sie Ihre eigenen vom Kunden verwalteten Richtlinien definieren.
Das gleiche Prinzip gilt für die Erteilung von Berechtigungen für den Zugriff auf Ihre Funktion mithilfe einer ressourcenbasierten Richtlinie. Wenn Sie beispielsweise Amazon S3 die Berechtigung erteilen möchten, Ihre Funktion aufzurufen, empfiehlt es sich, den Zugriff auf einzelne Buckets oder Buckets in bestimmten AWS-Konten zu beschränken, anstatt dem S3-Service pauschale Berechtigungen zu erteilen.