Erweitern Sie Lambda-Funktionen mithilfe von Lambda-Erweiterungen - AWS Lambda

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erweitern Sie Lambda-Funktionen mithilfe von Lambda-Erweiterungen

Sie können Lambda-Erweiterungen verwenden, um Ihre Lambda-Funktionen zu erweitern. Verwenden Sie beispielsweise Lambda-Erweiterungen, um Funktionen in Ihre bevorzugten Überwachungs-, Beobachtbarkeits-, Sicherheits- und Governance-Tools zu integrieren. Sie können aus einer Vielzahl von Tools wählen, die von AWS Lambda -Partnern bereitgestellt werden, oder Sie können Ihre eigenen Lambda-Erweiterungen erstellen.

Lambda unterstützt externe und interne Erweiterungen. Eine externe Erweiterung wird als unabhängiger Prozess in der Ausführungsumgebung ausgeführt und wird weiterhin ausgeführt, nachdem der Funktionsaufruf vollständig verarbeitet wurde. Da Erweiterungen als separate Prozesse ausgeführt werden, können Sie sie in einer anderen Sprache als die Funktion schreiben. Alle Lambda-Laufzeiten unterstützen Erweiterungen.

Eine interne Erweiterung wird als Teil des Laufzeitprozesses ausgeführt. Ihre Funktion greift auf interne Erweiterungen zu, indem Sie Wrapper-Skripte oder In-Process-Mechanismen wie verwende JAVA_TOOL_OPTIONS. Weitere Informationen finden Sie unter Ändern der Laufzeitumgebung.

Sie können einer Funktion Erweiterungen hinzufügen, indem Sie die Lambda-Konsole, die Dienste AWS Command Line Interface (AWS CLI) oder Infrastructure as Code (IaC) und Tools wie AWS CloudFormation, AWS Serverless Application Model (AWS SAM) und Terraform verwenden.

Ihnen wird die Ausführungszeit berechnet, die von der Erweiterung verbraucht wird (in Schritten von 1 ms). Es fallen keine Kosten für die Installation eigener Erweiterungen an. Weitere Informationen zur Preisgestaltung für Erweiterungen finden Sie unter AWS Lambda -Preise. Preisinformationen zu Partnererweiterungen finden Sie auf den Websites dieser Partner. Eine Liste der offiziellen Partnererweiterungen finden Sie unter AWS Lambda Partner für Erweiterungen.

Ein Tutorial zu Erweiterungen und deren Verwendung mit Ihren Lambda-Funktionen finden Sie im AWS Lambda Extensions Workshop.

Ausführungsumgebung

Lambda ruft Ihre Funktion in einer Ausführungsumgebung auf, die eine sichere und isolierte Laufzeitumgebung bereitstellt. Die Ausführungsumgebung verwaltet die Ressourcen, die zum Ausführen Ihrer Funktion erforderlich sind, und bietet Lebenszyklusunterstützung für die Laufzeit und die Erweiterungen der Funktion.

