InputPath, ResultPath und OutputPath Beispiele - 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.

InputPath, ResultPath und OutputPath Beispiele

Jeder Status außer eines Fail-Status kann InputPath, ResultPath oder OutputPath enthalten. Diese ermöglichen Ihnen die Verwendung einesJsonPathum JSON beim Durchlaufen Ihres Workflows zu filtern.

Sie können auch dieParametersverwenden, um JSON beim Durchlaufen Ihres Workflows zu bearbeiten. Für weitere Informationen zur Nutzung von Parameters siehe InputPath, Parameter und ResultSelector.

Beispiel: Beginnen Sie mit der AWS Lambda-Funktion und dem Zustandsautomaten, die in der Erstellen einer Step Functions State Machine, die Lambda verwendet-Anleitung beschrieben sind. Ändern Sie den Zustandsautomaten so, dass er InputPath, ResultPath und OutputPath enthält.

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", "End": true } } }

Starten einer Ausführung mit der folgenden Eingabe.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17 }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

Gehen Sie davon auscommentundextra-Knoten können verworfen werden, aber wir die Ausgabe der Lambda-Funktion einschließen sowie die Informationen in derdata-Knoten.

Im aktualisierten Zustandsautomaten wird der Task-Zustand geändert, damit die Aufgabeneingabe verarbeitet wird.

"InputPath": "$.lambda",

Diese Zeile in der Definition des Zustandsautomaten begrenzt die Aufgabeneingabe ausschließlich auf lambda-Knoten aus der Statuseingabe. Die Lambda-Funktion erhält nur das JSON-Objekt{"who": "AWS Step Functions"}als Eingabe.

"ResultPath": "$.data.lambdaresult",

DieserResultPathbefiehlt dem Zustandsautomaten das Einfügen des Ergebnisses der Lambda-Funktion in einen Knoten mit der Bezeichnunglambdaresult, als untergeordnetes Element desdataKnoten in der ursprünglichen Zustandsmaschine-Eingabe. Weil wir keine weiteren Manipulationen an der ursprünglichen Eingabe und dem Ergebnis mitOutputPathenthält die Statusausgabe jetzt das Ergebnis der Lambda-Funktion mit der ursprünglichen Eingabe.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

Unser Ziel war es jedoch, nur diedata-Knoten, und enthalten das Ergebnis der Lambda-Funktion.OutputPathfiltert dieses kombinierte JSON-Objekt vor dem Weiterleiten an die Statusausgabe.

"OutputPath": "$.data",

Dadurch wird nur der data-Knoten aus der ursprünglichen Eingabe (einschließlich des untergeordneten lambdaresult-Elements, das von ResultPath eingefügt wurde) für die Weiterleitung an die Ausgabe ausgewählt. Die Statusausgabe wird auf Folgende Weise gefiltert:

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }

In diesem Task-Status:

  1. InputPathsendet nur daslambda-Knoten aus der Eingabe zur Lambda-Funktion.

  2. ResultPath fügt das Ergebnis als untergeordnetes Element des data-Knotens in die ursprünglichen Eingabe ein.

  3. OutputPathfiltert die Statuseingabe (enthält jetzt das Ergebnis der Lambda-Funktion), sodass nur die StatuseingabedataKnoten zur State-Ausgabe.

Beispiel um die Eingabe, das Ergebnis und die Endausgabe der ursprünglichen Zustandsmaschine zu manipulieren JsonPath

Stellen Sie sich die folgende Zustandsmaschine vor, die die Identität und Adresse eines Versicherungsantragstellers überprüft.

Anmerkung

Das vollständige Beispiel finden Sie unterSo verwenden Sie JSON Path in Step Functionsaus.

{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-identity:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address:$LATEST" }, "End": true } } } ] } } }

Wenn Sie diese Zustandsmaschine mit der folgenden Eingabe ausführen, schlägt die Ausführung fehl, da die Lambda-Funktionen, die die Überprüfung durchführen, nur die Daten erwarten, die als Eingabe überprüft werden müssen. Daher müssen Sie die Knoten, die die zu überprüfenden Informationen enthalten, mithilfe eines entsprechenden JsonPathaus.

{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }

Um den Knoten anzugeben, den dercheck-identityLambda-Funktion muss verwendet werden, verwenden SieInputPathwie folgt:

"InputPath": "$.data.identity"

Und um den Knoten anzugeben, den dercheck-addressLambda-Funktion muss verwendet werden, verwenden SieInputPathwie folgt:

"InputPath": "$.data.address"

Wenn Sie nun das Überprüfungsergebnis in der ursprünglichen Zustandsmaschine-Eingabe speichern möchten, verwenden Sie dieResultPathwie folgt:

"ResultPath": "$.results"

Wenn Sie jedoch nur die Identitäts- und Überprüfungsergebnisse benötigen und die ursprüngliche Eingabe verwerfen, verwenden Sie dieOutputPathwie folgt:

"OutputPath": "$.results"

Weitere Informationen finden Sie unter Verarbeitung von Eingabe und Ausgabe in Step Functions.