Exemplo: Manipulação de dados de estado em fluxos de trabalho do Step Functions - AWS Step Functions

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Exemplo: Manipulação de dados de estado em fluxos de trabalho do Step Functions

Este tópico contém exemplos de como manipular a entrada e a saída de estado JSON usando os OutputPath campos InputPath ResultPath, e.

Qualquer estado que não seja Estado de falha do fluxo de trabalho ou Estado bem-sucedido do fluxo de trabalho pode incluir os campos de processamento de entrada e saída, como InputPath, ResultPath ou OutputPath. Além disso, os estados Aguardar estado do fluxo de trabalho e Escolha o estado do fluxo de trabalho não são compatíveis com o campo ResultPath. Com esses campos, você pode usar JsonPatha para filtrar os JSON dados à medida que eles se movem pelo seu fluxo de trabalho.

Você também pode usar o Parameters campo para manipular os JSON dados à medida que eles se movem pelo seu fluxo de trabalho. Para obter informações sobre como utilizar o Parameters, consulte Manipule dados de estado usando parâmetros nos fluxos de trabalho do Step Functions.

Por exemplo, comece com o AWS Lambda função e máquina de estado descritas no Como criar uma máquina de estado Step Functions que usa Lambda tutorial. Modifique a máquina de estado para que ela inclua o InputPath, o ResultPath e o OutputPath a seguir.

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

Inicie uma execução usando a entrada a seguir.

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

Suponha que os extra nós comment e possam ser descartados, mas que você queira incluir a saída da função Lambda e preservar as informações no nó. data

Na máquina de estado atualizada, o estado Task é alterado para processar a entrada para a tarefa.

"InputPath": "$.lambda",

Essa linha na definição de máquina de estado limita a tarefa de entrada para apenas o nó lambda da entrada de estado. A função Lambda recebe somente o JSON objeto {"who": "AWS Step Functions"} como entrada.

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

Esse ResultPath diz à máquina de estado para inserir o resultado da função do Lambda em um nó chamado lambdaresult, como um filho do nó data na entrada da máquina de estado original. Como você não está realizando nenhuma outra manipulação na entrada original e no resultado usandoOutputPath, a saída do estado agora inclui o resultado da função Lambda com a entrada original.

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

Mas nosso objetivo era preservar somente o data nó e incluir o resultado da função Lambda. OutputPathfiltra isso combinado JSON antes de passá-lo para a saída de estado.

"OutputPath": "$.data",

Isso seleciona apenas o nó data da entrada original (incluindo o filho lambdaresult inserido por ResultPath) a ser passada para a saída. A saída do estado é filtrada como está a seguir.

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

Nesse estado Task:

  1. O InputPath envia somente o nó lambda da entrada para a função do Lambda.

  2. ResultPath insere o resultado como um filho do nó data na entrada original.

  3. O OutputPath filtra a entrada de estado (que agora inclui o resultado da função do Lambda) para que ele transmita somente o nó data para a saída de estado.

exemplo para manipular a entrada, o resultado e a saída final da máquina de estado original usando JsonPath

Considere a seguinte máquina de estado que verifica a identidade e o endereço de um solicitante de seguro.

nota

Para ver o exemplo completo, consulte Como usar o 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 você executar essa máquina de estado usando a entrada a seguir, a execução falhará porque as funções do Lambda que realizam a verificação esperam apenas os dados que precisam ser verificados como entrada. Portanto, você deve especificar os nós que contêm as informações a serem verificadas usando um apropriado 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 }, ] } }

Para especificar o nó que a função do Lambda check-identity deve usar, use o campo InputPath da seguinte forma:

"InputPath": "$.data.identity"

E para especificar o nó que a função do Lambda check-address deve usar, use o campo InputPath da seguinte forma:

"InputPath": "$.data.address"

Agora, se você quiser armazenar o resultado da verificação na entrada original da máquina de estado, use o campo ResultPath da seguinte forma:

"ResultPath": "$.results"

No entanto, se você precisar apenas dos resultados de identidade e verificação e descartar a entrada original, use o campo OutputPath da seguinte forma:

"OutputPath": "$.results"

Para obter mais informações, consulte Processando entrada e saída em Step Functions.