ResultPath - AWS Step Functions

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.

ResultPath

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, que limitan el ámbito de forma que solo pueden identificar un único nodo en JSON. Consulte Rutas de referencia en el Lenguaje de estados de Amazon.

Estos ejemplos se basan en la máquina de estados y la función Lambda que se describen en el Creación de una máquina de estados de Step Functions que utilice Lambda tutorial. Realice el tutorial y ensaye las distintas salidas probando diversas rutas en un campo ResultPath.

sugerencia

Utilice el simulador de flujo de datos de la consola Step Functions para probar la sintaxis de las rutas JSON, comprender mejor cómo se manipulan los datos dentro de un estado y ver cómo se transfieren los datos entre estados.

Se usa ResultPath para reemplazar la entrada con 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.


        Sustituya la entrada porResultPath.

Utilice la máquina de estados y la función Lambda que se describen en Creación de una máquina de estados de Step Functions que utilice Lambda y cambie el tipo de integración de servicios a integración de AWSSDK 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 integración del AWS SDK garantiza que el resultado Task del estado solo contenga la salida 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, introduzca 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 Lambda proporciona el siguiente resultado.

"Hello, AWS Step Functions!"

Si ResultPath no se especifica en el estado o si "ResultPath": "$" está establecido, la entrada del estado se reemplaza por el resultado de la función 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.


        Copie la entrada a la salida conResultPath.

Se usa ResultPath para incluir el resultado con la entrada

El diagrama siguiente muestra cómo ResultPath puede incluir el resultado con la entrada.


        Incluir entrada con ResultPath

Usando la máquina de estados y la función Lambda descritas en el Creación de una máquina de estados de Step Functions que utilice Lambda tutorial, 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 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 el JSON combinado al siguiente estado, podemos ResultPath establecer lo siguiente.

"ResultPath": "$.taskresult"

Esto incluye el resultado de la función 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 Lambda se añade a la entrada original como 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 Lambda se inserta como elemento secundario del strings nodo 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 el JSON de entrada original con el resultado como nodo secundario.

Se usa ResultPath para actualizar un nodo en la entrada con el resultado

En el siguiente diagrama, se muestra cómo ResultPath puede actualizar el valor de los nodos JSON existentes en la entrada por los valores del resultado de tarea.


        Reemplazar la entrada por ResultPath

Usando el ejemplo de la máquina de estados y la función Lambda que se describen en el Creación de una máquina de estados de Step Functions que utilice Lambda tutorial, 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 Lambda es el siguiente.

Hello, AWS Step Functions!

En lugar de conservar la entrada e insertar el resultado como un nuevo nodo en el JSON, 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 comment nodo ya existe en la entrada de estado, si se establece ResultPath como, se "$.comment" reemplaza ese nodo de la entrada por el resultado de la función 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 del comment nodo,"This is a test of the input and output of a Task state.", se sustituye por el resultado de la función Lambda: "Hello, AWS Step Functions!" en la salida de estado.

Utilice ResultPath para incluir error y entrada en un Catch

El tutorial Manejo de condiciones de error con una máquina de estados de Step Functions 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: