Parallel - 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.

Parallel

El estado Parallel ("Type": "Parallel") puede utilizarse para crear ramificaciones de ejecución paralelas 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 States y StartAt, cuyos significados son exactamente iguales a los del nivel superior de una máquina de estado.

ResultPath (opcional)

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)

Pasar una colección de pares de valores clave, donde los valores son estáticos o están seleccionados 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 uso de 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 Next del estado Parallel.

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:us-east-1:123456789012:function:AddressFinder", "End": true } } }, { "StartAt": "LookupPhone", "States": { "LookupPhone": { "Type": "Task", "Resource": "arn:aws:lambda:us-east-1:123456789012: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 en la consola de Step Functions.


      Flujo de trabajo paralelo.

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:us-east-1:123456789012:activity:Add", "End": true } } }, { "StartAt": "Subtract", "States": { "Subtract": { "Type": "Task", "Resource": "arn:aws:states:us-east-1: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. La salida deAddySubtractlas tareas serían la suma y la diferencia entre los elementos de matriz 3 y 2, que es5y1, mientras que el resultado de laParallelstate sería una matriz.

[ 5, 1 ]

Control 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 error no está controlado porParallelEn sí, 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 detenga los procesos de trabajo que están procesando tareas. Llamar a SendTaskHeartbeat, SendTaskSuccess o SendTaskFailure generará 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 unaWaitEl estado de modo que el trabajo de limpieza se realice una vez finalizada la función de Lambda.