Especificación de la salida de estado mediante ResultPath en Step Functions
Administración del estado y transformación de los datos
Esta página hace referencia a JSONPath. Step Functions ha agregado recientemente variables y JSONata para administrar el estado y transformar los datos.
Obtenga información sobre la Transmisión de datos con variables y la Transformación de datos con JSONata.
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 para que la ruta solo tenga que identificar un único nodo en JSON. Consulte Rutas de referencia en Amazon States Language.
Uso de ResultPath para sustituir la entrada por el resultado de la tarea
Si no especifica una ResultPath, el comportamiento predeterminado es el mismo que "ResultPath": "$". El estado reemplazará toda la entrada de estado por el resultado de la tarea.
# State Input
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions"
}
# Path
"ResultPath": "$"
# Task result
"Hello, Step Functions!"
# State Output
"Hello, 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, la acción predeterminada consiste en reemplazar toda la entrada.
Descarte del resultado y conservación de la entrada original
Si establece ResultPath en null, el estado pasará la entrada original a la salida. La carga útil de entrada del estado se copiará directamente en la salida, independientemente del resultado de la tarea.
# State Input
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions"
}
# Path
"ResultPath": null
# Task result
"Hello, Step Functions!"
# State Output
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions"
}
Uso de ResultPath para incluir el resultado con la entrada
Si especifica una ruta para ResultPath, la salida de estado combinará la entrada de estado y el resultado de la tarea:
# State Input
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions"
}
# Path
"ResultPath": "$.taskresult"
# Task result
"Hello, Step Functions!"
# State Output
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions",
"taskresult" : "Hello, Step Functions!"
}
También puede insertar el resultado en un nodo secundario de la entrada. Establezca ResultPath como se indica a continuación.
"ResultPath": "$.strings.lambdaresult"
Dada la siguiente entrada:
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz" }, "who": "AWS Step Functions" }
El resultado de la tarea se insertaría como un elemento secundario del nodo strings en la entrada.
{ "comment": "An input comment.", "strings": { "string1": "foo", "string2": "bar", "string3": "baz", "lambdaresult": "Hello, Step Functions!" }, "who": "AWS Step Functions" }
La salida de estado ahora incluye el JSON de entrada original con el resultado como nodo secundario.
Uso de ResultPath para actualizar un nodo de la entrada con el resultado
Si especifica un nodo existente para ResultPath, el resultado de la tarea sustituirá a ese nodo existente:
# State Input
{
"comment": "This is a test",
"details": "Default example",
"who" : "Step Functions"
}
# Path
"ResultPath": "$.comment"
# Task result
"Hello, Step Functions!"
# State Output
{
"comment": "Hello, Step Functions!",
"details": "Default example",
"who" : "Step Functions"
}
Uso de ResultPath para incluir el error y la entrada en un Catch
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: