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á.
Especificando a saída de estado usando fluxos de trabalho ResultPath do Step Functions
A saída de um estado pode ser uma cópia de sua entrada, o resultado que ele produz (por exemplo, a saída da função do Lambda de um estado Task
) ou uma combinação da entrada e do resultado. Use ResultPath
para controlar qual combinação desses itens são passadas para o estado de saída.
Os seguintes tipos de estado podem gerar um resultado e podem incluir ResultPath:
Use ResultPath
para combinar um resultado de tarefa com entrada de tarefa, ou para selecionar um desses. O caminho que você fornece para ResultPath
controla quais informações passam para a saída.
nota
ResultPath
está limitado ao uso de caminhos de referência, que limitam o escopo para que ele possa identificar apenas um único nó emJSON. Consulte Caminhos de referência no Linguagem de estados da Amazon.
Esses exemplos se baseiam na máquina de estado e função do Lambda descritas no tutorial Como criar uma máquina de estado Step Functions que usa Lambda. Trabalhe nesse tutorial e teste saídas diferentes tentando vários caminhos em um campo ResultPath
.
Use o ResultPath para:
Use ResultPath para substituir a entrada pelo resultado
Se você não especificar um ResultPath
, o comportamento padrão será como se você tivesse especificado "ResultPath": "$"
. Como isso informa ao estado para substituir a entrada completa pelo resultado, o estado de entrada é totalmente substituído pelo resultado proveniente do resultado da tarefa.
O diagrama a seguir mostra como ResultPath
pode substituir completamente a entrada pelo resultado da tarefa.
Use a máquina de estado e a função Lambda descritas em Como criar uma máquina de estado Step Functions que usa Lambda e altere o tipo de integração do serviço para AWS SDKintegração para a função Lambda. Para fazer isso, especifique a função Lambda Amazon Resource Name (ARN) no Resource
campo do Task
estado, conforme mostrado no exemplo a seguir. O uso do AWS SDKa integração garante que o resultado Task
do estado contenha apenas a saída da função Lambda sem metadados.
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:us-east-2:123456789012:function:HelloFunction",
"End": true
}
}
}
Em seguida, transmita a seguinte entrada:
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
A função do Lambda fornece o seguinte resultado.
"Hello, AWS Step Functions!"
dica
Você pode ver esse resultado no Step Functions console
Se ResultPath
não for especificado no estado, ou se "ResultPath":
"$"
for definido, a entrada do estado será substituída pelo resultado da função do Lambda e a saída do estado será a seguinte:
"Hello, AWS Step Functions!"
nota
ResultPath
é usado para incluir conteúdo do resultado com a entrada, antes de transmiti-lo para a saída. No entanto, se ResultPath
não for especificado, o padrão será substituir a entrada completa.
Descartar o resultado e manter a entrada original
Se você definir o ResultPath
como null
, ele passará a entrada original para a saída. Ao usar "ResultPath": null
, a carga útil de entrada do estado será copiada diretamente para a saída, sem considerar o resultado.
O diagrama a seguir mostra como um ResultPath
nulo copiará a entrada diretamente para a saída.
Use ResultPath para incluir o resultado com a entrada
O diagrama a seguir mostra como ResultPath
pode incluir o resultado com a entrada.
Usando a máquina de estado e a função do Lambda descritas no tutorial Como criar uma máquina de estado Step Functions que usa Lambda, podemos transmitir a entrada a seguir.
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
O resultado da função do Lambda é exibido a seguir.
"Hello, AWS Step Functions!"
Para preservar a entrada, insira o resultado da função Lambda e, em seguida, passe a combinação JSON para o próximo estado, que poderíamos definir ResultPath
para o seguinte.
"ResultPath": "$.taskresult"
Isso inclui o resultado da função do Lambda com a entrada original.
{ "comment": "This is a test of input and output of a Task state.", "details": "Default behavior example", "who": "AWS Step Functions", "taskresult": "Hello, AWS Step Functions!" }
A saída da função do Lambda é anexada à entrada original como um valor para taskresult
. A entrada, incluindo o novo valor, é passada para o próximo estado.
Você também pode inserir o resultado em um nó filho da entrada. Defina o ResultPath
da seguinte forma.
"ResultPath": "$.strings.lambdaresult"
Inicie uma execução usando a entrada a seguir.
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }
O resultado da função do Lambda é inserido como um filho do nó strings
na entrada.
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions" }
A saída de estado agora inclui a entrada original JSON com o resultado como um nó filho.
Use ResultPath para atualizar um nó na entrada com o resultado
O diagrama a seguir mostra como ResultPath
atualizar o valor dos JSON nós existentes na entrada com valores do resultado da tarefa.
Usando o exemplo da máquina de estado e da função do Lambda descrito no tutorial Como criar uma máquina de estado Step Functions que usa Lambda, podemos passar a entrada a seguir.
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
O resultado da função do Lambda é exibido a seguir.
Hello, AWS Step Functions!
Em vez de preservar a entrada e inserir o resultado como um novo nó noJSON, podemos sobrescrever um nó existente.
Por exemplo, assim como a omissão ou a definição de "ResultPath": "$"
substitui o nó inteiro, você pode especificar um nó individual a ser substituído pelo resultado.
"ResultPath": "$.comment"
Como o nó comment
já existe na entrada de estado, definir ResultPath
como "$.comment"
substituirá esse nó na entrada pelo resultado da função do Lambda. Sem filtragem adicional por OutputPath
, é passado para a saída o que está a seguir.
{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", }
O valor do nó comment
, "This is a test of the input and output
of a Task state."
, é substituído pelo resultado da função do Lambda: "Hello, AWS
Step Functions!"
na saída de estado.
Use ResultPath para incluir erro e entrada em um Catch
O tutorial Tratar condições de erro usando uma máquina de estado Step Functions mostra como usar uma máquina de estado para capturar um erro. Em alguns casos, talvez você queira preservar a entrada original com o erro. Use ResultPath
em um Catch
para incluir o erro com a entrada original, em vez de substituí-lo.
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]
Se a declaração Catch
anterior detectar um erro, ela incluirá o resultado em um nó error
dentro da mesma entrada de estado. Por exemplo, com a seguinte entrada:
{"foo": "bar"}
A saída do estado ao detectar um erro é exibida a seguir.
{ "foo": "bar", "error": { "Error": "
Error here
" } }
Para obter mais informações sobre como tratar erros, consulte o seguinte: