Manipolazione dei parametri nei flussi di lavoro di 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à.

Manipolazione dei parametri nei flussi di lavoro di Step Functions

Gestione dello stato e trasformazione dei dati

I InputPath ResultSelector campi Parameters e forniscono un modo per manipolare JSON durante il flusso di lavoro. InputPathpuò limitare l'input passato filtrando la notazione JSON utilizzando un percorso (vedi). Utilizzo dei JSONPath percorsi Con il Parameters campo, è possibile passare una raccolta di coppie chiave-valore, utilizzando valori statici o selezioni dall'input utilizzando un percorso.

Il ResultSelector campo fornisce un modo per manipolare il risultato dello stato prima che venga applicato. ResultPath

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 precedente InputPath, il JSON trasmesso come input è il seguente.

{ "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 valori di ciascuno possono essere valori statici da includere nella definizione della macchina a stati o selezionati dall'input o dall'oggetto Context con 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" } },

A partire dall'input e dal campo Parameters precedenti, questo è l'oggetto JSON che viene trasmesso.

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

Oltre all'input, è possibile accedere a uno speciale oggetto JSON, noto come oggetto Context. L'oggetto Context include informazioni sull'esecuzione della macchina a stati. Per informazioni, consulta Accesso ai dati di esecuzione dall'oggetto Context in Step Functions .

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 lavoro, è possibile passare i parametri API pertinenti direttamente alle azioni API 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 un 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 sintassi: [*] nel ResultSelector campo, come mostrato nell'esempio seguente.

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

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