Esempio: manipolazione dei dati di stato 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à.

Esempio: manipolazione dei dati di stato nei flussi di lavoro Step Functions

Questo argomento contiene esempi di come manipolare l'input e l'output dello stato JSON utilizzando i campi InputPath ResultPath, e. OutputPath

Qualsiasi stato diverso da uno Stato del flusso di lavoro fallito stato o da uno Stato del flusso di lavoro Success stato può includere i campi di elaborazione di input e output, ad esempio InputPathResultPath, oOutputPath. Inoltre, gli Stato del flusso di lavoro di scelta stati Attendi lo stato del workflow and non supportano il ResultPath campo. Con questi campi, puoi utilizzare JsonPatha per filtrare i JSON dati man mano che si spostano nel flusso di lavoro.

Puoi anche utilizzare il Parameters campo per manipolare i JSON dati mentre si spostano nel flusso di lavoro. Per ulteriori informazioni sull'uso di Parameters, consultare Manipola i dati di stato utilizzando i parametri nei flussi di lavoro Step Functions.

Ad esempio, iniziate con AWS Lambda funzione e macchina a stati descritti nel Creazione di una macchina a stati Step Functions che utilizza Lambda tutorial. Modifica la macchina a stati affinché includa i seguenti InputPath, ResultPath e OutputPath.

{ "Comment": "A Hello World example of the Amazon States Language using an AWS Lambda function", "StartAt": "HelloWorld", "States": { "HelloWorld": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012:function:HelloFunction", "InputPath": "$.lambda", "ResultPath": "$.data.lambdaresult", "OutputPath": "$.data", "End": true } } }

Avvia un'esecuzione utilizzando i seguenti input.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17 }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

Si supponga che i extra nodi comment and possano essere scartati, ma che si desideri includere l'output della funzione Lambda e conservare le informazioni nel nodo. data

Nella macchina a stati aggiornata, lo stato Task viene modificato in modo da elaborare l'input al task.

"InputPath": "$.lambda",

Questa riga nella definizione della macchina a stati limita l'input del task al nodo lambda dall'input dello stato. La funzione Lambda riceve solo l'JSONoggetto {"who": "AWS Step Functions"} come input.

"ResultPath": "$.data.lambdaresult",

Questo ResultPath dice alla macchina a stati di inserire il risultato della funzione Lambda in un nodo denominatolambdaresult, come figlio del data nodo nell'input originale della macchina a stati. Poiché non state eseguendo altre manipolazioni sull'input originale e sul risultato utilizzatoOutputPath, l'output dello stato ora include il risultato della funzione Lambda con l'input originale.

{ "comment": "An input comment.", "data": { "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }, "extra": "foo", "lambda": { "who": "AWS Step Functions" } }

Tuttavia, il nostro obiettivo era preservare solo il data nodo e includere il risultato della funzione Lambda. OutputPathfiltra questa combinazione JSON prima di passarla all'output dello stato.

"OutputPath": "$.data",

Questo seleziona solo il nodo data dall'input originale (tra cui il figlio lambdaresult inserito da ResultPath) da trasmettere all'output. L'output dello stato viene filtrato come segue.

{ "val1": 23, "val2": 17, "lambdaresult": "Hello, AWS Step Functions!" }

In questo stato Task:

  1. InputPathinvia solo il lambda nodo dall'input alla funzione Lambda.

  2. ResultPath inserisce il risultato come figlio del nodo data nell'input originale.

  3. OutputPathfiltra l'input dello stato (che ora include il risultato della funzione Lambda) in modo che passi solo il data nodo all'output dello stato.

Esempio per manipolare l'input, il risultato e l'output finale della macchina a stati originali utilizzando JsonPath

Considerate la seguente macchina a stati che verifica l'identità e l'indirizzo di un richiedente di assicurazione.

Nota

Per visualizzare l'esempio completo, vedi Come usare JSON Path in Step Functions.

{ "Comment": "Sample state machine to verify an applicant's ID and address", "StartAt": "Verify info", "States": { "Verify info": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Verify identity", "States": { "Verify identity": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-identity:$LATEST" }, "End": true } } }, { "StartAt": "Verify address", "States": { "Verify address": { "Type": "Task", "Resource": "arn:aws:states:::lambda:invoke", "Parameters": { "Payload.$": "$", "FunctionName": "arn:aws:lambda:us-east-2:111122223333:function:check-address:$LATEST" }, "End": true } } } ] } } }

Se si esegue questa macchina a stati utilizzando l'input seguente, l'esecuzione non riesce perché le funzioni Lambda che eseguono la verifica si aspettano solo i dati che devono essere verificati come input. Pertanto, è necessario specificare i nodi che contengono le informazioni da verificare utilizzando un codice appropriato JsonPath.

{ "data": { "firstname": "Jane", "lastname": "Doe", "identity": { "email": "jdoe@example.com", "ssn": "123-45-6789" }, "address": { "street": "123 Main St", "city": "Columbus", "state": "OH", "zip": "43219" }, "interests": [ { "category": "home", "type": "own", "yearBuilt": 2004 }, { "category": "boat", "type": "snowmobile", "yearBuilt": 2020 }, { "category": "auto", "type": "RV", "yearBuilt": 2015 }, ] } }

Per specificare il nodo che la funzione check-identity Lambda deve utilizzare, usa il InputPath campo come segue:

"InputPath": "$.data.identity"

E per specificare il nodo che deve utilizzare la funzione check-address Lambda, usa il InputPath campo come segue:

"InputPath": "$.data.address"

Ora, se vuoi memorizzare il risultato della verifica all'interno dell'input originale della macchina a stati, usa il ResultPath campo come segue:

"ResultPath": "$.results"

Tuttavia, se ti servono solo i risultati dell'identità e della verifica e scarti l'input originale, utilizza il OutputPath campo come segue:

"OutputPath": "$.results"

Per ulteriori informazioni, consulta Elaborazione di input e output in Step Functions.