Orquestación de funciones de Lambda con Step Functions - AWS Lambda

Orquestación de funciones de Lambda con Step Functions

Las funciones de Lambda que administran varias tareas, implementan la lógica de reintento o contienen una lógica de ramificación son antipatrones. En su lugar, recomendamos escribir funciones de Lambda que lleven a cabo tareas individuales y utilizar AWS Step Functions para orquestar los flujos de trabajo de las aplicaciones.

Por ejemplo, para procesar un pedido, puede ser necesario validar los detalles del pedido, comprobar los niveles de inventario, procesar el pago y generar una factura. Escriba funciones de Lambda independientes para cada tarea y utilice Step Functions para administrar el flujo de trabajo. Step Functions coordina el flujo de datos entre sus funciones y gestiona los errores de cada paso. Esta separación hace que sus flujos de trabajo sean más fáciles de visualizar, modificar y mantener a medida que se vuelven más complejos.

Cuándo usar Step Functions con Lambda

Los siguientes escenarios son buenos ejemplos de cuándo usar Step Functions para orquestar aplicaciones basadas en Lambda.

Procesamiento secuencial

El procesamiento secuencial es cuando una tarea debe completarse antes de que pueda comenzar la siguiente. Por ejemplo, en un sistema de procesamiento de pedidos, el procesamiento de pagos no puede comenzar hasta que se complete la validación del pedido, y la generación de facturas debe esperar a la confirmación del pago. Escriba funciones de Lambda independientes para cada tarea y utilice Step Functions para gestionar la secuencia y gestionar el flujo de datos entre las funciones.

Una sola función de Lambda administra todo el flujo de trabajo de procesamiento de pedidos mediante las siguientes acciones:

  • Invocar otras funciones de Lambda en secuencia

  • Analizar y validar las respuestas de cada función

  • Implementar la lógica de recuperación y gestión de errores

  • Administrar el flujo de datos entre funciones

Use dos funciones de Lambda: una para validar el pedido y otra para procesar el pago. Step Functions coordina estas funciones mediante las siguientes acciones:

  • Ejecutar las tareas en la secuencia correcta

  • Pasar datos entre funciones

  • Implementar la gestión de errores en cada paso

  • Utilizar los estados Elección para garantizar que solo se proceda al pago de los pedidos válidos

ejemplo gráfico del flujo de trabajo
Gráfico del flujo de trabajo de Step Functions que muestra la validación del pedido, el estado de elección y el procesamiento del pago con las rutas de éxito y error

Gestión de errores complejos

Mientras que Lambda proporciona capacidades de reintento para invocaciones asíncronas y asignaciones de orígenes de eventos, Step Functions ofrece una gestión de errores más sofisticada para flujos de trabajo complejos. Puede configurar los reintentos automáticos con un retroceso exponencial y establecer diferentes políticas de reintentos para los distintos tipos de errores. Cuando se agoten los reintentos, use Catch para enrutar los errores a un estado alternativo. Esto resulta especialmente útil cuando se necesita una gestión de errores de flujo de trabajo que coordine múltiples funciones y servicios.

Para obtener más información sobre cómo gestionar errores de la función de Lambda en una máquina de estados, consulte Handling errors en The AWS Step Functions Workshop.

Una sola función de Lambda gestiona todo lo siguiente:

  • Intenta llamar a un servicio de procesamiento de pagos.

  • Si el servicio de pago no está disponible, la función espera y lo vuelve a intentar más tarde.

  • Implementa un retroceso exponencial personalizado para el tiempo de espera.

  • Después de que todos los intentos fallen, captura el error y elige otro flujo.

Usa una sola función de Lambda centrada únicamente en el procesamiento de pagos. Step Functions administra la gestión de errores mediante las siguientes acciones:

ejemplo gráfico del flujo de trabajo
Gráfico del flujo de trabajo de Step Functions para el procesamiento de pagos con tres resultados: pago correcto, pago no válido y error en el pago

Flujos de trabajo condicionales y aprobaciones humanas

Utilice el estado Elección de Step Functions para enrutar los flujos de trabajo en función del resultado de la función y el sufijo waitForTaskToken para pausar los flujos de trabajo para decisiones humanas. Por ejemplo, para procesar una solicitud de aumento del límite de crédito, utilice una función de Lambda para evaluar los factores de riesgo. A continuación, utilice Step Functions para dirigir las solicitudes de alto riesgo a la aprobación manual y las solicitudes de bajo riesgo a la aprobación automática.

Para implementar un ejemplo de flujo de trabajo que utilice un patrón de integración de tokens de tarea de devolución de llamada, consulte Callback with Task Token en The AWS Step Functions Workshop.

Una sola función de Lambda administra un flujo de trabajo de aprobación complejo mediante las siguientes acciones:

  • Implementar una lógica condicional anidada para evaluar las solicitudes de crédito

  • Invocar diferentes funciones de aprobación según los importes de las solicitudes

  • Administrar múltiples vías de aprobación y puntos de decisión

  • Hacer un seguimiento del estado de las aprobaciones pendientes

  • Implementar una lógica de tiempo de espera y notificación para las aprobaciones