Der Lebenszyklus der Ausführungsumgebung umfasst die folgenden Phasen:

  • Init: In dieser Phase erstellt oder hebt Lambda eine Ausführungsumgebung mit den konfigurierten Ressourcen auf, lädt den Code für die Funktion und alle Ebenen herunter, initialisiert alle Erweiterungen, initialisiert die Laufzeit und führt dann den Initialisierungscode der Funktion (der Code außerhalb des Haupthandlers) aus. Die Phase Init erfolgt entweder während des ersten Aufrufs oder vor Funktionsaufrufen, wenn Sie die bereitgestellte Parallelität aktiviert haben.

    Die Init-Phase ist in drei Unterphasen unterteilt: Extension init, Runtime init und Function init. Diese Unterphasen stellen sicher, dass alle Erweiterungen und die Laufzeit ihre Einrichtungs-Aufgaben abschließen, bevor der Funktionscode ausgeführt wird.

    Wenn Lambda SnapStart aktiviert ist, findet die Init-Phase statt, wenn Sie eine Funktionsversion veröffentlichen. Lambda speichert einen Snapshot des Arbeitsspeichers und des Festplattenzustands der initialisierten Ausführungsumgebung, speichert den verschlüsselten Snapshot und speichert ihn im Cache für den Zugriff mit geringer Latenz. Wenn Sie über einen beforeCheckpoint-Laufzeit-Hook verfügen, wird der Code am Ende der Init-Phase ausgeführt.

  • Restore(SnapStart nur): Wenn Sie eine SnapStartFunktion zum ersten Mal aufrufen und die Funktion skaliert wird, nimmt Lambda neue Ausführungsumgebungen aus dem persistenten Snapshot wieder auf, anstatt die Funktion von Grund auf neu zu initialisieren. Wenn Sie über einen afterRestore()-Laufzeit-Hook verfügen, wird der Code am Ende der Restore-Phase ausgeführt. Die Dauer von afterRestore()-Laufzeit-Hooks wird Ihnen in Rechnung gestellt. Die Laufzeit (JVM) muss geladen werden und afterRestore()-Laufzeit-Hooks müssen innerhalb des Timeout-Limits(10 Sekunden) abgeschlossen werden. Andernfalls erhalten Sie eine. SnapStartTimeoutException Wenn die Restore-Phase abgeschlossen ist, ruft Lambda den Funktionshandler (Invoke-Phase) auf.

  • Invoke: In dieser Phase ruft Lambda den Funktionshandler auf. Nachdem die Funktion vollständig ausgeführt wurde, bereitet sich Lambda auf die Verarbeitung eines weiteren Funktionsaufrufs vor.

  • Shutdown: Diese Phase wird ausgelöst, wenn die Lambda-Funktion für einen bestimmten Zeitraum keine Aufrufe empfängt. In dieser Shutdown-Phase fährt Lambda die Laufzeit herunter, warnt die Erweiterungen, damit sie sauber beendet werden können und entfernt dann die Umgebung. Lambda sendet ein Shutdown-Ereignis an jede Erweiterung, das der Erweiterung mitteilt, dass die Umgebung beendet wird.

Während der Init-Phase extrahiert Lambda Ebenen, die Erweiterungen enthalten, in das /opt-Verzeichnis in der Ausführungsumgebung. Lambda sucht im /opt/extensions/-Verzeichnis nach Erweiterungen, interpretiert jede Datei als ausführbaren Bootstrap zum Starten der Erweiterung und startet alle Erweiterungen parallel.

Auswirkungen auf Leistung und Ressourcen

Die Größe der Erweiterungen Ihrer Funktion zählt für die Größenbeschränkung des Bereitstellungspakets. Bei einem ZIP-Dateiarchiv darf die entpackte Gesamtgröße der Funktion und sämtlicher Erweiterungen das Limit des entpackten Bereitstellungspakets von 250 MB nicht überschreiten.

Erweiterungen können sich auf die Leistung Ihrer Funktion auswirken, da sie Funktionsressourcen wie CPU, Arbeitsspeicher und Speicher gemeinsam nutzen. Wenn eine Erweiterung beispielsweise rechenintensive Operationen ausführt, kann die Ausführungsdauer Ihrer Funktion erhöht werden.

Jede Erweiterung muss ihre Initialisierung abschließen, bevor Lambda die Funktion aufruft. Daher kann eine Erweiterung, die erhebliche Initialisierungszeit verbraucht, die Latenz des Funktionsaufrufs erhöhen.

Um die zusätzliche Zeit zu messen, die die Erweiterung nach der Funktionsausführung benötigt, können Sie die Funktionsmetrik PostRuntimeExtensionsDuration verwenden. Um die Zunahme des verwendeten Speichers zu messen, können Sie die MaxMemoryUsed-Metrik verwenden. Um die Auswirkungen einer bestimmten Erweiterung zu verstehen, können Sie verschiedene Versionen Ihrer Funktionen nebeneinander ausführen.

Berechtigungen

Erweiterungen haben Zugriff auf die gleichen Ressourcen wie Funktionen. Da Erweiterungen in derselben Umgebung wie die Funktion ausgeführt werden, werden Berechtigungen von der Funktion und der Erweiterung gemeinsam genutzt.

Für ein ZIP-Dateiarchiv können Sie eine AWS CloudFormation Vorlage erstellen, um das Anhängen derselben Erweiterungskonfiguration — einschließlich AWS Identity and Access Management (IAM-) Berechtigungen — an mehrere Funktionen zu vereinfachen.