View a markdown version of this page

Dauerhafte Lambda-Funktionen erstellen - 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.

Dauerhafte Lambda-Funktionen erstellen

Um mit dauerhaften Lambda-Funktionen zu beginnen, verwenden Sie die Lambda-Konsole, um eine dauerhafte Funktion zu erstellen. In wenigen Minuten können Sie eine dauerhafte Funktion erstellen und bereitstellen, die anhand von Schritten und Wartezeiten die Ausführung anhand von Checkpoints demonstriert.

Sie können auch langlebige Funktionen erstellen, indem Sie die AWS CLI oder Infrastructure as Code (IaC) verwenden.

Während Sie das Tutorial durchführen, lernen Sie grundlegende Konzepte für langlebige Funktionen kennen, z. B. wie Sie das DurableContext Objekt verwenden, Checkpoints mit Schritten erstellen und die Ausführung mit Wartezeiten unterbrechen. Außerdem erfährst du, wie die Wiederholung funktioniert, wenn deine Funktion nach einer Wartezeit wieder aufgenommen wird.

Um die Dinge einfach zu halten, zeigt Ihnen dieses Tutorial, wie Sie Ihre Funktion entweder mit Python oder Node.js Runtime erstellen. Mit diesen interpretierten Sprachen können Sie Funktionscode direkt im integrierten Code-Editor der Konsole bearbeiten.

Anmerkung

Dauerhafte Funktionen unterstützen derzeit Python-, Node.js (JavaScript/TypeScript) - und Java-Laufzeiten sowie Container-Images (OCI). Eine vollständige Liste der unterstützten Laufzeitversionen und Container-Image-Optionen finden Sie unter Unterstützte Laufzeiten für langlebige Funktionen. Weitere Informationen zur Verwendung von Container-Images mit Lambda finden Sie unter Erstellen von Lambda-Container-Images im Lambda Developer Guide.

Tipp

Weitere Informationen zum Erstellen von Serverless-Lösungen finden Sie im Serverless-Benutzerhandbuch.

Erstellen Sie mit der Konsole eine langlebige Lambda-Funktion

In diesem Beispiel verarbeitet Ihre Durable-Funktion eine Bestellung in mehreren Schritten mit automatischem Checkpointing. Die Funktion verwendet ein JSON-Objekt, das eine Bestellnummer enthält, validiert die Bestellung, verarbeitet die Zahlung und bestätigt die Bestellung. Jeder Schritt wird automatisch überprüft. Wenn die Funktion unterbrochen wird, wird sie mit dem letzten abgeschlossenen Schritt fortgesetzt.

Ihre Funktion demonstriert auch einen Wartevorgang, bei dem die Ausführung für einen kurzen Zeitraum unterbrochen wird, um das Warten auf eine externe Bestätigung zu simulieren.

Um eine dauerhafte Funktion mit der Konsole zu erstellen
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie Funktion erstellen.

  3. Wählen Sie Verfassen von Grund auf aus.

  4. Geben Sie im Bereich Grundlegende Informationen als Funktionsname myDurableFunction ein.

  5. Wählen Sie für Runtime entweder Node.js 24 oder Python 3.14.

  6. Wählen Sie Dauerhafte Ausführung aktivieren aus.

Lambda erstellt Ihre dauerhafte Funktion mit einer Ausführungsrolle, die Berechtigungen für Checkpoint-Operationen (lambda:CheckpointDurableExecutionundlambda:GetDurableExecutionState) beinhaltet.

Anmerkung

Lambda-Laufzeiten enthalten das Durable Execution SDK, sodass Sie langlebige Funktionen ohne Paketabhängigkeiten testen können. Wir empfehlen jedoch, das SDK in Ihr Bereitstellungspaket für die Produktion aufzunehmen. Dies gewährleistet die Versionskonsistenz und vermeidet potenzielle Laufzeitaktualisierungen, die sich auf Ihre Funktion auswirken könnten.

Verwenden Sie den in der Konsole integrierten Code-Editor, um Ihren dauerhaften Funktionscode hinzuzufügen.

Node.js
So ändern Sie den Code in der Konsole
  1. Wählen Sie die Registerkarte Code.

    Im integrierten Code-Editor der Konsole sollten Sie den von Lambda erstellten Funktionscode sehen. Wenn die Registerkarte index.mjs im Code-Editor nicht angezeigt wird, wählen Sie index.mjs im Datei-Explorer aus, wie im folgenden Diagramm gezeigt.

    Diagramm, das den Code-Editor der Konsole und die index.mjs-Datei im Datei-Explorer zeigt.
  2. Fügen Sie den folgenden Code in die Registerkarte index.mjs ein und ersetzen Sie den von Lambda erstellten Code.

    import { withDurableExecution, } from "@aws/durable-execution-sdk-js"; export const handler = withDurableExecution( async (event, context) => { const orderId = event.orderId; // Step 1: Validate order const validationResult = await context.step(async (stepContext) => { stepContext.logger.info(`Validating order ${orderId}`); return { orderId, status: "validated" }; }); // Step 2: Process payment const paymentResult = await context.step(async (stepContext) => { stepContext.logger.info(`Processing payment for order ${orderId}`); return { orderId, status: "paid", amount: 99.99 }; }); // Wait for 10 seconds to simulate external confirmation await context.wait({ seconds: 10 }); // Step 3: Confirm order const confirmationResult = await context.step(async (stepContext) => { stepContext.logger.info(`Confirming order ${orderId}`); return { orderId, status: "confirmed" }; }); return { orderId: orderId, status: "completed", steps: [validationResult, paymentResult, confirmationResult] }; } );
  3. Wählen Sie im Abschnitt BEREITSTELLEN die Option Bereitstellen aus, um den Code Ihrer Funktion zu aktualisieren:

    Schaltfläche „Bereitstellen“ im Code-Editor der Lambda-Konsole
Verstehen Sie Ihren dauerhaften Funktionscode

Bevor Sie mit dem nächsten Schritt fortfahren, schauen wir uns den Funktionscode an und verstehen die wichtigsten dauerhaften Funktionskonzepte.

  • Der withDurableExecution Wrapper:

    Ihre dauerhafte Funktion ist verpackt mitwithDurableExecution. Dieser Wrapper ermöglicht eine dauerhafte Ausführung, indem er das DurableContext Objekt bereitstellt und Checkpoint-Operationen verwaltet.

  • Das DurableContext Objekt:

    Anstelle des Standard-Lambda-Kontextes erhält Ihre Funktion eineDurableContext. Dieses Objekt bietet Methoden für dauerhafte Operationen wie step() und wait() die Erstellung von Checkpoints.

  • Schritte und Checkpoints:

    Jeder context.step() Aufruf erstellt vor und nach der Ausführung einen Checkpoint. Wenn Ihre Funktion unterbrochen wird, wird sie ab dem letzten abgeschlossenen Checkpoint wieder aufgenommen. Die Funktion führt abgeschlossene Schritte nicht erneut aus. Sie verwendet stattdessen ihre gespeicherten Ergebnisse.

  • Operationen warten:

    Der context.wait() Aufruf unterbricht die Ausführung, ohne Rechenressourcen zu verbrauchen. Wenn das Warten abgeschlossen ist, ruft Lambda Ihre Funktion erneut auf und spielt das Checkpoint-Log erneut ab, wobei abgeschlossene Schritte durch gespeicherte Werte ersetzt werden.

  • Wiedergabemechanismus:

    Wenn Ihre Funktion nach einer Wartezeit oder Unterbrechung wieder aufgenommen wird, führt Lambda Ihren Code von Anfang an aus. Abgeschlossene Schritte werden jedoch nicht erneut ausgeführt. Lambda spielt ihre Ergebnisse aus dem Checkpoint-Log erneut ab. Aus diesem Grund muss Ihr Code deterministisch sein.

Python
So ändern Sie den Code in der Konsole
  1. Wählen Sie die Registerkarte Code.

    Im integrierten Code-Editor der Konsole sollten Sie den von Lambda erstellten Funktionscode sehen. Wenn die Registerkarte lambda_function.py im Code-Editor nicht angezeigt wird, wählen Sie lambda_function.py im Datei-Explorer aus, wie im folgenden Diagramm dargestellt.

    Diagramm, das den Konsolen-Code-Editor und die Datei lambda_function.py im Datei-Explorer zeigt.
  2. Fügen Sie den folgenden Code in die Registerkarte lambda_function.py ein und ersetzen Sie den von Lambda erstellten Code.

    from aws_durable_execution_sdk_python import ( DurableContext, durable_execution, durable_step, ) from aws_durable_execution_sdk_python.config import Duration @durable_step def validate_order(step_context, order_id): step_context.logger.info(f"Validating order {order_id}") return {"orderId": order_id, "status": "validated"} @durable_step def process_payment(step_context, order_id): step_context.logger.info(f"Processing payment for order {order_id}") return {"orderId": order_id, "status": "paid", "amount": 99.99} @durable_step def confirm_order(step_context, order_id): step_context.logger.info(f"Confirming order {order_id}") return {"orderId": order_id, "status": "confirmed"} @durable_execution def lambda_handler(event, context: DurableContext): order_id = event['orderId'] # Step 1: Validate order validation_result = context.step(validate_order(order_id)) # Step 2: Process payment payment_result = context.step(process_payment(order_id)) # Wait for 10 seconds to simulate external confirmation context.wait(Duration.from_seconds(10)) # Step 3: Confirm order confirmation_result = context.step(confirm_order(order_id)) return { "orderId": order_id, "status": "completed", "steps": [validation_result, payment_result, confirmation_result] }
  3. Wählen Sie im Abschnitt BEREITSTELLEN die Option Bereitstellen aus, um den Code Ihrer Funktion zu aktualisieren:

    Schaltfläche „Bereitstellen“ im Code-Editor der Lambda-Konsole
Verstehen Sie Ihren dauerhaften Funktionscode

Bevor Sie mit dem nächsten Schritt fortfahren, schauen wir uns den Funktionscode an und verstehen die wichtigsten dauerhaften Funktionskonzepte.

  • Der @durable_execution Dekorateur:

    Ihre Handler-Funktion ist dekoriert mit@durable_execution. Dieser Decorator ermöglicht eine dauerhafte Ausführung, indem er das DurableContext Objekt bereitstellt und Checkpoint-Operationen verwaltet.

  • Der @durable_step Dekorateur:

    Jede Schrittfunktion ist dekoriert mit @durable_step Dieser Dekorator kennzeichnet die Funktion als dauerhaften Schritt, der Checkpoints erzeugt.

  • Das DurableContext Objekt:

    Anstelle des Standard-Lambda-Kontextes erhält Ihre Funktion eineDurableContext. Dieses Objekt bietet Methoden für dauerhafte Operationen wie step() und wait() die Erstellung von Checkpoints.

  • Schritte und Checkpoints:

    Jeder context.step() Aufruf erstellt vor und nach der Ausführung einen Checkpoint. Wenn Ihre Funktion unterbrochen wird, wird sie ab dem letzten abgeschlossenen Checkpoint wieder aufgenommen. Die Funktion führt abgeschlossene Schritte nicht erneut aus. Sie verwendet stattdessen ihre gespeicherten Ergebnisse.

  • Operationen warten:

    Der context.wait() Aufruf unterbricht die Ausführung, ohne Rechenressourcen zu verbrauchen. Wenn das Warten abgeschlossen ist, ruft Lambda Ihre Funktion erneut auf und spielt das Checkpoint-Log erneut ab, wobei abgeschlossene Schritte durch gespeicherte Werte ersetzt werden.

  • Das Python SDK ist synchron:

    Beachten Sie, dass das Python-SDK dies nicht verwendetawait. Alle dauerhaften Operationen sind synchrone Methodenaufrufe.

Rufen Sie die Durable-Funktion mit dem Code-Editor der Konsole auf

Wenn keine explizite Version angegeben (oder veröffentlicht) ist, ruft die Konsole die Durable-Funktion mithilfe des $LATEST Versionskennzeichners auf. Für die deterministische Ausführung Ihres Codes müssen Sie jedoch immer einen qualifizierten ARN verwenden, der auf eine stabile Version verweist.

Um eine Version Ihrer Funktion zu veröffentlichen
  1. Wählen Sie den Tab Versionen.

  2. Wählen Sie Publish new version (Neue Version veröffentlichen) aus.

  3. Geben Sie als Versionsbeschreibung Initial version (optional) ein.

  4. Wählen Sie Publish.

  5. Lambda erstellt Version 1 Ihrer Funktion. Beachten Sie, dass die Funktion ARN jetzt :1 am Ende erscheint, was darauf hinweist, dass es sich um Version 1 handelt.

Erstellen Sie nun ein Testereignis, das Sie an Ihre Funktion senden möchten. Das Ereignis ist ein JSON-formatiertes Dokument, das eine Bestellnummer enthält.

So erstellen Sie das Testereignis
  1. Wählen Sie im Abschnitt TESTEREIGNISSE des Konsolen-Code-Editors die Option Testereignis erstellen aus.

    Erstellen einer Test-Event-Schaltfläche im Code-Editor der Lambda-Konsole
  2. Geben Sie als Event name (Ereignisname) die Zeichenfolge myTestEvent ein.

  3. Ersetzen Sie im Abschnitt Event JSON das Standard-JSON durch Folgendes:

    { "orderId": "order-12345" }
  4. Wählen Sie Speichern.

Um Ihre dauerhafte Funktion zu testen und die Ausführung anzusehen

Wählen Sie im Abschnitt TESTEREIGNISSE des Konsolencode-Editors das Ausführungssymbol neben Ihrem Testereignis:

Führen Sie im Code-Editor der Lambda-Konsole die Schaltfläche „Ereignis testen“ aus.

Ihre dauerhafte Funktion beginnt mit der Ausführung. Da sie eine Wartezeit von 10 Sekunden beinhaltet, wird der erste Aufruf schnell abgeschlossen und die Funktion wird nach Ablauf der Wartezeit wieder aufgenommen. Sie können den Ausführungsfortschritt auf der Registerkarte Dauerhafte Ausführungen einsehen.

Um die Ausführung Ihrer dauerhaften Funktion zu sehen
  1. Wählen Sie den Tab Dauerhafte Ausführungen.

  2. Finden Sie Ihre Hinrichtung in der Liste. Die Ausführung zeigt den aktuellen Status an (Wird ausgeführt, Erfolgreich oder Fehlgeschlagen).

  3. Wählen Sie die Ausführungs-ID, um Details anzuzeigen, darunter:

    • Zeitplan für die Ausführung, aus dem hervorgeht, wann jeder Schritt abgeschlossen ist

    • Verlauf des Checkpoints

    • Wartezeiten

    • Ergebnisse der Schritte

Sie können die Protokolle Ihrer Funktion auch in CloudWatch Logs einsehen, um die Konsolenausgabe jedes Schritts zu sehen.

Um die Aufrufaufzeichnungen Ihrer Funktion in CloudWatch Logs einzusehen
  1. Öffnen Sie die Seite „Log-Gruppen“ der CloudWatch Konsole.

  2. Wählen Sie die Protokollgruppe für Ihre Funktion (/aws/lambda/myDurableFunction) aus.

  3. Scrollen Sie nach unten und wählen Sie den Protokollstream für die Funktionsaufrufen aus, die Sie sich ansehen möchten.

    Liste der Protokollstreams für eine Lambda-Funktion.

    Sie sollten Protokolleinträge für jeden Aufruf Ihrer Funktion sehen, einschließlich der ersten Ausführung und der Wiederholung nach der Wartezeit.

Anmerkung

Wenn Sie den Logger von DurableContext (z. B. context.logger oderstepContext.logger) aus verwenden, werden die Protokolle auch in der dauerhaften Ausführungs- und Schrittansicht in der Lambda-Konsole angezeigt. Das Laden dieser Protokolle kann einen Moment dauern.

Bereinigen

Wenn Sie die Arbeit mit der Durable-Beispielfunktion beendet haben, löschen Sie sie. Sie können auch die Protokollgruppe löschen, in der die Protokolle der Funktion gespeichert sind, sowie die von der Konsole erstellte Ausführungsrolle.

So löschen Sie die Lambda-Funktion:
  1. Öffnen Sie die Seite Funktionen der Lambda-Konsole.

  2. Wählen Sie die Funktion aus, die Sie erstellt haben.

  3. Wählen Sie Aktionen, Löschen aus.

  4. Geben Sie confirm in das Texteingabefeld ein und wählen Sie Delete (Löschen) aus.

So löschen Sie die Protokollgruppe
  1. Öffnen Sie die Seite Log Groups (Protokollgruppen) der CloudWatch-Konsole.

  2. Wählen Sie die Protokollgruppe der Funktion (/aws/lambda/myDurableFunction).

  3. Wählen Sie Actions (Aktionen), Delete log group(s) (Protokollgruppe(n) löschen) aus.

  4. Wählen Sie im Dialogfeld Delete log group(s) (Protokollgruppe(n) löschen) die Option Delete (Löschen) aus.

So löschen Sie die Ausführungsrolle
  1. Öffnen Sie die Seite „Rollen“ der AWS Identity and Access Management (IAM-) Konsole.

  2. Wählen Sie die Ausführungsrolle der Funktion aus (zum Beispiel myDurableFunction-role-31exxmpl).

  3. Wählen Sie Löschen aus.

  4. Geben Sie im Dialogfenster Delete role (Rolle löschen) den Namen der Rolle ein und wählen Sie anschließend Delete (Löschen) aus.

Zusätzliche Ressourcen und nächste Schritte

Nachdem Sie nun mithilfe der Konsole eine einfache, langlebige Funktion erstellt und getestet haben, gehen Sie wie folgt vor:

  • Erfahren Sie mehr über häufige Anwendungsfälle für langlebige Funktionen, darunter verteilte Transaktionen, Auftragsabwicklung und Workflows zur menschlichen Überprüfung. Sehen Sie sich Beispiele an.

  • Erfahren Sie, wie Sie dauerhafte Funktionsausführungen anhand von CloudWatch Metriken und dem Ausführungsverlauf überwachen können. Siehe Überwachung und Debugging.

  • Erfahren Sie, wie Sie langlebige Funktionen synchron und asynchron aufrufen und lang andauernde Ausführungen verwalten. Siehe Dauerhafte Funktionen aufrufen.

  • Folgen Sie den bewährten Methoden zum Schreiben von deterministischem Code, zur Verwaltung von Checkpoint-Größen und zur Kostenoptimierung. Siehe Bewährte Methoden.

  • Erfahren Sie, wie Sie langlebige Funktionen lokal und in der Cloud testen können. Siehe Testen langlebiger Funktionen.

  • Vergleichen Sie langlebige Funktionen mit Step Functions, um herauszufinden, wann jeder Ansatz am effektivsten ist. Siehe Dauerhafte Funktionen oder Schrittfunktionen.