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.
Beispiel: Manipulation von Zustandsdaten in Step Functions Functions-Workflows
Dieses Thema enthält Beispiele dafür, wie Sie die Eingabe und Ausgabe von Zuständen JSON mithilfe der OutputPath Felder InputPath ResultPath, und manipulieren können.
Jeder andere Status als ein Workflow-Status „Fehlgeschlagen“ Bundesstaat oder ein Workflow-Status „Erfolgreich“ Bundesstaat kann die Eingabe- und Ausgabeverarbeitungsfelder enthalten, z. B. InputPath
ResultPath
, oderOutputPath
. Darüber hinaus unterstützen die Workflow-Status „Auswahl“ Bundesstaaten Workflow-Status warten und das ResultPath
Feld nicht. Mit diesen Feldern können Sie a verwenden, JsonPath
Sie können das Parameters
Feld auch verwenden, um die JSON Daten zu bearbeiten, während sie Ihren Workflow durchlaufen. Für weitere Informationen zur Nutzung von Parameters
siehe Manipulieren von Zustandsdaten mithilfe von Parametern in Step Functions Functions-Workflows.
Beginnen Sie beispielsweise mit AWS Lambda Funktion und Zustandsmaschine, die im Eine Step Functions Functions-Zustandsmaschine erstellen, die Lambda verwendet Tutorial 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 aus, dass die extra
Knoten comment
und verworfen werden können, Sie aber die Ausgabe der Lambda-Funktion einbeziehen und die Informationen im Knoten beibehalten möchten. data
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 empfängt nur das JSON Objekt {"who": "AWS Step Functions"}
als Eingabe.
"ResultPath": "$.data.lambdaresult",
Dadurch wird ResultPath
die Zustandsmaschine angewiesen, das Ergebnis der Lambda-Funktion als untergeordnetes Element des Knotens in der ursprünglichen Zustandsmaschineneingabe in einen data
Knoten mit dem Namen lambdaresult
einzufügen. Da Sie keine weiteren Manipulationen an der ursprünglichen Eingabe und dem verwendeten Ergebnis vornehmenOutputPath
, enthält die Ausgabe des Status jetzt das Ergebnis der Lambda-Funktion zusammen 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 den data
Knoten beizubehalten und das Ergebnis der Lambda-Funktion einzubeziehen. OutputPath
filtert diese Kombination, JSON bevor sie an die Statusausgabe übergeben wird.
"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:
-
InputPath
sendet nur denlambda
Knoten von der Eingabe an die Lambda-Funktion. -
ResultPath
fügt das Ergebnis als untergeordnetes Element desdata
-Knotens in die ursprünglichen Eingabe ein. -
OutputPath
filtert die Zustandseingabe (die jetzt das Ergebnis der Lambda-Funktion enthält), sodass nur derdata
Knoten an die Statusausgabe übergeben wird.
Beispiel um die Eingabe, das Ergebnis und die endgültige Ausgabe der ursprünglichen Zustandsmaschine zu manipulieren mit JsonPath
Stellen Sie sich den folgenden Zustandsmaschine vor, der die Identität und Adresse eines Versicherungsantragstellers überprüft.
Anmerkung
Das vollständige Beispiel finden Sie unter So verwenden Sie JSON Path-in-Step-Funktionen
{ "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 verifiziert werden müssen, als Eingabe. Daher müssen Sie die Knoten, die die zu verifizierenden Informationen enthalten, mithilfe eines geeigneten JsonPath Verfahrens angeben.
{ "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 die
Lambda-Funktion verwenden muss, verwenden Sie das check-identity
InputPath
Feld wie folgt:
"InputPath": "$.data.identity"
Und um den Knoten anzugeben, den die
Lambda-Funktion verwenden muss, verwenden Sie das check-address
InputPath
Feld wie folgt:
"InputPath": "$.data.address"
Wenn Sie nun das Überprüfungsergebnis in der ursprünglichen State-Machine-Eingabe speichern möchten, verwenden Sie das ResultPath
Feld wie folgt:
"ResultPath": "$.results"
Wenn Sie jedoch nur die Identitäts- und Überprüfungsergebnisse benötigen und die ursprüngliche Eingabe verwerfen, verwenden Sie das OutputPath
Feld wie folgt:
"OutputPath": "$.results"
Weitere Informationen finden Sie unter Eingabe und Ausgabe in Step Functions verarbeiten.