Curso
Todo sistema complejo es el resultado de orquestar múltiples subsistemas. Construir y mantener algo así sigue siendo un reto habitual, especialmente cuando trabajas con infraestructuras en la nube.
Por suerte, existen varias herramientas que agilizan la orquestación de flujos de trabajo, sea cual sea su complejidad. Entre ellas, AWS Step Functions destaca por su utilidad y por las numerosas ventajas que ofrece.
Este artículo se centra en cómo usar Step Functions para orquestar flujos de trabajo en AWS Cloud. Empezaremos por ver qué son las Step Functions, sus beneficios y sus principales características.
Después, te guiaremos por los pasos para empezar con Step Functions, desde la configuración del entorno de AWS hasta la exploración de la interfaz. Con esta base, recorreremos paso a paso la creación y el despliegue de un flujo de trabajo real.
¿Qué es AWS Step Functions?
AWS Step Functions es un servicio sin servidor de orquestación diseñado para facilitar la creación de flujos de trabajo visuales y coordinar sin fricciones funciones de AWS Lambda y otros recursos de AWS.
Sus capacidades de integración son amplias: admite conexiones con Amazon EC2, Amazon ECS, servidores on‑premise, Amazon API Gateway y colas de Amazon SQS, entre otros. Así, los flujos de trabajo pueden ser completos e interactuar con un amplio ecosistema de servicios de AWS.
La versatilidad de AWS Step Functions la hace adecuada para muchas aplicaciones: desde gestionar pedidos, procesar datos y dar soporte a aplicaciones web hasta orquestar cualquier secuencia compleja de tareas. Step Functions ofrece una solución sólida para automatizar y gestionar flujos de trabajo.
Funciones clave y ventajas
Antes de entrar en los aspectos técnicos de AWS Step Functions, veamos sus funciones principales y sus beneficios.
Funciones clave
Step Functions incluye varias funciones que agilizan la creación y gestión de flujos de trabajo. Destacamos las más importantes:
- Integración con endpoints HTTPS: permite que los flujos de trabajo invoquen cualquier servicio web que soporte HTTPS, lo que facilita integrar diversas API web en tus procesos.
- Coordinación de componentes distribuidos: hace posible coordinar componentes de sistemas distribuidos, algo crucial en aplicaciones complejas con múltiples servicios.
- Gestión de estado integrada: supervisa con detalle el progreso de cada ejecución del flujo, conserva el estado de tus aplicaciones durante la ejecución y gestiona los datos que se transfieren entre pasos.
- Aprobación humana: la intervención humana es clave en cualquier automatización. Esta función permite incluir aprobaciones manuales cuando sea necesario dentro de un flujo automatizado.
Beneficios
Las funciones de AWS Step Functions aportan múltiples beneficios para mejorar los flujos operativos y de desarrollo de desarrolladores y organizaciones.
|
Para desarrolladores |
Para organizaciones |
|
|
Ejemplos reales y casos de uso
Con las funciones y ventajas anteriores, no hay duda de que Step Functions puede desempeñar un papel clave en múltiples ámbitos, ayudando a las empresas a diseñar, automatizar y escalar sus flujos de trabajo con eficacia.
En esta sección veremos ejemplos de cómo distintos sectores usan AWS Step Functions para ser más competitivos, innovadores y eficientes.
Coordinación de microservicios
Las organizaciones con arquitecturas basadas en microservicios suelen recurrir a AWS Step Functions para gestionar las interacciones entre servicios.
Una empresa de retail, por ejemplo, podría usar Step Functions para orquestar los pasos de autenticación de usuarios, gestión de stock, procesamiento de pagos y envío de pedidos, garantizando una experiencia de compra fluida.
Seguridad y operaciones de TI
AWS Step Functions se puede usar para automatizar tareas repetitivas como comprobaciones de seguridad, actualizaciones del sistema y verificación de cumplimiento.
En seguridad de TI, por ejemplo, Step Functions permite diseñar flujos de respuesta a incidentes, reduciendo errores humanos y tiempos de respuesta al gestionar de forma sistemática cada fase, desde la alerta inicial hasta la resolución.
Flujos de datos y procesos ETL
En empresas con gran volumen de datos, AWS Step Functions puede orquestar el procesamiento y las tareas ETL: extraer datos de múltiples fuentes, transformarlos a un formato consistente y cargarlos en plataformas analíticas o data lakes.
Una consultora de analítica, por ejemplo, podría implementar Step Functions para automatizar su pipeline de datos y así gestionar la información de forma eficiente para la toma de decisiones estratégicas.
Operaciones de machine learning
Step Functions también es muy útil en la parte operativa del machine learning: preparación de datos, entrenamiento de modelos, evaluación y despliegue.
Una empresa de tecnología sanitaria podría usar Step Functions para gestionar la canalización de reentrenamientos periódicos de sus algoritmos de diagnóstico y mantener el rendimiento de los modelos conforme llegan nuevos datos.
Pipelines de procesamiento de medios
En medios y entretenimiento, AWS Step Functions puede orquestar flujos complejos de procesamiento, como codificación de vídeo, procesamiento de imágenes y análisis de contenido.
Una empresa de medios podría aplicar Step Functions para que, cuando se suba contenido nuevo, se activen automáticamente la conversión de formato, la extracción de miniaturas y el enriquecimiento de metadatos antes de su publicación.
Primeros pasos con AWS Step Functions
Más adelante veremos cómo combinar Step Functions con otros servicios de AWS. Antes, conviene entender los fundamentos de Step Functions para avanzar después hacia conceptos más avanzados.
El objetivo de esta sección es ayudarte a empezar con AWS Step Functions: desde comprender sus bloques básicos hasta moverte por su interfaz.
Bloques básicos de Step Functions
Todo sistema o módulo combina varios subcomponentes, y Step Functions no es la excepción. Se basa en dos bloques: (1) máquinas de estado y (2) tareas.
Veamos estos conceptos con un ejemplo.
- Máquinas de estado: un flujo de trabajo que define la secuencia de eventos, la lógica condicional y el recorrido general de ejecución de las tareas. En resumen, una máquina de estado es un flujo de trabajo.
- Tareas: una acción que realiza un cometido concreto. Recibe una entrada y genera una salida. Por ejemplo, consultar una base de datos, hacer una llamada a una API o invocar una función Lambda.
Pensemos en un caso de uso que gestiona un proceso de matrícula en una guardería con AWS Step Functions. Antes de entrar en detalle, entendamos los pasos generales:
- Recoger la información de matrícula: el primer paso es recopilar los datos de los padres. Puede hacerse con un formulario web, pero en nuestro caso usaremos JSON. Al enviarlo, se activa una función Lambda que pasa la información al siguiente paso del flujo.
- Verificar la información: después, una función Lambda valida los datos. Comprueba que todos los campos requeridos estén completos y que la edad del menor esté dentro del rango admitido por la guardería. Si todo está correcto, el flujo continúa; si no, se devuelve un mensaje de error a los padres.
- Comprobar disponibilidad: una vez verificada la información, otra función Lambda comprueba si hay plazas disponibles. Si las hay, el flujo continúa; si no, se avisa a los padres de que la guardería está completa.
- Confirmar la matrícula: el paso final es una función Lambda que confirma la matrícula y envía un mensaje de confirmación a los padres, con la fecha de inicio y las tarifas.
Este flujo tiene una máquina de estado con cuatro tareas principales, todas autoexplicativas.
checkInformationcheckAgeRangecheckSpotsAvailabilityconfirmRegistration
Flujo de matrícula en guardería con AWS Step Functions
Crea tu primera AWS Step Function
Las secciones anteriores han sido más teóricas; ahora entramos en la parte técnica: desde los requisitos previos para usar Step Functions hasta la implementación y el despliegue de un flujo de extremo a extremo.
Requisitos previos para implementar Step Functions
Antes de ver el caso de uso en detalle, repasemos lo que necesitas para una implementación satisfactoria:
- Cuenta de AWS: necesaria para acceder a los servicios de AWS; puedes crearla en el sitio web de AWS.
- Conocimientos básicos de servicios de AWS: para este caso de uso, es necesario estar familiarizado con AWS Lambda y Amazon Simple Notification Service (SNS).
- Conocimientos de JSON: necesitas entender el formato de entrada y salida de datos.
- AWS IAM: es necesario comprender AWS Identity and Access Management (IAM) para configurar los permisos correctos de las funciones Lambda.
- Habilidades de programación: nociones básicas de Python para escribir las funciones Lambda.
Cómo navegar por la interfaz de AWS Step Functions
Empecemos explorando la interfaz de Step Functions. Tras iniciar sesión en tu cuenta de AWS, sigue estos cuatro pasos:
- Escribe la palabra clave "Step Functions" en la barra de búsqueda superior.
- Elige el icono correspondiente en los resultados.
- Pulsa el botón "Get Started" para crear tu primera Step Function.
- Como queremos crear nuestra propia máquina de estado, selecciona la pestaña "Create your own".

