Behandlung von Fehlerbedingungen mithilfe 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 mithilfe einer Step Functions Functions-Zustandsmaschine

In diesem Tutorial erstellen Sie eine AWS Step Functions Zustandsmaschine mit einem Fallback-Staaten Feld. Das Catch Feld verwendet eine AWS Lambda Funktion, um mit bedingter Logik zu antworten, die auf dem Typ der Fehlermeldung basiert. Diese Technik wird als Funktionsfehlerbehandlung bezeichnet.

Weitere Informationen finden Sie unter AWS Lambda Funktionsfehler in Node.js im AWS Lambda Entwicklerhandbuch.

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.

Schritt 1: Erstellen Sie eine Lambda-Funktion, die fehlschlägt

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

Wichtig

Stellen Sie sicher, dass sich Ihre Lambda-Funktion unter demselben AWS Konto und derselben AWS Region wie Ihr State Machine befindet.

  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 aus, geben Sie den step-functions Text in das Suchfeld ein und wählen Sie dann den Blueprint Einen benutzerdefinierten Fehler auslösen aus.

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

  5. Behalten Sie für Rolle die Standardauswahl bei (Neue Rolle mit grundlegenden Lambda-Berechtigungen erstellen).

  6. Der folgende Code wird im Codebereich der Lambda-Funktion angezeigt.

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

    Das context-Objekt gibt die Fehlermeldung This is a custom error! zurück.

  7. Wählen Sie Funktion erstellen.

  8. Nachdem Ihre Lambda-Funktion erstellt wurde, kopieren Sie den Amazon-Ressourcennamen (ARN) der Funktion, der in der oberen rechten Ecke der Seite angezeigt wird. Um den ARN zu kopieren, klicken Sie auf 
                                copy Amazon Resource Name
                            . Im Folgenden finden Sie ein Beispiel für einen ARN:

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  9. Wählen Sie Bereitstellen.

Schritt 2: Testen Sie die Lambda-Funktion

Testen Sie Ihre Lambda-Funktion, um zu sehen, wie sie in Betrieb ist.

  1. Wählen Sie auf der FailFunctionSeite die Registerkarte Test und dann Test aus. Sie müssen kein Testereignis erstellen.

  2. Um die Testergebnisse (den simulierten Fehler) zu überprüfen, erweitern Sie unter Ausführungsergebnis die Option Details.

Schritt 3: Erstellen Sie eine Zustandsmaschine mit einem Catch-Feld

Verwenden Sie die Step Functions Functions-Konsole, um eine Zustandsmaschine zu erstellen, die einen Aufgabe Status mit einem Catch Feld verwendet. Fügen Sie im Task-Status einen Verweis auf Ihre Lambda-Funktion hinzu. Die Zustandsmaschine ruft die Lambda-Funktion auf, die während der Ausführung fehlschlägt. Step Functions wiederholt die Funktion zweimal, wobei ein exponentieller Backoff zwischen den Wiederholungen verwendet wird.

  1. Öffnen Sie die Step Functions Functions-Konsole und wählen Sie Create State Machine.

  2. Wählen Sie im Dialogfeld Vorlage auswählen die Option Leer aus.

  3. Wählen Sie Select (Auswählen). Dadurch wird Workflow Studio in geöffnetEntwurfsmodus.

  4. Wählen Sie Code, um den Code-Editor zu öffnen. Im Code-Editor schreiben und bearbeiten Sie die Amazon States Language (ASL-) Definition Ihrer Workflows.

  5. Fügen Sie den folgenden Code ein, ersetzen Sie jedoch den ARN der Lambda-Funktion, die Sie zuvor in dem Resource Feld erstellt haben.

    { "Comment": "A Catch example of the Amazon States Language using an AWS Lambda function", "StartAt": "CreateAccount", "States": { "CreateAccount": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:FailFunction", "Catch": [ { "ErrorEquals": ["CustomError"], "Next": "CustomErrorFallback" }, { "ErrorEquals": ["States.TaskFailed"], "Next": "ReservedTypeFallback" }, { "ErrorEquals": ["States.ALL"], "Next": "CatchAllFallback" } ], "End": true }, "CustomErrorFallback": { "Type": "Pass", "Result": "This is a fallback from a custom Lambda function exception", "End": true }, "ReservedTypeFallback": { "Type": "Pass", "Result": "This is a fallback from a reserved error code", "End": true }, "CatchAllFallback": { "Type": "Pass", "Result": "This is a fallback from any error code", "End": true } } }

    Dies ist eine Beschreibung Ihrer Zustandsmaschine in der Sprache Amazon States. Sie definiert einen einzelnen Task-Zustand namens CreateAccount. Weitere Informationen finden Sie unter State Machine Structure.

    Weitere Informationen zur Syntax des Retry-Feldes finden Sie unter Beispiele für Zustandsmaschinen mit Retry und Catch.

    Anmerkung

    Unbehandelte Fehler in Lambda werden wie Lambda.Unknown in der Fehlerausgabe gemeldet. Dazu gehören out-of-memory Fehler und Funktions-Timeouts. Sie können nach, oder abgleichen Lambda.UnknownStates.ALL, States.TaskFailed um diese Fehler zu behandeln. Wenn Lambda die maximale Anzahl von Aufrufen erreicht, lautet der Fehler. Lambda.TooManyRequestsException Weitere Informationen zu Lambda-Funktionsfehlern finden Sie unter Fehlerbehandlung und automatische Wiederholungen im AWS Lambda Entwicklerhandbuch.

  6. (Optional) Sehen Sie sich im die Bereich zur Grafikvisualisierung grafische Echtzeitvisualisierung Ihres Workflows an.

  7. Geben Sie einen Namen für Ihre Zustandsmaschine an. Wählen Sie dazu das Bearbeitungssymbol neben dem Standardnamen der Zustandsmaschine von MyStateMachine. Geben Sie dann unter State-Machine-Konfiguration einen Namen in das Feld State-Machine-Name ein.

    Geben Sie für dieses Tutorial Catchfailure ein.

  8. (Optional) Geben Sie unter Zustandsmaschinen-Konfiguration weitere Workflow-Einstellungen an, z. B. den Zustandsmaschinentyp und seine Ausführungsrolle.

    Behalten Sie für dieses Tutorial alle Standardauswahlen in den State-Machine-Einstellungen bei.

  9. Wählen Sie im Dialogfeld „Rollenerstellung bestätigen“ die Option „Bestätigen“, um fortzufahren.

    Sie können auch Rolleneinstellungen anzeigen wählen, um zur State-Machine-Konfiguration zurückzukehren.

    Anmerkung

    Wenn Sie die von Step Functions erstellte IAM-Rolle löschen, kann Step Functions sie später nicht mehr neu erstellen. Ebenso kann Step Functions ihre ursprünglichen Einstellungen später nicht wiederherstellen, wenn Sie die Rolle ändern (z. B. indem Sie Step Functions aus den Principals in der IAM-Richtlinie entfernen).

Schritt 4: Führen Sie die Zustandsmaschine aus

Nachdem Sie Ihren Zustandsmaschine erstellt haben, können Sie ihn ausführen.

  1. Wählen Sie auf der Seite State Machines die Option Catchfailure aus.

  2. Wählen Sie auf der Seite Catchfailure die Option Ausführung starten aus. Das Dialogfeld „Ausführung starten“ wird angezeigt.

  3. Gehen Sie im Dialogfeld Ausführung starten wie folgt vor:

    1. (Optional) Um Ihre Ausführung zu identifizieren, können Sie im Feld Name einen Namen dafür angeben. Standardmäßig generiert Step Functions automatisch einen eindeutigen Ausführungsnamen.

      Anmerkung

      Mit Step Functions können Sie Namen für Zustandsmaschinen, Ausführungen und Aktivitäten sowie Beschriftungen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit Amazon. CloudWatch Um sicherzustellen, dass Sie CloudWatch Messwerte verfolgen können, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

    2. (Optional) Geben Sie in das Eingabefeld Eingabewerte im JSON-Format ein, um Ihren Workflow auszuführen.

    3. Wählen Sie Start execution (Ausführung starten) aus.

    4. Die Step Functions Functions-Konsole leitet Sie zu einer Seite weiter, die mit Ihrer Ausführungs-ID betitelt ist. Diese Seite wird als Seite mit den Ausführungsdetails bezeichnet. Auf dieser Seite können Sie die Ausführungsergebnisse im Verlauf der Ausführung oder nach deren Abschluss überprüfen.

      Um die Ausführungsergebnisse zu überprüfen, wählen Sie in der Diagrammansicht einzelne Status aus und wählen Sie dann die einzelnen Registerkarten im Schrittdetails Bereich, 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 unterSeite mit Ausführungsdetails – Schnittstellenübersicht.

    Um beispielsweise Ihre benutzerdefinierte Fehlermeldung anzuzeigen, wählen Sie den CreateAccountSchritt in der Diagrammansicht und dann die Registerkarte Ausgabe aus.

    
                            Fehlerausgabe
    Anmerkung

    Sie können die Statuseingabe mit dem Fehler beibehalten, indem Sie ResultPath verwenden. Siehe Verwenden Sie ResultPath , um sowohl Fehler als auch Eingabe in einen einzuschließen Catch.