Behandlung von Fehlerbedingungen in einer Step Functions Functions-Zustandsmaschine - AWS Step Functions

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.

Behandlung von Fehlerbedingungen in einer Step Functions Functions-Zustandsmaschine

In diesem Tutorial erstellen Sie eine AWS Step Functions Zustandsmaschine mit einem Task-Status, der eine Lambda-Beispielfunktion aufruft, die erstellt wurde, um einen benutzerdefinierten Fehler auszulösen.

Aufgaben gehören zu den AufgabenFallback-Staaten, für die Sie ein Catch Feld konfigurieren können. Wenn bei der Integration Fehler eingehen, werden die nächsten Schritte anhand des Fehlernamens vom Catch-Feld ausgewählt.

Schritt 1: Erstellen Sie eine Lambda-Funktion, die einen Fehler auslöst

Verwenden Sie eine Lambda-Funktion, um eine Fehlerbedingung zu simulieren.

  1. Öffnen Sie die AWS Lambda Konsole unter. https://console.aws.amazon.com/lambda/

  2. Wählen Sie Funktion erstellen.

  3. Wählen Sie „Blueprint verwenden“, suchen Step Functions Sie nach einem benutzerdefinierten Fehler und wählen Sie „Einen benutzerdefinierten Fehler auslösen“ aus.

  4. Geben Sie für Function name (Funktionsname) ThrowErrorFunction ein.

  5. Wählen Sie unter Role (Rolle) die Option Create a new role with basic Lambda permissions (Eine neue Rolle mit den grundlegenden Lambda-Berechtigungen erstellen) aus.

  6. Wählen Sie Funktion erstellen.

    Der folgende Code sollte im Codebereich angezeigt werden.

    export const handler = async () => { function CustomError(message) { this.name = 'CustomError'; this.message = message; } CustomError.prototype = new Error(); throw new CustomError('This is a custom error!'); };

Schritt 2: Testen Sie Ihre Lambda-Funktion

Bevor Sie eine Zustandsmaschine erstellen, stellen Sie sicher, dass Ihre Lambda-Funktion CustomError beim Aufruf Ihre auslöst.

  1. Wählen Sie die Registerkarte Test.

  2. Wählen Sie Neues Ereignis erstellen und behalten Sie die Standard-Event-JSON bei

  3. Wählen Sie Test, um Ihre Funktion mit Ihrem Testereignis aufzurufen.

  4. Erweitern Sie Funktion ausführen, um die Details des ausgelösten Fehlers zu überprüfen.

Sie haben jetzt eine Lambda-Funktion, die bereit ist, einen benutzerdefinierten Fehler auszulösen.

Im nächsten Schritt richten Sie eine Zustandsmaschine ein, um diesen Fehler abzufangen und erneut zu versuchen.

Schritt 3: Erstellen Sie Ihre Zustandsmaschine

Verwenden Sie die Step Functions Functions-Konsole, um eine Zustandsmaschine zu erstellen, die eine Workflow-Status der Aufgabe mit einer Catch Konfiguration verwendet. Die Zustandsmaschine ruft die Lambda-Funktion auf, die Sie erstellt haben, um zu simulieren, dass beim Aufrufen der Funktion ein Fehler ausgelöst wird. Step Functions versucht die Funktion erneut, wobei ein exponentieller Backoff zwischen den Wiederholungen verwendet wird.

  1. Öffnen Sie die Step Functions Functions-Konsole, wählen Sie im Menü State Machines und dann Create State Machine aus.

  2. Wählen Sie Create from blank aus und geben Sie als State Machine Name den Text einCatchErrorStateMachine.

  3. Akzeptieren Sie den Standardtyp (Standard) und wählen Sie dann Weiter, um Ihren Zustandsmaschine in Workflow Studio zu bearbeiten.

  4. Wählen Sie Code, um zum ASL-Editor zu wechseln, und ersetzen Sie dann den Code durch die folgende State-Machine-Definition:

    { "Comment": "Example state machine that can catch a custom error thrown by a function integration.", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Output": "{% $states.result.Payload %}", "Arguments": { "FunctionName": "arn:aws:lambda:region:account-id:function:ThrowErrorFunction:$LATEST", "Payload": "{% $states.input %}" }, "Catch": [ { "ErrorEquals": [ "CustomError" ], "Next": "CustomErrorFallback" }, { "ErrorEquals": [ "States.ALL" ], "Next": "CatchAllFallback" } ], "End": true, "Retry": [ { "ErrorEquals": [ "CustomError", "Lambda.ServiceException", "Lambda.AWSLambdaException", "Lambda.SdkClientException", "Lambda.TooManyRequestsException" ], "IntervalSeconds": 1, "MaxAttempts": 3, "BackoffRate": 2, "JitterStrategy": "FULL" } ] }, "CustomErrorFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from a custom error function." } }, "CatchAllFallback": { "Type": "Pass", "End": true, "Output": { "Result": "Fallback from all other error codes." } } }, "QueryLanguage": "JSONata" }

Schritt 4: Konfigurieren Sie Ihre Zustandsmaschine

Bevor Sie Ihre Zustandsmaschine ausführen, müssen Sie zunächst eine Verbindung zu der Lambda-Funktion herstellen, die Sie zuvor erstellt haben.

  1. Wechseln Sie zurück in den Entwurfsmodus und wählen Sie den genannten Aufgabenstatus Lambda: Invoke aus. CreateAccount

  2. Suchen Sie auf der Registerkarte Konfiguration nach API-Argumenten. Wählen Sie als Funktionsname die Lambda-Funktion aus, die Sie zuvor erstellt haben.

  3. Wählen Sie „Erstellen“, überprüfen Sie die Rollen und wählen Sie dann „Bestätigen“, um Ihre Zustandsmaschine zu erstellen.

Schritt 5: Führen Sie die Zustandsmaschine aus

Nachdem Sie Ihren Zustandsmaschine erstellt und konfiguriert haben, können Sie ihn ausführen und den Flow untersuchen.

  1. Wählen Sie im Editor Execute aus.

    Wählen Sie alternativ in der Liste State Machines die Option Ausführung starten aus.

  2. Akzeptieren Sie im Dialogfeld „Ausführung starten“ die generierte ID und geben Sie als Eingabe den folgenden JSON-Code ein:

    { "Cause" : "Custom Function Error" }
  3. Wählen Sie Start execution (Ausführung starten) aus.

Die Step Functions Functions-Konsole leitet Sie zu einer Seite weiter, die mit Ihrer Ausführungs-ID betitelt ist, die als Seite mit den Ausführungsdetails bezeichnet wird. Sie können die Ausführungsergebnisse im Verlauf und nach Abschluss des Workflows überprüfen.

Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der Diagrammansicht einzelne Status und anschließend die einzelnen Registerkarten im Einzelheiten zu den Schritten Bereich aus, um die Details der einzelnen Status, einschließlich Eingabe, Ausgabe und Definition, anzuzeigen. Einzelheiten zu den Ausführungsinformationen, die Sie auf der Seite mit den Ausführungsdetails einsehen können, finden Sie unterÜberblick über die Ausführungsdetails.

Ihre Zustandsmaschine ruft die Lambda-Funktion auf, die eine auslöst. CustomError Wählen Sie den CreateAccountSchritt in der Diagrammansicht aus, um die Statusausgabe zu sehen. Ihre State-Machine-Ausgabe sollte der folgenden Abbildung ähneln:

Illustrativer Screenshot des Workflows, bei dem der benutzerdefinierte Fehler erkannt wurde.

Herzlichen Glückwunsch!

Sie haben jetzt eine Zustandsmaschine, die Fehlerbedingungen, die von einer Lambda-Funktion ausgelöst werden, abfangen und behandeln kann. Sie können dieses Muster verwenden, um eine robuste Fehlerbehandlung in Ihren Workflows zu implementieren.

Anmerkung

Sie können auch Zustandsmaschinen erstellen, die es bei Timeouts erneut versuchen, oder solche, die bei Catch Auftreten eines Fehlers oder einer Zeitüberschreitung in einen bestimmten Zustand übergehen. Beispiele für diese Fehlerbehandlungstechniken finden Sie unter Beispiele für die Verwendung von Retry und von Catch.