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)

Pase una colección de pares de valores clave, donde los valores son estáticos o 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 con 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 de Add sería 5, la de Subtract sería 1 y la del estado Parallel 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 se controla mediante elParallelEn sí, Step Functions detienen la ejecución con un error.

nota

Cuando un estado Parallel no se ejecuta correctamente, las funciones Lambda invocadas se siguen ejecutando y los trabajadores de actividad que procesan un token de tarea no se detienen.

  • Para detener actividades de ejecución prolongada, utilice latidos para detectar si ha detenido su ramificación mediante Step Functions 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 unaWaitPara que el trabajo de limpieza se realice una vez finalizada la función Lambda.