Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Especificar la salida de estado mediante los flujos ResultPath de trabajo de Step Functions
La salida de un estado puede ser una copia de su entrada, el resultado que produce (por ejemplo, la salida de una función de Lambda del estado Task
) o una combinación de su entrada y del resultado. Use ResultPath
para controlar qué combinación de estos se pasa a la salida del estado.
Los siguientes tipos de estado pueden generar un resultado y pueden incluir ResultPath:
Use ResultPath
para combinar un resultado de tarea con una entrada de tarea o para seleccionar uno de estos. La ruta que se proporciona a ResultPath
controla la información que se pasa a la salida.
nota
ResultPath
se limita al uso de rutas de referencia, lo que limita el alcance para que solo pueda identificar un nodo en élJSON. Consulte Rutas de referencia en Amazon States Language.
Estos ejemplos se basan en la máquina de estado y en la función de Lambda que se describen en el tutorial Creación de una máquina de estado de Step Functions que utilice Lambda. Realice el tutorial y ensaye las distintas salidas probando diversas rutas en un campo ResultPath
.
Use ResultPath para:
Se utiliza ResultPath para sustituir la entrada por el resultado
Si no especifica una ResultPath
, el comportamiento predeterminado es como si hubiera especificado "ResultPath": "$"
. Dado que esto indica al estado que reemplace toda la entrada por el resultado, la entrada de estado se reemplaza por completo por el resultado procedente del resultado de la tarea.
En el siguiente diagrama, se muestra cómo ResultPath
puede reemplazar por completo la entrada por el resultado de la tarea.
Utilice la máquina de estados y la función Lambda que se describen en Creación de una máquina de estado de Step Functions que utilice Lambda y cambie el tipo de integración de servicios a una AWS SDKintegración para la función Lambda. Para ello, especifique la función Lambda Amazon Resource Name (ARN) en el Resource
campo del Task
estado, como se muestra en el siguiente ejemplo. El uso de la AWS SDK integración garantiza que el resultado del Task
estado solo contenga el resultado de la función Lambda sin metadatos.
{
"StartAt":"CallFunction",
"States":{
"CallFunction": {
"Type":"Task",
"Resource":"arn:aws:lambda:us-east-2:123456789012:function:HelloFunction",
"End": true
}
}
}
A continuación, pase la siguiente entrada:
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
La función de Lambda proporciona el siguiente resultado:
"Hello, AWS Step Functions!"
sugerencia
Puede ver este resultado en Step Functions consola
Si no se especifica ResultPath
en el estado o si se ha establecido "ResultPath":
"$"
, la entrada del estado se sustituye por el resultado de la función de Lambda y la salida del estado es la siguiente.
"Hello, AWS Step Functions!"
nota
ResultPath
se utiliza para incluir contenido a partir del resultado con la entrada, antes de pasarlo a la salida. Pero, si no se especifica ResultPath
, el valor predeterminado consiste en reemplazar toda la entrada.
Descartar el resultado y conservar la entrada original
Si establece ResultPath
en null
, se transferirá la entrada original a la salida. Al utilizar "ResultPath": null
, la carga de entrada del estado se copiará directamente en la salida, independientemente del resultado.
El siguiente diagrama muestra cómo una ResultPath
nula copiará la entrada directamente en la salida.
Se utiliza ResultPath para incluir el resultado con la entrada
El diagrama siguiente muestra cómo ResultPath
puede incluir el resultado con la entrada.
Con la máquina de estado y la función de Lambda descritas en el tutorial Creación de una máquina de estado de Step Functions que utilice Lambda, podríamos pasar la siguiente entrada.
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
El resultado de la función de Lambda es el siguiente.
"Hello, AWS Step Functions!"
Para conservar la entrada, inserte el resultado de la función Lambda y, a continuación, pase la combinación JSON al siguiente estado, que podríamos ResultPath
establecer en lo siguiente.
"ResultPath": "$.taskresult"
Esto incluye el resultado de la función de Lambda con la 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!" }
La salida de la función de Lambda se añade a la entrada original como un valor para taskresult
. La entrada, incluido el valor recién insertado, se pasa al siguiente estado.
También puede insertar el resultado en un nodo secundario de la entrada. Establezca ResultPath
como se indica a continuación.
"ResultPath": "$.strings.lambdaresult"
Inicie una ejecución utilizando la siguiente entrada.
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }
El resultado de la función de Lambda se inserta como un elemento secundario del nodo strings
en la entrada:
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, AWS Step Functions!" }, "who": "AWS Step Functions" }
La salida de estado ahora incluye la entrada original JSON con el resultado como un nodo secundario.
Se utiliza ResultPath para actualizar un nodo de la entrada con el resultado
El siguiente diagrama muestra cómo ResultPath
se puede actualizar el valor de JSON los nodos existentes en la entrada con los valores del resultado de la tarea.
Con el ejemplo de la máquina de estado y la función de Lambda descritos en el tutorial Creación de una máquina de estado de Step Functions que utilice Lambda, podríamos pasar la siguiente entrada.
{ "comment": "This is a test of the input and output of a Task state.", "details": "Default example", "who": "AWS Step Functions" }
El resultado de la función de Lambda es el siguiente.
Hello, AWS Step Functions!
En lugar de conservar la entrada e insertar el resultado como un nuevo nodo en elJSON, podemos sobrescribir un nodo existente.
Por ejemplo, del mismo modo que al omitir o establecer "ResultPath": "$"
se sobrescribe todo el nodo, se puede especificar un nodo determinado para sobrescribirlo con el resultado.
"ResultPath": "$.comment"
Como el nodo comment
ya existe en la entrada de estado, al establecer ResultPath
en "$.comment"
se reemplaza dicho nodo en la entrada por el resultado de la función de Lambda. Sin filtrar más mediante OutputPath
, se pasa lo siguiente a la salida.
{ "comment": "Hello, AWS Step Functions!", "details": "Default behavior example", "who": "AWS Step Functions", }
El valor para el nodo comment
, "This is a test of the input and output
of a Task state."
, se reemplaza por el resultado de la función de Lambda: "Hello, AWS
Step Functions!"
en la salida de estado.
Se utiliza ResultPath para incluir tanto el error como la entrada en un Catch
El tutorial Tratamiento de condiciones de error mediante una máquina de estado de funciones por pasos muestra cómo utilizar una máquina de estado para detectar un error. En algunos casos, es posible que desee conservar la entrada original con el error. Utilice ResultPath
en un Catch
para incluir el error con la entrada original, en lugar de sustituirla.
"Catch": [{ "ErrorEquals": ["States.ALL"], "Next": "NextTask", "ResultPath": "$.error" }]
Si la instrucción Catch
anterior detecta un error, incluye el resultado en un nodo error
dentro de la entrada de estado. Por ejemplo, con la siguiente entrada:
{"foo": "bar"}
La salida de estado al detectar un error es la siguiente.
{ "foo": "bar", "error": { "Error": "
Error here
" } }
Para obtener más información sobre el control de errores, consulte lo siguiente: