Bearbeiten von Fehlerbedingungen mithilfe eines Step Functions Functions-Zustandsautomaten - 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.

Bearbeiten von Fehlerbedingungen mithilfe eines Step Functions Functions-Zustandsautomaten

In diesem Tutorial erstellen Sie einen AWS Step Functions-Zustandsautomaten mit einem Catch-Feld. DieCatchFeld verwendet einAWS Lambda-Funktion, um mit bedingter Logik basierend auf dem Fehlermeldungstyp zu reagieren. Diese Technik wird als Funktionsfehlerbehandlung bezeichnet.

Weitere Informationen finden Sie unterVerarbeiten von FunktionsfehlernimAWS LambdaEntwicklerhandbuchaus.

Anmerkung

Sie können auch Zustandsautomaten erstellen, die Retry im Falle von Timeouts verwenden, oder solche, die Catch verwenden, um in einen bestimmten Zustand zu wechseln, wenn ein Fehler oder ein Timeout auftritt. Beispiele für diese Fehlerbehandlungstechniken finden Sie unter Beispiele für die Verwendung von Retry und von Catch.

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

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

Wichtig

Stellen Sie sicher, dass Ihre Lambda-Funktion unter der gleichen istAWS-Konto undAWSRegion als Zustandsautomat.

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

    Wählen Sie Create function (Funktion erstellen).

  2. Klicken Sie aufVerwenden Sie einen Plan, den Wert einstep-functionsin den Filter und wählen Sie dann dieStep Functions-FehlerPlan.

  3. Wählen Sie Konfigurieren aus.

  4. In derGrundlegende Informationen-Abschnitt konfigurieren Sie Ihre Lambda-Funktion:

    1. Geben Sie unter Name FailFunction ein.

    2. 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.

  5. Der folgende Code wird imLambda-Funktionscode-Bereich.

    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.

  6. Wählen Sie Create function (Funktion erstellen).

    Kopieren Sie nach dem Erstellen Ihrer Lambda-Funktion den Amazon Resource Name (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
                            aus. Es folgt ein Beispiel für einen ARN:

    arn:aws:lambda:us-east-1:123456789012:function:FailFunction
  7. Wählen Sie Deploy (Bereitstellen) aus.

Schritt 2: Lambda-Funktion testen

Testen Sie Ihre Lambda-Funktion, um sie in Aktion zu sehen.

  1. Wählen Sie auf der Seite FailFunction die Option Test.

  2. Geben Sie im Dialogfeld Configure test event (Testereignis konfigurieren) FailFunction für Event name (Ereignisname) ein und wählen Sie dann Create (Erstellen).

  3. Auf derFailFunction-Seite wählenTestum Ihre Lambda-Funktion zu testen.

    Die Ergebnisse des Tests (der simulierte Fehler) werden auf einer neuen Registerkarte angezeigtErgebnisse der Ausführungaus.

Schritt 3: Erstellen eines Zustandsautomaten mit einem Catch-Feld

Verwenden derStep Functions -Konsoleum einen Zustandsautomaten zu erstellen, der einenTask-Zustand mit einemCatchfield. Fügen Sie einen Verweis zu Ihrer Lambda-Funktion in derTaskZustand. Die Lambda-Funktion wird aufgerufen und schlägt während der Ausführung fehl. Step Functions wiederholt die Funktion zweimal mit exponentiellem Backoff zwischen den Wiederholungsversuchen.

  1. Öffnen SieStep Functions -Konsoleund wähleErstellen eines Zustandsautomatenaus.

  2. Auf derWählen Sie Authoring-Methode-Seite wählenSchreiben Sie Ihren Workflow in Codeaus.

  3. FürTyp, behalten Sie die Standardauswahl bei, dhStandard-aus.

  4. In derDefinitionden folgenden Code ein, ersetzen Sie jedoch den ARN vonDie Lambda-Funktion, die Sie zuvor erstellt habenimResourcefield.

    { "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 Ihres Zustandsautomaten mithilfe der Amazon-Zustandssprache. 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 die Verwendung von Retry und Catch.

    Anmerkung

    Unbehandelte Fehler in Lambda werden gemeldet alsLambda.Unknownin der Fehlerausgabe. Dazu zählen out-of-memory Fehler und Funktionstimeouts. Du kannst aufLambda.Unknown,States.ALL, oderStates.TaskFailedum diese Fehler zu behandeln. Wenn Lambda die maximale Anzahl von Aufrufen erreicht, ist der FehlerLambda.TooManyRequestsExceptionaus. Weitere Informationen zu Lambda-Funktionsfehlern finden Sie unterFehlerbehandlung und automatische WiederholungenimAWS LambdaEntwicklerhandbuchaus.

  5. Verwenden Sie das Diagramm imVisueller Workflow-Bereich, um zu überprüfen, ob Ihr Amazon States Language code Ihren Zustandsautomaten korrekt beschreibt.

    Wenn Sie das Diagramm nicht sehen, wählen Sie 
       refresh
    im Bereich Visual Workflow aus.

  6. Wählen Sie Next (Weiter).

  7. Geben Sie einNamefür Ihren Zustandsautomaten, z. B.Catchfailureaus.

  8. In :Berechtigungen, wählenNeue Rolle erstellenaus.

  9. Wählen Sie Create State Machine (Zustandsautomaten erstellen).

Schritt 4: Starten einer neuen Ausführung

Nach dem Erstellen des Zustandsautomaten können Sie eine Ausführung starten.

  1. Auf derFangversagen-Seite wählenStarten der Ausführungaus.

    DieStarten der Ausführung-Dialogfeld wird angezeigt.

  2. (Optional) Um Ihre Ausführung zu identifizieren, können Sie einen Namen dafür in derNameaus. Standardmäßig generiert Step Functions automatisch einen eindeutigen Ausführungsnamen.

    Anmerkung

    Mit Step Functions können Sie Statuscomputer-, Ausführungs- und Aktivitätsnamen erstellen, die Nicht-ASCII-Zeichen enthalten. Diese Nicht-ASCII-Namen funktionieren nicht mit Amazon CloudWatch. Um sicherzustellen, dass Sie verfolgen können CloudWatch Metriken, wählen Sie einen Namen, der nur ASCII-Zeichen verwendet.

  3. Wählen Sie Start Execution aus.

    Eine neue Ausführung Ihres Zustandsautomaten startet und eine neue Seite mit Ihrer laufenden Ausführung wird angezeigt.

  4. Rufen Sie aufAusführungsausgabe-Registerkarte, um die Ausgabe Ihres Workflows anzuzeigen.

    
                            Ausführungsausgabe
  5. Zum Anzeigen Ihrer benutzerdefinierten Fehlermeldung wählen SieCreateAccountimGraph Inspectorund wählen Sie dasSchritt-Ausgabe-Registerkarte.

    
                            Fehlerausgabe
    Anmerkung

    Sie können die Statuseingabe mit dem Fehler beibehalten, indem Sie ResultPath verwenden. Siehe Verwenden von ResultPath, um Fehler und Eingabe in einem Catch einzufügen.