Estado Parallel de un flujo de trabajo
Administración del estado y transformación de los datos
Obtenga información sobre la Transmisión de datos entre estados con variables y la Transformación de datos con JSONata.
El estado Parallel ("Type": "Parallel") puede utilizarse para añadir ramificaciones de ejecución separadas en la máquina de estado.
Además de los campos de estado comunes, los estados Parallel incluyen los campos adicionales que se detallan a continuación.
-
Branches(Obligatorio) -
Matriz de objetos que especifica las máquinas de estado que se van a ejecutar en paralelo. Cada uno de estos objetos de máquina de estado debe tener los campos
StatesyStartAt, cuyos significados son exactamente iguales a los del nivel superior de una máquina de estado. Parameters(Opcional, solo JSONPath)-
Se utiliza para pasar información a las máquinas de estado definidas en la matriz
Branches. Arguments(Opcional, solo JSONata)-
Se utiliza para pasar información a las acciones de la API de los recursos conectados. Los valores pueden incluir expresiones de JSONata. Para obtener más información, consulte Transformación de datos con JSONata en Step Functions.
Output(Opcional, solo JSONata)-
Se utiliza para especificar y transformar la salida del estado. Cuando se especifica, el valor anula el valor predeterminado de salida del estado.
El campo de salida acepta cualquier valor JSON (objeto, matriz, cadena, número, booleano, nulo). Cualquier valor de cadena, incluidos los que estén dentro de objetos o matrices, se evaluará como JSONata si está rodeado por caracteres {% %}.
La salida también acepta directamente una expresión de JSONata, por ejemplo: “Output”: “{% jsonata expression%}”
Para obtener más información, consulte Transformación de datos con JSONata en Step Functions.
-
Assign(opcional) -
Se utiliza para almacenar variables. El campo
Assignacepta un objeto JSON con pares clave/valor que definen los nombres de las variables y sus valores asignados. Cualquier valor de cadena, incluidos los que estén dentro de objetos o matrices, se evaluará como JSONata si está rodeado por caracteres{% %}.Para obtener más información, consulte Transmisión de datos entre estados con variables.
-
ResultPath(Opcional, solo JSONPath) -
Especifica en qué lugar (de los datos de entrada) se va a situar la salida de las ramificaciones. La entrada se filtra según el contenido del campo
OutputPath(si existe) antes de utilizarla como salida del estado. Para obtener más información, consulte Procesamiento de entrada y salida. -
ResultSelector(Opcional, solo JSONPath) -
Pase un conjunto de pares clave-valor, donde los valores sean estáticos o se seleccionen del resultado. Para obtener más información, consulte ResultSelector.
-
Retry(opcional) -
Una matriz de objetos, llamados "reintentadores", que definen una política de reintentos en caso de que el estado encuentre errores en tiempo de ejecución. Para obtener más información, consulte Ejemplos de máquina de estado que usan Retry y Catch.
-
Catch(opcional) -
Una matriz de objetos, denominados "receptores", que definen un estado alternativo que se ejecuta si el estado encuentra errores en tiempo de ejecución y su política de reintentos está agotada o no se ha definido. Para obtener más información, consulte Estados alternativos.
Un estado Parallel hace que AWS Step Functions ejecute cada ramificación, comenzando con el estado especificado en el campo StartAt de esa ramificación, con la mayor simultaneidad posible, y espera hasta que terminan todas las ramificaciones (alcanzan un estado terminal) antes de procesar el campo Parallel del estado Next.
Ejemplo del estado Parallel
{ "Comment": "Parallel Example.", "StartAt": "LookupCustomerInfo", "States": { "LookupCustomerInfo": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "LookupAddress", "States": { "LookupAddress": { "Type": "Task", "Resource": "arn:aws:lambda:region:account-id:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:region:account-id:function:PhoneFinder", "End": true } } } ] } } }
En este ejemplo, las ramificaciones LookupAddress y LookupPhone se ejecutan en paralelo. A continuación, se muestra el aspecto del flujo de trabajo visual en la consola de Step Functions.
Cada una de las ramificaciones debe ser autónoma. Los estados de una ramificación de un estado Parallel no deben incluir un campo Next que tenga como destino un campo que está fuera de la ramificación ni ningún otro estado fuera de la ramificación puede cambiar a esa ramificación.
Procesamiento de entrada y salida del estado Parallel
El estado Parallel proporciona a cada ramificación una copia de sus propios datos de entrada (sujetos a las modificaciones realizadas por el campo InputPath). Genera una salida que es una matriz con un elemento para cada ramificación, que contiene la salida de dicha ramificación. No es necesario que todos los elementos sean del mismo tipo. La matriz de salida puede insertarse en los datos de entrada (y el conjunto enviado como salida del estado Parallel) a través del campo ResultPath de la forma habitual (consulte Procesamiento de entrada y salida).
{ "Comment": "Parallel Example.", "StartAt": "FunWithMath", "States": { "FunWithMath": { "Type": "Parallel", "End": true, "Branches": [ { "StartAt": "Add", "States": { "Add": { "Type": "Task", "Resource": "arn:aws:states:region:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:region:123456789012:activity:Subtract", "End": true } } } ] } } }
Si al estado FunWithMath se le proporcionó como entrada la matriz [3, 2], tanto el estado Add como el estado Subtract recibirán esa matriz como datos de entrada. El resultado de las tareas Add y Subtract sería la suma y la diferencia entre los elementos de la matriz 3 y 2, es decir, 5 y 1, mientras que la salida del estado Parallel sería una matriz.
[ 5, 1 ]sugerencia
Si el estado Parallel o Map que utiliza en sus máquinas de estado devuelve una matriz de matrices, puede transformarlas en una matriz plana con el campo ResultSelector. Para obtener más información, consulte Aplanamiento de una matriz de matrices.
Gestión de errores
Si alguna ramificación no se ejecuta correctamente debido a un error no controlado o porque cambia a un estado Fail, se considera que el error afecta a todo el estado Parallel y se detienen todas las ramificaciones. Si el propio estado Parallel no controla el error, Step Functions detendrá la ejecución con un error.
nota
Cuando un estado Parallel no se ejecuta correctamente, las funciones de Lambda invocadas se siguen ejecutando y los procesos de trabajo de actividad que procesan un token de tarea no se detienen.
-
Para detener actividades de ejecución prolongada, utilice latidos para detectar si Step Functions ha detenido su ramificación y detener los procesos de trabajo que están procesando tareas. Llamar a
SendTaskHeartbeat,SendTaskSuccessoSendTaskFailuregenerará un error si el estado ha producido un error. Consulte Errores de latido. -
La ejecución de funciones de Lambda no se puede detener. Si ha implementado una alternativa, utilice un estado
Waitde modo que el trabajo de limpieza se realice una vez finalizada la función de Lambda.