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. InputPath
può 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:
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
Payload
parametro per ottenere il nome 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 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 JMESPathsintassiResultSelector
campo, come illustrato [*]
nell'esempio seguente.
"ResultSelector": { "flattenArray.$": "$[*][*]" }
Per esempi che mostrano come appiattire un array, consultate il passaggio 3 nei seguenti tutorial: