Manipola i dati di stato utilizzando i parametri nei flussi di lavoro Step Functions - AWS Step Functions

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Manipola i dati di stato utilizzando i parametri nei flussi di lavoro Step Functions

I InputPath ResultSelector campi Parameters e forniscono un modo per manipolarli durante JSON il flusso di lavoro. InputPathpuò limitare l'input passato filtrando la JSON notazione utilizzando un percorso (vedi). Utilizzo dei percorsi per accedere all'input per i flussi di lavoro Step Functions Il campo Parameters consente di inoltrare una raccolta di coppie chiave-valore, dove i valori sono valori statici definiti nella definizione della macchina a stati o selezionati dall'input utilizzando un percorso. Il ResultSelector campo fornisce un modo per manipolare il risultato dello stato prima ResultPath che venga applicato.

AWS Step Functions applica prima il InputPath campo e poi il Parameters campo. Innanzitutto puoi filtrare l'input grezzo in modo da avere la selezione che desideri utilizzando InputPath e quindi applicare Parameters per manipolare ulteriormente l'input o aggiungere nuovi valori. È quindi possibile utilizzare il ResultSelector campo per manipolare l'output dello stato prima che ResultPath venga applicato.

InputPath

Utilizza InputPath per selezionare una parte dell'input dello stato.

Se, ad esempio, l'input per il tuo stato include quanto segue:

{ "comment": "Example for InputPath.", "dataset1": { "val1": 1, "val2": 2, "val3": 3 }, "dataset2": { "val1": "a", "val2": "b", "val3": "c" } }

Puoi applicare l'InputPath.

"InputPath": "$.dataset2",

Con il precedenteInputPath, quanto segue è quello JSON che viene passato come input.

{ "val1": "a", "val2": "b", "val3": "c" }
Nota

Un percorso può produrre una selezione di valori. Analizza l'esempio seguente.

{ "a": [1, 2, 3, 4] }

Se applichi il percorso $.a[0:2], il risultato è il seguente.

[ 1, 2 ]

Parametri

Questa sezione descrive i diversi modi in cui è possibile utilizzare il campo Parametri.

Coppie chiave/valore

Utilizzate il Parameters campo per creare una raccolta di coppie chiave-valore che vengono passate come input. I singoli valori possono essere o valori statici inclusi nella definizione della tua macchina a stati o valori selezionati dall'input o dall’oggetto contestuale mediante un percorso. Nel caso delle coppie chiave-valore in cui il valore viene selezionato mediante un percorso, il nome della chiave deve terminare con .$.

Ad esempio, supponiamo di fornire il seguente input.

{ "comment": "Example for Parameters.", "product": { "details": { "color": "blue", "size": "small", "material": "cotton" }, "availability": "in stock", "sku": "2317", "cost": "$23" } }

Per selezionare alcune informazioni puoi specificare questi parametri nella definizione della tua macchina a stati.

"Parameters": { "comment": "Selecting what I care about.", "MyDetails": { "size.$": "$.product.details.size", "exists.$": "$.product.availability", "StaticValue": "foo" } },

Dato l'input precedente e il Parameters campo, questo è JSON quello che viene passato.

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

Oltre all'input, è possibile accedere a un JSON oggetto speciale, noto come oggetto di contesto. L'oggetto contestuale include informazioni sull’esecuzione della macchina a stati. Per informazioni, consulta Oggetto Context.

Risorse connesse

Il campo Parameters è inoltre in grado di trasmettere informazioni alle risorse connesse. Ad esempio, se lo stato dell'attività è l'orchestrazione di un AWS Batch job, è possibile passare i API parametri pertinenti direttamente alle API azioni di quel servizio. Per ulteriori informazioni, consultare:

Amazon S3

Se i dati della funzione Lambda che trasmetti tra gli stati potrebbero superare i 262.144 byte, ti consigliamo di utilizzare Amazon S3 per archiviare i dati e implementare uno dei seguenti metodi:

In alternativa, puoi modificare l'implementazione per trasferire payload più piccoli nelle tue esecuzioni.

ResultSelector

Utilizzate il ResultSelector campo per manipolare il risultato di uno stato prima ResultPath che venga applicato. Il ResultSelector campo consente di creare una raccolta di coppie chiave-valore, in cui i valori sono statici o selezionati dal risultato dello stato. Utilizzando il ResultSelector campo, puoi scegliere quali parti del risultato di uno stato vuoi passare al ResultPath campo.

Nota

Con il ResultPath campo, puoi aggiungere l'output del ResultSelector campo all'input originale.

ResultSelectorè un campo opzionale nei seguenti stati:

Ad esempio, le integrazioni del servizio Step Functions restituiscono metadati oltre al payload nel risultato. ResultSelectorpuò selezionare parti del risultato e unirle allo stato di input con. ResultPath In questo esempio, vogliamo selezionare solo la resourceType e e ClusterId unirla con l'input di stato di Amazon EMR createCluster .sync. Considerato quanto segue:

{ "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" } }

È quindi possibile selezionare resourceType e ClusterId utilizzareResultSelector:

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

Con l'input dato, l'utilizzo ResultSelector produce:

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

Appiattimento di una serie di array

Se lo Stato del flusso di lavoro della mappa stato Stato del flusso di lavoro parallelo o nelle tue macchine a stati restituisce un array di array, puoi trasformarli in una matrice piatta con il campo. ResultSelector Puoi includere questo campo nella definizione dello stato Parallel o Map per manipolare il risultato di questi stati.

Per appiattire gli array, utilizzate la JMESPathsintassi del ResultSelector campo, come illustrato [*] nell'esempio seguente.

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

Per esempi che mostrano come appiattire un array, consultate il passaggio 3 nei seguenti tutorial: