Zustandsausgabe mithilfe von Workflows ResultPath in Step Functions angeben - 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.

Zustandsausgabe mithilfe von Workflows ResultPath in Step Functions angeben

Die Ausgabe eines Status kann eine Kopie seiner Eingabe, das entstandene Ergebnis (z. B. Ausgabe der Lambda-Funktion eines Task-Status) oder eine Kombination aus Eingabe und Ergebnis sein. Verwenden Sie ResultPath, um zu steuern, welche Kombination daraus an die Statusausgabe weitergeleitet wird.

Die folgenden Statustypen können ein Ergebnis generieren und ResultPath: einfügen.

Verwenden Sie ResultPath zum Kombinieren eines Aufgabenergebnisses mit der Aufgabeneingabe oder wählen Sie eine der folgenden Optionen aus. Der Pfad, den Sie für ResultPath angeben, steuert, welche Informationen an die Ausgabe weitergeleitet werden.

Anmerkung

ResultPathist auf die Verwendung von Referenzpfaden beschränkt, die den Geltungsbereich einschränken, sodass nur ein einziger Knoten identifiziert werden kannJSON. Weitere Informationen finden Sie unter Referenzpfade unter Amazon States Language.

Diese Beispiele basieren auf der State Machine und der Lambda-Funktion, die im Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet Tutorial beschrieben wurden. Arbeiten Sie die Anleitung durch und testen Sie verschiedene Ergebnisse anhand verschiedener Pfade in einem ResultPath-Feld.

Wird verwendet ResultPath , um die Eingabe durch das Ergebnis zu ersetzen

Wenn Sie keinen ResultPath angeben, ist das Standardverhalten, als hätten Sie "ResultPath": "$" angegeben. Da dies den Status anweist, die gesamte Eingabe durch das Ergebnis zu ersetzen, wird die Statuseingabe vollständig durch das Aufgabenergebnis ersetzt.

Das folgende Diagramm zeigt, wie der ResultPath die Eingabe vollständig durch das Ergebnis der Aufgabe ersetzen kann.

Ersetzt die Eingabe durch ResultPath.

Verwenden Sie die unter beschriebene State Machine- und Lambda-Funktion und ändern Sie den Serviceintegrationstyp in Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet AWS SDKIntegration für die Lambda-Funktion. Geben Sie dazu die Lambda-Funktion Amazon Resource Name (ARN) im Resource Feld des Task Bundesstaates an, wie im folgenden Beispiel gezeigt. Die Verwendung von AWS SDKDie Integration stellt sicher, dass das Task Zustandsergebnis nur die Lambda-Funktionsausgabe ohne Metadaten enthält.

{ "StartAt":"CallFunction", "States":{ "CallFunction": { "Type":"Task", "Resource":"arn:aws:lambda:us-east-2:123456789012:function:HelloFunction", "End": true } } }

Übergeben Sie dann die folgende Eingabe:

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Die Lambda-Funktion liefert das folgende Ergebnis.

"Hello, AWS Step Functions!"
Tipp

Sie können dieses Ergebnis auf der Step Functions Konsole. Wählen Sie dazu auf der Seite mit den Ausführungsdetails der Konsole Lambda Funktion in der Diagrammansicht. Wählen Sie dann im Einzelheiten zu den Schritten Bereich die Registerkarte Ausgabe, um dieses Ergebnis zu sehen.

Wenn im Status ResultPath nicht angegeben oder gesetzt "ResultPath": "$" ist, wird die Eingabe des Status durch das Ergebnis der Lambda-Funktion ersetzt, und die Ausgabe des Status lautet wie folgt.

"Hello, AWS Step Functions!"
Anmerkung

ResultPath wird verwendet, um Inhalte aus dem Ergebnis in die Eingabe einzufügen, bevor sie an die Ausgabe weitergeleitet wird. Wenn ResultPath allerdings nicht angegeben ist, wird standardmäßig die gesamte Eingabe ersetzt.

Verwerfen des Ergebnisses und Beibehalten der urspünglichen Eingabe

Wenn Sie ResultPath auf null einstellen, wird die ursprüngliche Eingabe an die Ausgabe übergeben. Mit "ResultPath": null wird die Eingabenutzlast des Zustands direkt in die Ausgabe kopiert, ohne Rücksicht auf das Ergebnis.

Das folgende Diagramm zeigt, wie ein ResultPath gleich Null die Eingabe direkt in die Ausgabe kopiert.

Kopieren Sie die Eingabe in die Ausgabe mit ResultPath.

Wird verwendet ResultPath , um das Ergebnis in die Eingabe einzubeziehen

Das folgende Diagramm zeigt, wie ResultPath das Ergebnis in die Eingabe einfügen kann.

Eingaben einschließen mit ResultPath

Mit der im Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet Tutorial beschriebenen State Machine und der Lambda-Funktion könnten wir die folgende Eingabe übergeben.

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Das Ergebnis der Lambda-Funktion ist das Folgende.

"Hello, AWS Step Functions!"

Um die Eingabe beizubehalten, fügen Sie das Ergebnis der Lambda-Funktion ein und übergeben Sie dann die Kombination JSON an den nächsten Zustand. Wir könnten ResultPath auf Folgendes setzen.

"ResultPath": "$.taskresult"

Dies beinhaltet das Ergebnis der Lambda-Funktion mit der ursprünglichen Eingabe.

{ "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" }

Die Ausgabe der Lambda-Funktion wird als Wert für an die ursprüngliche Eingabe angehängt. taskresult Die Eingabe, einschließlich des neu eingefügten Werts, wird an den nächsten Status weitergeleitet.

Sie können das Ergebnis auch in einen untergeordneten Knoten der Eingabe einfügen. Legen Sie für ResultPath Folgendes fest.

"ResultPath": "$.strings.lambdaresult"

Starten einer Ausführung mit der folgenden Eingabe.

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }

Das Ergebnis der Lambda-Funktion wird als untergeordnetes Element des strings Knotens in die Eingabe eingefügt.

{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions" }

Die Statusausgabe enthält jetzt die ursprüngliche Eingabe JSON mit dem Ergebnis als untergeordneten Knoten.

Wird verwendet ResultPath , um einen Knoten in der Eingabe mit dem Ergebnis zu aktualisieren

Das folgende Diagramm zeigt, wie der Wert vorhandener JSON Knoten in der Eingabe mit Werten aus dem Aufgabenergebnis aktualisiert werden ResultPath kann.

Ersetzen Sie die Eingabe durch ResultPath

Am Beispiel der im Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet Tutorial beschriebenen State Machine- und Lambda-Funktion könnten wir die folgende Eingabe übergeben.

{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }

Das Ergebnis der Lambda-Funktion ist das Folgende.

Hello, AWS Step Functions!

Anstatt die Eingabe beizubehalten und das Ergebnis als neuen Knoten in den einzufügenJSON, können wir einen vorhandenen Knoten überschreiben.

Beispiel: Wie beim Auslassen oder Festlegen von "ResultPath": "$" wird der gesamte Knoten überschrieben. Sie können einen einzelnen Knoten festlegen, der mit dem Ergebnis überschrieben wird.

"ResultPath": "$.comment"

Da der comment Knoten bereits in der Statuseingabe vorhanden ist, "$.comment" ersetzt die Einstellung ResultPath auf diesen Knoten in der Eingabe durch das Ergebnis der Lambda-Funktion. Ohne weiteres Filtern nach OutputPath wird Folgendes an die Ausgabe weitergeleitet.

{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", }

Der Wert für den comment Knoten,"This is a test of the input and output of a Task state.", wird durch das Ergebnis der Lambda-Funktion ersetzt: "Hello, AWS Step Functions!" in der Statusausgabe.

Wird verwendet ResultPath , um sowohl Fehler als auch Eingaben in eine Catch

In der Behandlung von Fehlerbedingungen mithilfe einer Step Functions Functions-Zustandsmaschine-Anleitung erfahren Sie, wie Sie einen Zustandsautomaten verwenden, um einen Fehler abzufangen. In einigen Fällen können Sie die ursprüngliche Eingabe mit dem Fehler beibehalten. Verwenden Sie ResultPath in einem Catch, um den Fehler in die ursprüngliche Eingabe aufzunehmen, anstatt ihn zu ersetzen.

"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]

Wenn die vorherige Catch-Anweisung einen Fehler abfängt, wird das Ergebnis in einem error-Knoten innerhalb der Statuseingabe eingefügt. Nutzen Sie dazu beispielsweise folgende Eingabe:

{"foo": "bar"}

Die Statusausgabe beim Abfangen eines Fehlers lautet wie folgt:

{ "foo": "bar", "error": { "Error": "Error here" } }

Weitere Informationen zur Fehlerbehandlung finden Sie im Folgenden: