Estado Parallel de un flujo de trabajo - 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.

Estado Parallel de un flujo de trabajo

Administrar el estado y transformar los datos

Step Functions agregó recientemente variables y JSONata para administrar el estado y transformar los datos.

Obtenga información sobre cómo pasar datos con variables y cómo transformar 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 States y StartAt, cuyos significados son exactamente iguales a los del nivel superior de una máquina de estado.

Arguments(Opcional, JSONata únicamente)

Se utiliza para transferir información a las API acciones de los recursos conectados. Los valores pueden incluir JSONata expresiones. Para obtener más información, consulte Transformación de datos con JSONata In Step Functions.

Output(Opcional, JSONata únicamente)

Se utiliza para especificar y transformar la salida del estado. Cuando se especifica, el valor anula el estado de salida predeterminado.

El campo de salida acepta cualquier JSON valor (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 estuviera rodeado por un {%%} caracteres.

La salida también acepta una JSONata expresión directamente, por ejemplo: «Output»: «{% jsonata expression%}»

Para obtener más información, consulte Transformación de datos con JSONata In Step Functions.

Assign (opcional)

Se utiliza para almacenar variables. El Assign campo acepta un JSON objeto 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 estuviera rodeado de caracteres {% %}

Para obtener más información, consulte Pasar datos entre estados con variables.

ResultPath(Opcional, JSONPath únicamente)

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, JSONPath únicamente)

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 Parallel estado hace AWS Step Functions que cada rama se ejecute, empezando por el estado nombrado en el StartAt campo de esa rama, de la forma más simultánea posible, y que espere hasta que todas las ramas terminen (alcancen un estado terminal) antes de procesar el Next campo del Parallel estado.

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 visual en la consola de Step Functions.

Gráfico visual de un ejemplo de 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. 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, 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 un estado Wait de modo que el trabajo de limpieza se realice una vez finalizada la función de Lambda.