Use tres funciones de Lambda: una para evaluar el riesgo de cada solicitud, otra para aprobar las solicitudes de bajo riesgo y otra para dirigir las solicitudes de alto riesgo a un administrador para que las revise. Step Functions administra el flujo de trabajo mediante las siguientes acciones:

  • Usar estados Elección para enrutar las solicitudes en función del importe y el nivel de riesgo

  • Pausar la ejecución mientras se espera la aprobación humana

  • Administrar los tiempos de espera de las aprobaciones pendientes

  • Proporcionar visibilidad sobre el estado actual de cada solicitud

ejemplo gráfico del flujo de trabajo
Gráfico del flujo de trabajo de Step Functions que muestra la evaluación de las solicitudes de crédito, que se derivan a la aprobación automática o del administrador en función del riesgo

Procesamiento paralelo

Step Functions ofrece tres formas de gestionar el procesamiento en paralelo:

  • El estado En paralelo ejecuta varias ramas de su flujo de trabajo simultáneamente. Úselo cuando tenga que ejecutar diferentes funciones en paralelo, como generar miniaturas mientras extrae metadatos de imágenes.

  • El estado Mapa en línea procesa matrices de datos con hasta 40 iteraciones simultáneas. Úselo para conjuntos de datos pequeños y medianos en los que tenga que efectuar la misma operación en cada elemento.

  • El estado Mapa distribuido gestiona el procesamiento en paralelo a gran escala con hasta 10 000 ejecuciones simultáneas y es compatible con matrices JSON y orígenes de datos de Amazon Simple Storage Service (Amazon S3). Úselo cuando procese conjuntos de datos de gran tamaño o cuando necesite una mayor simultaneidad.

Una sola función de Lambda intenta administrar el procesamiento en paralelo mediante las siguientes acciones:

  • Invocar simultáneamente varias funciones de procesamiento de imágenes

  • Implementar una lógica de ejecución en paralelo personalizada

  • Administrar los tiempos de espera y la gestión de errores para cada tarea en paralelo

  • Recopilar y agregar los resultados de todas las funciones

Use tres funciones de Lambda: una para crear una imagen en miniatura, otra para agregar una marca de agua y otra para extraer los metadatos. Step Functions administra estas funciones mediante las siguientes acciones:

  • Ejecutar todas las funciones simultáneamente con el estado En paralelo

  • Recopilar los resultados de cada función en una matriz ordenada

  • Administrar los tiempos de espera y la gestión de errores en todas las ejecuciones en paralelo

  • Continuar solo cuando se completen todas las ramas en paralelo

ejemplo gráfico del flujo de trabajo
Gráfico de flujo de trabajo de Step Functions con tres funciones de Lambda en paralelo: crear miniatura, agregar marca de agua y extraer metadatos

Cuándo no usar Step Functions con Lambda

No todas las aplicaciones basadas en Lambda se benefician del uso de Step Functions. Tenga en cuenta estos escenarios al elegir la arquitectura de su aplicación.

Aplicaciones sencillas

Para las aplicaciones que no requieren una orquestación compleja, el uso de Step Functions puede agregar una complejidad innecesaria. Por ejemplo, si simplemente procesa mensajes de una cola de Amazon SQS o responde a eventos de Amazon EventBridge, puede configurar estos servicios para que invoquen sus funciones de Lambda directamente. Del mismo modo, si la aplicación consta de solo una o dos funciones de Lambda con una gestión de errores sencilla, la invocación directa de Lambda o las arquitecturas basadas en eventos podrían ser más sencillas de implementar y mantener.

Procesamiento de datos complejos

Puede usar el estado Mapa distribuido de Step Functions para procesar simultáneamente grandes conjuntos de datos de Amazon S3 con funciones de Lambda. Esto resulta eficaz para muchas cargas de trabajo en paralelo a gran escala, incluido el procesamiento de datos semiestructurados, como archivos JSON o CSV. Sin embargo, para transformaciones de datos más complejas o análisis avanzados, tenga en cuenta estas alternativas:

  • Canalizaciones de transformación de datos: use AWS Glue para trabajos de ETL que procesan datos estructurados o semiestructurados de varios orígenes. AWS Glue es particularmente útil cuando se necesitan capacidades integradas de administración de catálogos de datos y esquemas.

  • Análisis de datos: use Amazon EMR para análisis de datos a escala de petabytes, especialmente cuando necesite herramientas Apache Hadoop de ecosistema o para cargas de trabajo de machine learning que superen los límites de memoria de Lambda.

cargas de trabajo con un uso intensivo de la CPU

Si bien Step Functions puede orquestar tareas con un uso intensivo de la CPU, es posible que las funciones de Lambda no sean adecuadas para estas cargas de trabajo debido a sus recursos de CPU limitados. Para operaciones de computación intensiva dentro de sus flujos de trabajo, tenga en cuenta estas alternativas:

  • Orquestación de contenedores: utilice Step Functions para administrar las tareas de Amazon Elastic Container Service (Amazon ECS) a fin de obtener recursos de computación más coherentes y escalables.

  • Procesamiento por lotes: integre AWS Batch con Step Functions para administrar trabajos por lotes que requieren un uso sostenido de la CPU.