Dominando Flujos de Trabajo Serverless: AWS Step Functions al Descubierto
Explora cómo AWS Step Functions revoluciona la arquitectura en la nube, ofreciendo información sobre la creación de flujos de trabajo serverless eficientes y escalables.
Este artículo fue el punto de partida para una serie dedicada a AWS Step Functions. Si quieres un camino de aprendizaje más estructurado, consulta el primer artículo de la serie sobre AWS Step Functions.
1. Introducción
En el panorama en constante evolución de la computación en la nube, AWS Step Functions se destaca como un servicio poderoso diseñado para simplificar la orquestación de flujos de trabajo complejos y de múltiples pasos. Comprender cómo aprovechar Step Functions puede mejorar significativamente nuestra capacidad para diseñar aplicaciones robustas, escalables y eficientes. Este artículo profundiza en el mundo de AWS Step Functions, explorando sus características, beneficios y aplicaciones prácticas.
1.1. ¿Qué es AWS Step Functions
AWS Step Functions es un servicio de orquestación serverless que te permite definir un flujo de trabajo de aplicación como una serie de pasos impulsados por eventos. A través de flujos de trabajo visuales, puedes diseñar y ejecutar flujos de trabajo que conectan servicios como AWS Lambda, Amazon SNS, Amazon DynamoDB y más, creando aplicaciones ricas sin la carga de gestionar la infraestructura subyacente.
Esta es una de las Step Functions que utilicé en mi sitio web del blog:
1.2. Características Clave
Gestión Visual de Flujos de Trabajo: Step Functions proporciona una consola gráfica para visualizar los componentes de la arquitectura de tu aplicación y el estado en tiempo real de su ejecución.Naturaleza Serverless: Sin infraestructura que gestionar, puedes enfocarte en construir aplicaciones en lugar de administrar servidores.Manejo de Errores y Reintentos: Step Functions ofrece manejo de errores incorporado, lógica de reintentos y mecanismos de captura para gestionar fallos de manera elegante.Integración con Servicios AWS: Se integra perfectamente con varios servicios de AWS, permitiendo flujos de trabajo complejos con codificación mínima.
1.3. ¿Cómo Funcionan los Step Functions
En su núcleo, AWS Step Functions coordina los componentes de aplicaciones distribuidas y microservicios utilizando flujos de trabajo visuales. Defines el flujo de trabajo de tu aplicación en JSON, especificando cada paso del proceso, incluyendo las decisiones, tareas paralelas y la secuencia de tareas.
1.4. Conceptos Fundamentales
Flujo de Trabajo (Workflow): Describe una secuencia de pasos y a menudo coincide con un proceso de negocio. Esto también se llamamáquina de estados (state machine).Estados (States): Representan cada paso de tu flujo de trabajo. Los estados pueden realizar tareas, tomar decisiones y más.Tareas (Tasks): Definen el trabajo realizado por un solo paso en tu flujo de trabajo, como invocar una función Lambda o publicar en un tema SNS.Transiciones (Transitions): Controlan el flujo de un estado a otro, basándose en la salida del estado actual.Integraciones de Servicios (Service Integrations): Step Functions puede invocar y coordinar directamente servicios de AWS como parte del flujo de trabajo.
1.5. Tipos de Flujos de Trabajo
Step Functions tiene dos tipos de flujos de trabajo:
- Los flujos de trabajo
Standardtienen ejecución de flujo de trabajo exactamente una vez y pueden ejecutarse hasta un año.- Ideales para flujos de trabajo de larga duración y auditables, ya que muestran el historial de ejecución y depuración visual
- Los flujos de trabajo
Express, sin embargo, tienen ejecución de flujo de trabajo al menos una vez y pueden ejecutarse hasta cinco minutos- Ideales para cargas de trabajo de alta tasa de eventos, como procesamiento de datos de streaming e ingesta de datos IoT.
Las ejecuciones son instancias donde ejecutas tu flujo de trabajo para realizar tareas.
1.6. Casos de Uso
AWS Step Functions se puede aplicar a una amplia gama de escenarios, desde orquestaciones de tareas simples hasta flujos de trabajo complejos. Aquí hay algunos ejemplos:
- Orquestación de funciones
- Ramificación: Con un estado Choice puedes tomar decisiones
- Manejo de errores (Retry y Catch)
- Humano en el bucle
- Procesamiento paralelo (Estado Parallel)
- Paralelismo dinámico (Estado Map)
2. Creando un Nuevo Flujo de Trabajo de Step Functions
2.1. Workflow Studio
Workflow Studio está integrado en la consola de AWS, dentro del servicio AWS Step Functions.
Tienes una sección completa hablando sobre Workflow Studio en la documentación oficial aquí, con muchos ejemplos e información detallada. En las siguientes líneas, intentaré resumir lo mejor que pueda.
Es un diseñador visual de flujos de trabajo de bajo código que te permite crear flujos de trabajo serverless orquestando servicios de AWS. Con su función de arrastrar y soltar, Workflow Studio facilita la construcción, edición y visualización de prototipos de flujos de trabajo. Workflow Studio también ofrece un editor de código incorporado para escribir y editar las definiciones de tus flujos de trabajo utilizando Amazon States Language (ASL) dentro de la consola de Step Functions.
Puedes acceder a Workflow Studio desde la consola de Step Functions cuando creas o editas un flujo de trabajo en Step Functions. También puedes acceder a Workflow Studio dentro de AWS Application Composer.
Usaremos la consola de Step Functions.
2.2. Nuestro Primer Flujo de Trabajo de Step Functions Usando una Plantilla
Fácilmente, y sin ningún conocimiento, puedes crear tu primer flujo de trabajo usando plantillas predefinidas.
Primero, haz clic en el botón Create state machine para ver la siguiente pantalla:
Si seleccionas una de las plantillas, verás la información sobre el flujo que se generará, y tienes 2 opciones:
- Run a demo
- Build on it
Si seleccionas Build on it verás el Workflow Studio con 3 secciones principales:
- Izquierda: aquí se encuentran todas las tareas que puedes agregar a tu flujo de trabajo, simplemente arrastrando y soltando.
- Centro: contiene la visualización de tu flujo de trabajo
- Derecha: contiene la configuración de la tarea seleccionada
En el nivel superior verás:
- Nombre del flujo de trabajo
- 3 botones para cambiar entre diferentes modos:
- Design: este es el modo actual
- Code: verás el código del flujo de trabajo usando Amazon States Language (ASL)
- Config: puedes configurar el tipo de flujo de trabajo (standard/express), los permisos, el registro y la configuración adicional (x-ray, versiones y etiquetas).
¡Como puedes ver, el código en ASL (Amazon States Language) se ha generado automáticamente para nosotros!
Te recomiendo encarecidamente que uses este editor de bajo código para crear tus flujos de trabajo usando el
modo de diseñoy luego uses elmodo de códigopara copiar todo el código ASL y pegarlo en tu código IaC (¡usando AWS SAM puedes hacerlo muy fácil!).
2.3. Ejemplo Arquitectónico del Mundo Real
Déjame mostrarte una implementación que hice para mi blog usando AWS Step Functions, quizás el caso de uso más típico:
Estaba usando una función Lambda para orquestar algunos pasos dentro:
- Validar los datos de entrada.
- Agregar la información de contacto a una base de datos.
- Usar Amazon SES para enviar un correo electrónico
- Si no ocurren errores, devuelve una respuesta exitosa.
- Si ocurren errores, se capturan y se devuelve una respuesta con un mensaje de error.
Y este era el handler de mi función Lambda:
Sin embargo, quería migrarlo a AWS Step Functions, e hice algunos cambios:
- Crear una Step Function para orquestar el flujo
- Crear una nueva función Lambda solo para procesar los datos (validarlos y prepararlos para el siguiente paso)
- Integrarlo directamente con DynamoDB y SES en la Step Function
- Gestionar los errores
Así que ahora, estoy usando Step Functions en lugar de tener todo dentro de una función Lambda, y puedo visualizar el estado de la ejecución fácilmente.
3. Profundización
3.1. Mejores Prácticas
Para maximizar la efectividad de AWS Step Functions, considera las siguientes mejores prácticas:
- Usa
Workflow Studiode Step Functions para crear tus flujos de trabajo con el diseñador y luego impórtalos a AWS SAM. - Por defecto, no hay tiempos de espera para las máquinas de estado en AWS.
Usa tiempos de esperapara evitar ejecuciones atascadas. Diseño Modular: Divide tus flujos de trabajo en componentes reutilizables.Manejo de Errores: Utiliza las capacidades de manejo de errores de Step Functions para gestionar y mitigar fallos.Registro y Monitoreo: Aprovecha AWS CloudWatch para monitorear la ejecución y el rendimiento de tus flujos de trabajo.- Usa
tareas idempotentes(puedes usar reintentos para mejorar la confiabilidad). - Si usas funciones Lambda, intenta
devolver Excepcionespara que la Step Function pueda gestionar el error (no devuelvas un código 200 con un campo personalizado). Yo lo hice al principio… Elegir Tipos de Flujos de Trabajo: Selecciona flujos de trabajo Standard para procesos de larga duración y flujos de trabajo Express para tareas de corta duración y alto rendimiento para optimizar el costo y el rendimiento.Procesamiento Paralelo: Aprovecha el estado Parallel para ejecutar múltiples tareas simultáneamente, reduciendo el tiempo total de ejecución de los flujos de trabajo.Gestión de Transiciones de Estado: Minimiza el número de transiciones de estado para mantenerte dentro de las cuotas y reducir costos, enfocándote en optimizar el diseño del flujo de trabajo.
Las siguientes mejores prácticas se han extraído de la documentación oficial aquí. No he incluido todas porque para mí muchas de ellas no son mejores prácticas y otras ya están incluidas.
Evita alcanzar la cuota de historial(25,000 entradas en el historial de eventos de ejecución)Evita la latencia al sondear tareas de actividad. AWS dice lo siguiente:- “La API GetActivityTask está diseñada para proporcionar un taskToken exactamente una vez. Si se pierde un taskToken mientras se comunica con un trabajador de actividad, varias solicitudes GetActivityTask pueden bloquearse durante 60 segundos esperando una respuesta hasta que GetActivityTask expire.”
- “Si solo tienes un pequeño número de sondeos esperando una respuesta, es posible que todas las solicitudes se pongan en cola detrás de la solicitud bloqueada y se detengan…”
- “Para sistemas de producción, recomendamos al menos 100 sondeos abiertos por ARN de actividad en cada momento.”
3.2. Patrones de Diseño y Arquitecturas
AWS Step Functions admite varios patrones de diseño y arquitecturas, permitiendo a los arquitectos de la nube resolver desafíos de diseño complejos con elegancia y eficiencia. Los patrones clave incluyen:
Patrón de Máquina de Estados: Descompone aplicaciones complejas en máquinas de estado para modelar la lógica de la aplicación de una manera más manejable, comprensible y escalable. Step Functions te permite mapear visualmente los estados y transiciones de tu aplicación, facilitando el diseño, la depuración y el mantenimiento.Orquestación de Microservicios: Utiliza Step Functions para coordinar las operaciones de microservicios débilmente acoplados, asegurando una comunicación fluida entre servicios y la ejecución del flujo de trabajo.Procesamiento Impulsado por Eventos: Implementa arquitecturas impulsadas por eventos que reaccionan a eventos de AWS CloudWatch o notificaciones de Amazon SNS, activando flujos de trabajo en Step Functions para procesar y responder a eventos.Patrón Saga: Gestiona transacciones distribuidas a través de múltiples servicios, usando Step Functions para manejar la secuencia de transacciones locales y transacciones compensatorias en caso de fallos.Procesamiento por Lotes: Automatiza flujos de trabajo de procesamiento por lotes coordinando las diversas etapas del procesamiento de datos, como tareas de extracción, transformación y carga (ETL). Step Functions puede programar y ejecutar estas tareas en secuencia o en paralelo, manejando errores y reintentos, y asegurando la finalización de todo el proceso por lotes.Reutilización de Flujos de Trabajo: Diseña flujos de trabajo reutilizables para tareas comunes en diferentes aplicaciones o partes de una aplicación. El soporte de Step Functions para anidar flujos de trabajo te permite invocar un flujo de trabajo desde otro, promoviendo la modularidad y reutilización de componentes de flujo de trabajo.
3.3. Comparación con Otros Servicios de AWS
Mientras que AWS Step Functions es una herramienta poderosa para la orquestación de flujos de trabajo, comprender su posicionamiento en relación con otros servicios de AWS como AWS Simple Workflow Service (SWF) y Amazon EventBridge es crucial para los arquitectos:
AWS SWF vs Step Functions: SWF ofrece un control más granular sobre la ejecución del flujo de trabajo y la distribución de tareas, lo que lo hace adecuado para aplicaciones heredadas que requieren procesos de toma de decisiones complejos. Step Functions, con su abstracción de nivel superior, es más adecuado para aplicaciones serverless e integración de múltiples servicios de AWS.Amazon EventBridge vs Step Functions: EventBridge es ideal para el enrutamiento y manejo de eventos, conectando aplicaciones con flujos de datos. Step Functions sobresale en orquestar estos eventos en flujos de trabajo coherentes y con estado, convirtiéndolos en servicios complementarios en arquitecturas impulsadas por eventos.
3.4. Cuándo y Por Qué Migrar de Funciones Lambda a Step Functions
Migrar de funciones AWS Lambda a AWS Step Functions es una decisión estratégica que depende de las necesidades evolutivas de la arquitectura de tu aplicación, particularmente a medida que crece en complejidad y escala. Aquí está cuándo y por qué tal migración se vuelve beneficiosa:
3.4.1. Cuándo Migrar
Flujos de Trabajo Complejos: Cuando la lógica de tu aplicación se extiende más allá de ejecuciones simples y lineales a flujos de trabajo complejos que involucran lógica condicional, procesamiento paralelo o coordinación entre múltiples servicios de AWS.Necesidades de Gestión de Estado: A medida que tus flujos de trabajo requieren mantener información de estado a través de múltiples pasos o necesitan gestionar procesos de larga duración que exceden los límites de ejecución de Lambda.Manejo Avanzado de Errores: Cuando necesitas estrategias sofisticadas de manejo de errores que incluyen reintentos, mecanismos de captura y respaldos basados en el tipo de error o fallo.Escalabilidad y Eficiencia: Si gestionar la lógica de orquestación dentro de funciones Lambda se vuelve engorroso y estás buscando una forma más escalable y eficiente de gestionar ejecuciones de flujos de trabajo.Consideraciones de Costo: Para flujos de trabajo que activan un alto volumen de funciones Lambda, donde la lógica de orquestación en sí misma se convierte en una parte significativa del costo.
3.4.2. Por Qué Migrar
Gestión Simplificada de Flujos de Trabajocon diseño y ejecución visual: Step Functions proporciona una interfaz visual para diseñar, gestionar y monitorear flujos de trabajo, facilitando la comprensión y optimización de procesos complejos.Manejo Mejorado de Errores y Lógica de Reintentos: Step Functions ofrece mecanismos avanzados de manejo de errores y reintentos, permitiéndote definir flujos de trabajo robustos que pueden manejar fallos y excepciones de manera elegante sin código personalizado complejo.Gestión de Estado y Procesos de Larga Duración: Step Functions gestiona automáticamente el estado de cada paso en tu flujo de trabajo, facilitando la orquestación de procesos de larga duración y con estado que serían desafiantes de implementar solo con Lambda.Integración Perfecta de Servicios: Con soporte incorporado para integración directa con numerosos servicios de AWS, Step Functions puede orquestar flujos de trabajo complejos a través del ecosistema de AWS de manera más fluida que funciones Lambda independientes.Ejecución Escalable: Step Functions puede escalar flujos de trabajo dinámicamente, gestionando miles de ejecuciones paralelas, lo que simplifica la arquitectura para aplicaciones de alto volumen.Optimización de Costos: Al descargar la lógica de orquestación a Step Functions, potencialmente puedes reducir el número de invocaciones de Lambda y los costos asociados, especialmente para lógica de orquestación compleja.Complejidad Reducida: Migrar a Step Functions puede simplificar tu base de código al eliminar la lógica de orquestación de tus funciones Lambda, haciéndolas más enfocadas en sus responsabilidades principales.Mantenimiento y Actualizaciones Más Fáciles: Actualizar la lógica del flujo de trabajo se vuelve más sencillo con Step Functions, ya que los cambios a menudo se pueden hacer sin modificar el código de funciones Lambda individuales.
3.5. Precios
Este es un servicio serverless y solo pagas por lo que usas.
Si vas a usarlo para unos pocos miles de ejecuciones es casi gratis.
- Nivel Gratuito: 4,000 TRANSICIONES DE ESTADO por mes (¡
PARA SIEMPRE! No solo en los primeros 12 meses…) - Transiciones de Estado: $0.025 por 1,000 transiciones de estado
Por ejemplo:
- Si ejecutaste un flujo de trabajo con 9 pasos 10,000 veces, el precio será:
- Transiciones de estado por ejecución * ejecuciones de flujo de trabajo = transiciones de estado totales
- 9 * 10,000 = 90,000
- Transiciones de estado totales – Transiciones de estado del nivel gratuito = transiciones de estado facturables
- 90,000 – 4,000 = 89,600
- Cargos mensuales = 89,600 * $0.000025 = $2.24
Aquí tienes la página oficial de precios con mucho más detalle.
4. Conclusión
AWS Step Functions revoluciona la forma en que abordamos el desarrollo de aplicaciones basadas en la nube y la orquestación de flujos de trabajo. Al abstraer las complejidades de gestionar procesos con estado y de múltiples pasos, empodera a desarrolladores y arquitectos para diseñar sistemas más robustos, escalables y eficientes. A través de los ejemplos prácticos y mejores prácticas descritos en este artículo, hemos visto cómo Step Functions facilita la integración perfecta, el manejo de errores y la gestión de flujos de trabajo, permitiendo a los equipos enfocarse en la innovación en lugar de la infraestructura.
Recuerda, el futuro de la orquestación en la nube no se trata solo de conectar servicios; se trata de crear soluciones fluidas, eficientes y escalables que impulsen el valor empresarial. AWS Step Functions es tu socio en este viaje, proporcionando la base que necesitas para construir la próxima generación de aplicaciones nativas de la nube.