Cuatro pasos para acceder a la interfaz de Step Functions
Tras el cuarto paso, ya puedes diseñar la máquina de estado con la pestaña "Design", que contiene tres funcionalidades principales: "Actions", "Flow" y "Patterns".

Los tres componentes principales de la pestaña "Design"
- Actions: operaciones individuales que se pueden ejecutar dentro de un flujo y que corresponden a servicios específicos de AWS, como invocar una función Lambda, publicar un mensaje en SNS, ejecutar una tarea en ECS o iniciar un job en AWS Glue.
- Flow: constructos de control de flujo que marcan el camino de ejecución de la máquina de estado. Elementos como "Choice" para bifurcaciones, "Parallel" para ejecuciones concurrentes, "Map" para iterar sobre una colección, "Pass" como no‑operación o para enriquecer datos de estado, "Wait" para demoras temporales, "Success" para finalizar con éxito y "Fail" para terminar por error forman parte del control del flujo.
- Patterns: plantillas o patrones recomendados para escenarios comunes, que facilitan construir máquinas de estado complejas. Incluyen tareas de procesamiento de datos específicas para objetos de S3, archivos JSON o CSV, o patrones generales como un Job Poller para orquestar ejecuciones asíncronas.
Creación del flujo de trabajo
El flujo inicial buscaba ofrecer una vista general de los componentes principales de la máquina de estado. Ahora revisamos el proceso de implementación.
Necesitamos cuatro funciones Lambda, cada una correspondiente a una tarea concreta.
Estos siete pasos resumen lo necesario para crear una función Lambda. El proceso es el mismo para las cuatro; solo cambia el contenido de cada función.
El código completo del artículo está en la página de GitHub. Aunque es fácil de seguir, te recomendamos leer todo el artículo para una mejor experiencia.
7 pasos principales para crear una función Lambda
Al completar los siete pasos, verás una ventana con información importante como:
- El nombre de la función
- Su enlace Amazon Resource Name (ARN), y
- El área integrada para implementar la lógica de la función.
Detalles de la función Lambda checkInformation
Ahora repite el mismo proceso para las otras tres tareas (funciones): checkAgeRange, checkSpotsAvailability y confirmRegistration.
A continuación tienes un ejemplo del JSON de entrada. Es importante entenderlo porque condiciona cómo se implementan las funciones.
- El JSON contiene información del menor a matricular: nombre, apellidos y fecha de nacimiento.
- También incluye datos de los padres, los días de la semana que asistirá a la guardería y cualquier información adicional.
{
"registration_info": {
"child": {
"firstName": "Mohamed",
"lastName": "Diallo",
"dateOfBirth": "2016-07-01"
},
"parents": {
"mother": {
"firstName": "Aicha",
"lastName": "Cisse",
"email": "aicha.cisse@example.com",
"phone": "123-456-7890"
},
"father": {
"firstName": "Ibrahim",
"lastName": "Diallo",
"email": "ibrahim.diallo@example.com",
"phone": "098-765-4321"
}
},
"daysOfWeek": [
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday"
],
"specialInstructions": "Mohamed has a peanut allergy."
}
}
Cada función Lambda se describe a continuación:
|
Función |
Descripción |
|
|
|
|
|
|
|
|
|
|
|
|
La implementación de cada función se muestra a continuación:
checkInformation function
import json
def checkInformation(event, context):
registration_info = event['registration_info']
required_fields = ['child', 'parents', 'daysOfWeek']
for field in required_fields:
if field not in registration_info:
return {
'statusCode': 400,
'body': f'Missing required field: {field}'
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkAgeRange function
import json
import datetime
def checkAgeRange(event, context):
registration_info = json.loads(event['body'])
dob = registration_info['child']['dateOfBirth']
today = datetime.date.today()
dob_date = datetime.datetime.strptime(dob, '%Y-%m-%d').date()
age = today.year - dob_date.year - ((today.month, today.day) < (dob_date.month, dob_date.day))
if age < 2 or age > 5:
return {
'statusCode': 400,
'body': json.dumps('Child is not within the acceptable age range for this daycare.')
}
registration_info['child']['age'] = age
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
checkSpotsAvailability function
import json
def checkSpotsAvailability(event, context):
registration_info = json.loads(event['body'])
spots_available = 20 # This should be dynamically determined, not hardcoded
if spots_available <= 0:
return {
'statusCode': 400,
'body': json.dumps('No spots available in the daycare.')
}
return {
'statusCode': 200,
'body': json.dumps(registration_info)
}
confirmRegistration function
import json
import datetime
def confirmRegistration(event, context):
registration_info = json.loads(event['body'])
age = registration_info['child']['age'] # This was added in the checkAgeRange function
if age >= 2 and age < 3:
fees = 800
elif age >= 3 and age < 4:
fees = 750
elif age >= 4 and age < 5:
fees = 700
else: # age >= 5
fees = 650
start_date = datetime.date.today() + datetime.timedelta(weeks=2)
confirmation_details = {
'fees': fees,
'start_date': start_date.isoformat()
}
response = {**registration_info, **confirmation_details}
return {
'statusCode': 200,
'body': json.dumps(response)
}
Con todo listo, podemos crear nuestra máquina de estado para la guardería usando la interfaz gráfica de Step Functions.
A continuación se muestra la máquina de estado final. Veamos los pasos principales que nos han llevado a este flujo:

Flujo de la máquina de estado para el caso de uso de guardería
Antes de continuar, es importante tener en cuenta que el campo statusCode de la salida de una función Lambda determina el siguiente estado en la máquina de estado.
- Si el valor es 200, la comprobación ha sido correcta y pasamos al siguiente paso.
- Si el
statusCodees 400, la comprobación ha fallado y devolvemos el mensaje correspondiente según la función que ejecutó la tarea.
Check Information
- La máquina de estado empieza aquí.
- Se invoca una función Lambda para comprobar que toda la información necesaria está presente en el formulario de matrícula.
- Si la información está completa, el proceso avanza; si no, termina en un estado de error indicando que falta información.
Check Age Range
- Se llega a este paso solo si la comprobación inicial fue correcta.
- Se invoca otra función Lambda para verificar que la edad del menor está dentro del rango admitido.
- Si la edad es válida, el proceso continúa; si no, termina en un estado de error indicando que la edad no es válida.
Check Spots Availability
- Se alcanza este paso solo si la comprobación de edad fue correcta.
- Se invoca una función Lambda para verificar si hay plazas disponibles en la guardería.
- Si hay plazas, el proceso continúa; si no, termina en un estado de error indicando que no hay disponibilidad.
Confirm Registration
- Este es el paso final y solo se alcanza si hay plazas disponibles.
- Se invoca una función Lambda para confirmar la matrícula y calcular las tarifas según la edad del menor.
- El proceso termina con un estado de éxito confirmando la matrícula.
Si quieres aprender más sobre Lambda, en Streaming Data with AWS Kinesis and Lambda aprenderás a trabajar con datos en streaming usando tecnologías serverless en AWS.
Crear roles de IAM
El siguiente paso es definir los roles de IAM para que las Step Functions puedan invocar nuestras funciones Lambda. Hazlo siguiendo estos pasos:

Primeras nueve etapas para crear un rol de IAM

Etapas 10 y 11 para crear un rol de IAM
Este rol de IAM puede asignarse a la máquina de estado desde la pestaña "Config" de la siguiente manera.

3 pasos principales para conceder el rol de IAM
Tras guardar, deberías ver el siguiente mensaje si todo ha ido bien.

Mensaje de éxito al crear la máquina de estado
Cuando estés conforme con la máquina de estado, crea la definición con el botón "Create" situado arriba a la derecha.
Ilustración de la ejecución de la máquina de estado
Despliegue y pruebas de tu flujo
Con el flujo ya desplegado, toca probar la máquina de estado. Veremos dos escenarios:
- Un caso de fallo con un rango de edad válido, en el que el menor que intentamos matricular tiene más de 5 años. Corresponde al JSON inicial.
- Un caso de éxito en el que el menor tiene 3 años.

Resultado de un caso de éxito

Resultado de un caso de fallo
Optimiza tus Step Functions
La optimización de cualquier proceso empieza aplicando buenas prácticas, que pueden mejorar el rendimiento y reducir costes. Estas recomendaciones te ayudarán a sacar el máximo partido a AWS Step Functions.
- Buenas prácticas de rendimiento: minimiza el número de transiciones de estado, usa tiempos de espera adecuados y optimiza tus funciones de AWS Lambda.
- Buenas prácticas de coste: elige el tipo de máquina de estado adecuado (Standard o Express), gestiona los costes de AWS Lambda y comprende el modelo de precios de Step Functions.
Conclusión
Este artículo te ha ofrecido una guía completa para entender y utilizar AWS Step Functions. Empezamos presentando el servicio y sus funciones y beneficios clave.
Después, te guiamos por la configuración del entorno de AWS y la navegación por la interfaz de AWS Step Functions.
Además, recorrimos el proceso para crear tu primera AWS Step Function: desde un flujo básico hasta su despliegue y pruebas. También exploramos funciones avanzadas y casos de uso, y por último vimos cómo optimizarlas para lograr la máxima eficiencia y rentabilidad.
Para terminar
Nuestros artículos AWS, Azure y GCP: comparación de servicios para data science e IA e Introduction to AWS Boto in Python pueden ser excelentes próximos pasos para seguir aprendiendo.
El primero compara los servicios principales necesarios para trabajos de datos e IA, desde ingeniería y análisis de datos hasta ciencia de datos y creación de aplicaciones. Este cheat sheet te ayuda a entender el panorama de servicios cloud para data science e IA en las tres grandes plataformas.
El segundo ofrece una introducción sencilla a AWS Boto en Python y enseña a aprovechar la nube para optimizar tu flujo de datos. Es un gran recurso si quieres automatizar operaciones de AWS con Python.
AWS ofrece muchos servicios, y la clave para dominar AWS Step Functions es entender los requisitos de tu aplicación y usar la combinación adecuada de servicios y funciones de AWS para cubrirlos.
Zoumana desarrolla herramientas de IA LLM para ayudar a las empresas a llevar a cabo la diligencia debida en materia de sostenibilidad y evaluaciones de riesgos. Anteriormente trabajó como científico de datos e ingeniero de aprendizaje automático en Axionable e IBM. Zoumana es la fundadora de la plataforma tecnológica educativa de aprendizaje entre iguales ETP4Africa. Ha escrito más de 20 tutoriales para DataCamp.




