Manipulieren von Zustandsdaten mithilfe von Parametern in Step Functions Functions-Workflows - 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.

Manipulieren von Zustandsdaten mithilfe von Parametern in Step Functions Functions-Workflows

Die ResultSelector FelderInputPath, Parameters und bieten eine Möglichkeit, die Daten JSON während des Workflows zu manipulieren. InputPathkann die übergebene Eingabe einschränken, indem die JSON Notation mithilfe eines Pfads gefiltert wird (sieheVerwenden von Pfaden für den Zugriff auf Eingaben für Step Functions Functions-Workflows). 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 Zustands zu manipulieren, bevor ResultPath es angewendet 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. Anschließend können Sie das ResultSelector Feld verwenden, um die Ausgabe des Status zu bearbeiten, bevor er angewendet ResultPath wird.

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",

Beim vorherigen InputPath wird JSON das Folgende 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 Parameterfeld 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" } },

Aufgrund der vorherigen Eingabe und des Parameters Felds wird dieses Feld JSON übergeben.

{ "comment": "Selecting what I care about.", "MyDetails": { "size": "small", "exists": "in stock", "StaticValue": "foo" } },

Zusätzlich zur Eingabe können Sie auf ein spezielles JSON Objekt zugreifen, das als Kontextobjekt 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. Zum Beispiel, wenn Ihr Aufgabenstatus die Orchestrierung eines AWS Batch Job, Sie können die relevanten API Parameter direkt an die API Aktionen dieses Dienstes übergeben. Weitere Informationen finden Sie unter:

Amazon S3

Wenn die Lambda-Funktionsdaten, die Sie zwischen Staaten weitergeben, auf mehr als 262.144 Byte anwachsen könnten, empfehlen wir, Amazon S3 zum Speichern der Daten zu verwenden und eine der folgenden Methoden zu implementieren:

Alternativ können Sie Ihre Implementierung so anpassen, dass kleinere Nutzlasten in Ihren Ausführungen übergeben werden.

ResultSelector

Verwenden Sie das ResultSelector Feld, um das Ergebnis eines Zustands zu bearbeiten, bevor er angewendet ResultPath wird. Mit dem ResultSelector Feld können Sie eine Sammlung von Schlüsselwertpaaren erstellen, wobei die Werte statisch sind oder aus dem Ergebnis des Bundesstaates ausgewählt werden. Mithilfe des ResultSelector Felds können Sie auswählen, welche Teile des Ergebnisses eines Bundesstaates Sie an das ResultPath Feld übergeben möchten.

Anmerkung

Mit dem ResultPath Feld können Sie die Ausgabe des ResultSelector Felds zur ursprünglichen Eingabe hinzufügen.

ResultSelectorist ein optionales Feld in den folgenden Zuständen:

Beispielsweise geben Step Functions Functions-Dienstintegrationen zusätzlich zur Nutzlast im Ergebnis Metadaten zurück. ResultSelectorkann Teile des Ergebnisses auswählen und sie mit der Statuseingabe mit zusammenführen. ResultPath In diesem Beispiel möchten wir nur das resourceType und auswählen und ClusterId es mit der Statuseingabe aus einem Amazon EMR createCluster .sync zusammenführen. Angesichts der folgenden Bedingungen:

{ "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 das resourceType und auswählen ClusterId mitResultSelector:

"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:

{ "OtherDataFromInput": {}, "EMROutput": { "ClusterId": "AKIAIOSFODNN7EXAMPLE" "ResourceType": "elasticmapreduce", } }

Ein Array von Arrays reduzieren

Wenn der Workflow-Status zuordnen Status Status des parallelen Workflows oder in Ihren Zustandsmaschinen ein Array von Arrays zurückgibt, können Sie diese mit dem Feld in ein flaches Array umwandeln. ResultSelector Sie können dieses Feld in die Zustandsdefinition Parallel oder Map aufnehmen, um das Ergebnis dieser Zustände zu manipulieren.

Um Arrays zu reduzieren, verwenden Sie die JMESPathSyntax [*] im ResultSelector Feld, wie im folgenden Beispiel gezeigt.

"ResultSelector": { "flattenArray.$": "$[*][*]" }

Beispiele, die zeigen, wie ein Array geglättet wird, finden Sie in Schritt 3 der folgenden Tutorials: