Tutorial 8: Fehler in der Konsole debuggen - 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.

Tutorial 8: Fehler in der Konsole debuggen

Bei der Arbeit mit Step Functions können Laufzeitfehler auftreten, die aus folgenden Gründen auftreten:

  • Ein ungültiger JSON-Pfad für das Variablenfeld im Choice Bundesstaat.

  • Problem mit der Definition von Zustandsmaschinen, z. B. keine passende Regel, die für einen Choice Status definiert wurde.

  • Ungültige JSON-Pfadausdrücke beim Anwenden von Filtern zur Manipulation von Eingabe und Ausgabe.

  • Die Aufgabe schlägt aufgrund einer Lambda-Funktionsausnahme fehl.

  • IAM-Berechtigungsfehler.

In diesem Tutorial erfahren Sie, wie Sie einige dieser Fehler mithilfe der Step Functions-Konsole debuggen. Weitere Informationen finden Sie unter Fehlerbehandlung in Step Functions.

Fehler beim Debuggen des ungültigen Pfades; Auswahlstatusfehler

Wenn Sie im Variablenfeld des Choice Bundesstaates einen falschen oder nicht auflösbaren JSON-Pfad angeben oder keine passende Regel für den Choice Status definieren, erhalten Sie beim Ausführen Ihres Workflows eine Fehlermeldung.

Um den Fehler „Ungültiger Pfad“ zu veranschaulichen, führt dieses Tutorial einen Choice Statusfehler in Ihrem Workflow ein. Sie verwenden die CreditCardWorkflowState Machine und bearbeiten ihre Definition, um den Fehler einzufügen.

  1. Öffnen Sie die Step Functions-Konsole und wählen Sie dann die CreditCardWorkflowState-Maschine aus.

  2. Wählen Sie Bearbeiten, um die State-Machine-Definition zu bearbeiten. Nehmen Sie die im folgenden Code hervorgehobene Änderung an Ihrer State-Machine-Definition vor.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$.Payload", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$.Payload", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }
  3. Wählen Sie Speichern und dann trotzdem speichern.

  4. Starte die State Machine.

  5. Führen Sie auf der Seite „Ausführungsdetails“ Ihrer State-Machine-Ausführung einen der folgenden Schritte aus:

    1. Wählen Sie in der Fehlermeldung Ursache aus, um den Grund für den Fehler bei der Ausführung einzusehen.

    2. Wählen Sie in der Fehlermeldung Schrittdetails anzeigen, um den Schritt anzuzeigen, der den Fehler verursacht hat.

  6. Wählen Sie im Abschnitt Schrittdetails auf der Registerkarte Eingabe und Ausgabe die Umschalttaste Erweiterte Ansicht, um den Pfad zur Eingabe- und Ausgabedatenübertragung für einen ausgewählten Status anzuzeigen.

  7. Stellen Sie in der Diagrammansicht sicher, dass der zugewiesene Kredit >= 5000? ist ausgewählt und gehen Sie wie folgt vor:

    1. Sehen Sie sich den Eingabewert des Bundesstaates im Eingabefeld an.

    2. Wählen Sie die Registerkarte Definition und beachten Sie den JSON-Pfad, der für das Variablenfeld angegeben ist.

      Der Eingabewert für den angewandten Kredit >= 5000? state ist ein numerischer Wert, während Sie den JSON-Pfad für den Eingabewert als $.Payload angegeben haben. Während der Ausführung der State-Maschine kann der Choice Staat diesen JSON-Pfad nicht auflösen, da er nicht existiert.

  8. Bearbeiten Sie die State Machine, um den Variablenfeldwert als anzugeben$.

    { "Comment": "A description of my state machine", "StartAt": "Get credit limit", "States": { "Get credit limit": { ... ... }, "Credit applied >= 5000?": { "Type": "Choice", "Choices": [ { "Variable": "$", "NumericLessThan": 5000, "Next": "Auto-approve limit" }, { "Variable": "$", "NumericGreaterThanEquals": 5000, "Next": "Wait for human approval" } ], "Default": "Wait for human approval" }, ... ... } }

Debuggen von JSON-Pfadausdrucksfehlern beim Anwenden von Eingabe- und Ausgabefiltern

Bei der Arbeit mit den Eingabe- und Ausgabefiltern können Laufzeitfehler auftreten, die durch die Angabe ungültiger JSON-Pfadausdrücke entstehen.

Das folgende Beispiel verwendet die WorkflowInputOutputin Tutorial 5 erstellte State-Maschine und zeigt ein Szenario, in dem Sie den ResultSelector Filter verwenden, um Teile der Aufgabenausgabe auszuwählen.

  1. Wenden Sie den ResultSelector Filter an, um einen Teil der Aufgabenausgabe für den Schritt Identität überprüfen auszuwählen. Bearbeiten Sie dazu Ihre State Machine-Definition wie folgt:

    { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "FunctionName": "arn:aws:lambda:us-east-2:123456789012:function:check-identity", "Payload": { "email": "jdoe@example.com", "ssn": "123-45-6789" } }, ... ... "ResultSelector": { "identity.$": "$.Payload.body.message" }", "End": true } } }
  2. Starte die State Machine.

  3. Gehen Sie auf der Seite mit den Ausführungsdetails Ihrer State-Machine-Ausführung wie folgt vor:

    1. Wählen Sie in der Fehlermeldung Ursache aus, um den Grund für den Fehler bei der Ausführung einzusehen.

    2. Wählen Sie in der Fehlermeldung Schrittdetails anzeigen, um den Schritt anzuzeigen, der den Fehler verursacht hat.

  4. Beachten Sie in der Fehlermeldung, dass der Inhalt des $.payload.Body-Knotens eine maskierte JSON-Zeichenfolge ist. Der Fehler ist aufgetreten, weil Sie mit der JSON-Pfadnotation nicht auf eine Zeichenfolge verweisen können.

  5. Gehen Sie wie folgt vor, um auf den Knoten $.payload.body.Message zu verweisen:

    1. Verwenden Sie die States.StringToJSON intrinsische Funktion, um die Zeichenfolge zuerst in ein JSON-Format zu konvertieren.

    2. Geben Sie den JSON-Pfad für den Knoten $.payload.body.Message innerhalb der intrinsischen Funktion an.

      "ResultSelector": { "identity.$":"States.StringToJson($.Payload.body.message)" }
  6. Führen Sie die State Machine erneut aus.