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, Parameter und ResultSelector
Die ResultSelector
Felder InputPath
, Parameters
und bieten eine Möglichkeit, JSON zu bearbeiten, während es Ihren Workflow durchläuft. InputPath
kann die Eingabe einschränken, die durch Filtern der JSON-Notation mithilfe eines Pfads übergeben wird (siehe Pfade). Das Feld Parameters
ermöglicht Ihnen die Übergabe einer Sammlung von Schlüssel-Wert-Paaren, wobei die Werte entweder statische Werte sind, die in der Definition des Zustandsautomaten ausgewählt werden, oder aus der Eingabe mithilfe eines Pfads ausgewählt werden. Das ResultSelector
Feld bietet eine Möglichkeit, das Ergebnis des Status zu bearbeiten, bevor angewendet ResultPath
wird.
AWS Step Functions wendet zuerst das InputPath
Feld und dann das Parameters
Feld an. Sie können zuerst mit InputPath
Ihre unformatierte Eingabe zu einer gewünschten Auswahl filtern und anschließend Parameters
anwenden, um die Eingabe weiter zu bearbeiten oder neue Werte hinzuzufügen. Sie können dann das ResultSelector
Feld verwenden, um die Ausgabe des Status zu bearbeiten, bevor angewendet ResultPath
wird.
Tipp
Verwenden Sie den Datenflusssimulator in der Step Functions-Konsole
InputPath
Verwenden Sie InputPath
, um einen Teil der Zustandseingabe auszuwählen.
Nehmen Sie beispielsweise an, dass die Eingabe für Ihren zustand Folgendes enthält.
{
"comment": "Example for InputPath.",
"dataset1": {
"val1": 1,
"val2": 2,
"val3": 3
},
"dataset2": {
"val1": "a",
"val2": "b",
"val3": "c"
}
}
Dann könnten Sie InputPath
anwenden.
"InputPath": "$.dataset2",
Mit dem vorherigen InputPath
wird der folgende JSON-Code als Eingabe übergeben.
{
"val1": "a",
"val2": "b",
"val3": "c"
}
Anmerkung
Ein Pfad kann zu einer Auswahl von Werten führen. Betrachten Sie das folgende Beispiel.
{ "a": [1, 2, 3, 4] }
Wenn Sie den Pfad $.a[0:2]
anwenden, kommt es zu folgendem Ergebnis.
[ 1, 2 ]
Parameter
In diesem Abschnitt werden die verschiedenen Möglichkeiten beschrieben, wie Sie das Feld Parameter verwenden können.
Schlüssel-Wert-Paare
Verwenden Sie das Parameters
Feld , um eine Sammlung von Schlüssel-Wert-Paaren zu erstellen, die als Eingabe übergeben werden. Die Werte können jeweils entweder statische Werte sein, die Sie in der Definition des Zustandsautomaten festlegen, oder aus der Eingabe mithilfe eines Pfades ausgewählt werden. Bei Schlüssel-Wert-Paaren, bei denen der Wert mit einem Pfad ausgewählt wird, muss der Schlüsselname mit .$
enden.
Nehmen Sie beispielsweise an, Sie stellen die folgenden Eingaben bereit.
{
"comment": "Example for Parameters.",
"product": {
"details": {
"color": "blue",
"size": "small",
"material": "cotton"
},
"availability": "in stock",
"sku": "2317",
"cost": "$23"
}
}
Um einige der Informationen auszuwählen, können Sie diese in der Definition Ihres Zustandsautomaten festlegen.
"Parameters": {
"comment": "Selecting what I care about.",
"MyDetails": {
"size.$": "$.product.details.size",
"exists.$": "$.product.availability",
"StaticValue": "foo"
}
},
Mit der vorherigen Eingabe und dem Feld Parameters
wird der folgende JSON-Code übergeben.
{
"comment": "Selecting what I care about.",
"MyDetails": {
"size": "small",
"exists": "in stock",
"StaticValue": "foo"
}
},
Zusätzlich zu der Eingabe können Sie auf ein spezielles JSON-Objekt zugreifen, das als Kontext-Objekt bezeichnet wird. Das Kontext-Objekt enthält Informationen über die Ausführung Ihres Zustandsautomaten. Siehe Context-Objekt.
Verbundene Ressourcen
Das Feld Parameters
kann auch Daten an verbundene Ressourcen übergeben. Wenn Ihr Aufgabenstatus beispielsweise einen - AWS Batch Auftrag orchestriert, können Sie die relevanten API-Parameter direkt an die API-Aktionen dieses Services übergeben. Weitere Informationen finden Sie hier:
Amazon S3
Wenn die Lambda-Funktionsdaten, die Sie zwischen Zuständen übergeben, auf mehr als 262.144 Byte anwachsen können, empfehlen wir, die Daten mit Amazon S3 zu speichern und eine der folgenden Methoden zu implementieren:
Verwenden Sie den Status Distributed Map in Ihrem Workflow, damit der
Map
Status Eingaben direkt aus Amazon S3-Datenquellen lesen kann. Weitere Informationen finden Sie unter Verwenden von Map State im verteilten Modus.Parsen Sie den Amazon-Ressourcennamen (ARN) des Buckets im -
Payload
Parameter, um den Bucket-Namen und den Schlüsselwert abzurufen. Weitere Informationen finden Sie unter Verwenden Sie Amazon S3 S3-ARNs, anstatt große Nutzlasten weiterzuleiten.
Alternativ können Sie Ihre Implementierung anpassen, um kleinere Nutzlasten in Ihren Ausführungen zu übergeben.
ResultSelector
Verwenden Sie das ResultSelector
Feld , um das Ergebnis eines Status zu bearbeiten, bevor angewendet ResultPath
wird. Mit dem ResultSelector
Feld können Sie eine Sammlung von Schlüssel-Wert-Paaren erstellen, wobei die Werte statisch sind oder aus dem Ergebnis des Zustands ausgewählt werden. Mit dem ResultSelector
Feld können Sie auswählen, welche Teile des Ergebnisses eines Zustands Sie an das ResultPath
Feld übergeben möchten.
Anmerkung
Mit dem ResultPath
Feld können Sie die Ausgabe des ResultSelector
Feldes zur ursprünglichen Eingabe hinzufügen.
ResultSelector
ist ein optionales Feld in den folgenden Zuständen:
Step Functions-Serviceintegrationen geben beispielsweise zusätzlich zur Nutzlast im Ergebnis Metadaten zurück. ResultSelector
kann Teile des Ergebnisses auswählen und sie mit der Statuseingabe mit zusammenführenResultPath
. In diesem Beispiel möchten wir nur die resourceType
und auswählen ClusterId
und diese mit der Statuseingabe aus einem Amazon EMR createCluster.sync. Gehen Sie wie folgt vor:
{
"resourceType": "elasticmapreduce",
"resource": "createCluster.sync",
"output": {
"SdkHttpMetadata": {
"HttpHeaders": {
"Content-Length": "1112",
"Content-Type": "application/x-amz-JSON-1.1",
"Date": "Mon, 25 Nov 2019 19:41:29 GMT",
"x-amzn-RequestId": "1234-5678-9012"
},
"HttpStatusCode": 200
},
"SdkResponseMetadata": {
"RequestId": "1234-5678-9012"
},
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Sie können dann die resourceType
und ClusterId
mit auswählenResultSelector
:
"Create Cluster": {
"Type": "Task",
"Resource": "arn:aws:states:::elasticmapreduce:createCluster.sync",
"Parameters": {
<some parameters>
},
"ResultSelector": {
"ClusterId.$": "$.output.ClusterId",
"ResourceType.$": "$.resourceType"
},
"ResultPath": "$.EMROutput",
"Next": "Next Step"
}
Mit der angegebenen Eingabe ResultSelector
erzeugt die Verwendung von Folgendes:
{
"OtherDataFromInput": {},
"EMROutput": {
"ResourceType": "elasticmapreduce",
"ClusterId": "AKIAIOSFODNN7EXAMPLE"
}
}
Abflachen eines Arrays
Wenn der Zuordnung Status Parallel oder in Ihren Zustandsautomaten ein Array von Arrays zurückgibt, können Sie sie mit dem ResultSelector Feld in ein flaches Array umwandeln. Sie können dieses Feld in die Definition des Parallel- oder Map-Zustands aufnehmen, um das Ergebnis dieser Zustände zu bearbeiten.
Um Arrays zu vereinfachen, verwenden Sie die JMESPath-Syntax [*]
ResultSelector
Feld , wie im folgenden Beispiel gezeigt.
"ResultSelector": { "flattenArray.$": "$[*][*]" }
Beispiele, die zeigen, wie Sie ein Array abflachen, finden Sie unter Schritt 3 in den folgenden Tutorials: