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
Scopri come passare dati tra stati con variabili e Trasformare dati con. JSONata
I InputPath
ResultSelector
campi Parameters
e forniscono un modo per manipolare JSON durante il flusso di lavoro. InputPath
può 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:
Utilizza lo stato Distributed Map nel tuo flusso di lavoro in modo che lo
Map
stato possa leggere l'input direttamente dalle fonti di dati Amazon S3. Per ulteriori informazioni, consulta Modalità distribuita.Analizza l'Amazon Resource Name (ARN) del bucket nel parametro per ottenere il nome
Payload
del bucket e il valore della chiave. Per ulteriori informazioni, consulta Utilizzo di Amazon S3 ARNs anziché trasferire payload di grandi dimensioni in Step Functions.
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. ResultSelector
può 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: