Programar un flujo de trabajo sin servidor

con AWS Step Functions y Amazon CloudWatch

Automatizar la respuesta a eventos operativos para recursos de su cuenta AWS puede ayudar a reducir los gastos generales operativos de su infraestructura de AWS Cloud. Como ejemplo del mundo real, si es ingeniero de DevOps o gerente de TI, podría querer automatizar los trabajos de ETL, la sincronización de datos o la seguridad.

Para solucionar este desafío, puede ejecutar un flujo de trabajo sin servidor en un cronograma basado en tiempo. Amazon CloudWatch Events ofrece una transmisión de eventos del sistema casi en tiempo real que describe los cambios y las notificaciones para sus recursos de AWS. Desde este flujo, puede crear reglas para dirigir eventos específicos a AWS Step Functions e invocar una máquina de estado para realizar un procesamiento adicional. AWS Step Functions le permite coordinar múltiples servicios en flujos de trabajo sin servidor para poder crear y actualizar procesos automatizados rápidamente.

En este tutorial, utilizará Step Functions para organizar un flujo de trabajo sin servidor en respuesta a un evento de CloudWatch. Primero, creará una máquina de estado muy simple utilizando AWS Step Functions. Luego, usará Amazon CloudWatch Events para configurar una regla que ejecute su máquina de estado cada minuto. Si bien este tutorial invoca un flujo de trabajo en un cronograma basado en el tiempo, se puede generalizar para integrarlo con otros servicios de AWS que generen eventos.

En este tutorial, utilizará AWS Step Functions y Amazon CloudWatch. Ambos servicios están incluidos en la capa gratuita de AWS.

Es necesario contar con una cuenta de AWS para realizar este tutorial

No se aplican cargos adicionales por el uso de Step Functions ni CloudWatch. Los recursos que cree con el tutorial se pueden utilizar dentro de la capa gratuita. 

Más información sobre la capa gratuita >>


Paso 1. Crear un rol de AWS Identity and Access Management (IAM)

AWS Step Functions puede ejecutar código y acceder a otros recursos de AWS (por ejemplo, datos almacenados en buckets de Amazon S3). Para mantener la seguridad, debe otorgar a Step Functions acceso a estos recursos mediante AWS Identity and Access Management (IAM).


a. Abra la consola de administración de AWS en otra ventana del navegador para poder tener abierta esta guía paso a paso. Cuando la pantalla se cargue, escriba su nombre de usuario y contraseña para comenzar. Luego escriba IAM en la barra de búsqueda y seleccione IAM para abrir la consola del servicio.

01a
01a

(Haga clic para ampliar)


b.  Haga clic en Roles, luego seleccione Crear rol.

01b
01b

(Haga clic para ampliar)


c. En la página de Seleccionar tipo de entidad de confianza, en el servicio de AWS, seleccione Step Functions de la lista y luego seleccione Siguiente: permisos.

01c
01c

(Haga clic para ampliar)


d. En la página de Adjuntar política de permisos, elija Siguiente: revisar.

01d
01d

(Haga clic para ampliar)


e. En la página de Revisar, escriba step_functions_basic_execution para Nombre del rol y haga clic en Crear rol.

01e
01e

(Haga clic para ampliar)


f. Se creó su nuevo rol de IAM.

01f
01f

(Haga clic para ampliar)


Paso 2. Crear una máquina de estado de AWS Step Functions

En este paso, creará una máquina de estado simple y que se ejecute en forma independiente utilizando un estado de Paso. Un estado de Paso simplemente pasa su entrada a su salida, y no realizar ningún trabajo en realidad.

En un escenario del mundo real, su flujo de trabajo sin servidor puede hacer lo que sea necesario para hacerlo. Podría coordinar múltiples funciones Lambda para realizar tareas, tomar decisiones, etc. Para los fines de este tutorial, vamos a mantener el flujo de trabajo simple.


a. Abra laconsola de AWS Step Functions. Step Functions ofrece varias máquinas de estado predefinidas como plantillas. Para este tutorial, creará una máquina de estado utilizando la plantilla Hello World. En la página Crear una máquina de estado, seleccione Plantillas y luego elija Hello world.

02c
02c

(Haga clic para ampliar)


b. En la sección Detalles, ingrese el Nombre de su máquina de estado ScheduledWorkflow, luego, en Rol de IAM, seleccione Usaré un rol existente. En Roles de IAM existentes, seleccione el rol de IAM que creó, step_functions_basic_execution.

02d
02d

(Haga clic para ampliar)


c. Step Functions completa el nombre de la máquina de estado en forma automática. También completa el panel de Definición de la máquina de estado con la descripción Idioma de estados de Amazon de la máquina de estado. Para obtener más información sobre cómo definir máquinas de estado, consulte Estructura de máquina de estado.

Hagamos algunas modificaciones simples a su máquina de estado:

En la línea 2 y la línea 5, sustituya “HelloWorld” por “Hacer algo”
En la línea 7, sustituya “Hello World!” por “¡Trabajo completo!”

Luego, haga clic en el botón actualizar al lado de su flujo de trabajo visual para actualizar el diagrama de máquina de estado para que refleje sus cambios.

02e
02e

(Haga clic para ampliar)


d. Elija Crear máquina de estado. Su máquina de estado ahora está lista para ejecutarse.

02f
02f

(Haga clic para ampliar)


Paso 3. Cree una regla de Amazon CloudWatch Events

Ahora que ha creado su máquina de estado, puede crear una regla Amazon CloudWatch Events que ejecute su máquina de estado según un cronograma. Amazon CloudWatch Events brinda la transmisión casi en tiempo real de eventos de sistema que describen cambios en los recursos de Amazon Web Services (AWS). Mediante el uso de reglas sencillas puede realizar configuraciones rápidamente, hacer coincidir eventos y redirigirlos a una o más funciones o flujos objetivo.


a. Abra otra pestaña del navegador. Desplácese hasta la consola de CloudWatch Events ingresando CloudWatch en la barra de búsqueda.

03a
03a

(Haga clic para ampliar)


b. Elija Eventos, y luego elija Crear regla.  

03b
03b

(Haga clic para ampliar)


c. Aparece la página Paso 1: Crear regla. En la sección Origen de eventos, seleccione Cronograma. En la Tasa fija de ingrese 1 y deje la unidad de “Minutos” seleccionada.

03c
03c

(Haga clic para ampliar)


d. En la sección Objetivos, elija Añadir objetivo. Elija Máquina de estado de Step Functions de la lista y seleccione su máquina de estado ScheduledWorkflow.

Elija Configurar entrada y seleccione Evento coincidente. Esto hará pasar los detalles del Evento CloudWatch como entrada para Step Functions cada vez que se ejecuta una instancia de su máquina de estado.

Seleccione Crear una nueva regla para este recurso específico y luego haga clic en Configurar detalles.

03d
03d

(Haga clic para ampliar)


e. Se muestra la página Paso 2: Configurar detalles de la regla. Ingrese execute_state_machine como el Nombre de su regla, deje Activado para estado marcado, y luego elija Crear regla.

Se crea la regla y aparece la página Reglas, enumerando todos sus reglas CloudWatch Events.

Se ejecutará una nueva ejecución de su máquina de estado a cada minuto.

03e
03e

(Haga clic para ampliar)


Paso 4. Personalice cómo su máquina de estado lidia con las entradas y salidas

A continuación, personalizará cómo su máquina de estado lidia con la entrada y la salida. Comprender cómo fluye la información de estado a estado, y aprender cómo filtrar y manipular estos datos, le ayudará a diseñar e implementar de manera los flujos de trabajo en AWS Step Functions.


a. En la consola Step Functions, aún debería mostrarse su máquina de estado ScheduledWorkflow . Haga clic en Editar.

04a
04a

(Haga clic para ampliar)


b. En la ventana Definición de máquina de estado, consulte la línea 7 de su máquina de estado. El campo Resultado del estado Paso especifica el resultado que se debería pasar al siguiente estado. Dado que su máquina de estado solo tiene un estado, se pasará el mensaje “¡Trabajo completo!” al estado final de su flujo de trabajo.

Quizás recuerde que el estado Step Functions Pass simplemente pasa su entrada a su salida. Puede usar el campo ResultPath para modificar la salida de un estado. Por ejemplo, puede sustituir la entrada de estado por el resultado que produce (por ejemplo salida de una función Lambda del estado Tarea).

Para combinar la entrada del estado con su resultado, añada una nueva línea después de la línea 7 y escriba:

"ResultPath": "$.taskresult",

Esto combinará los detalles de CloudWatch Event que invocó la ejecución de la máquina de estado con la salida del estado Paso, en este caso “¡Trabajo completo!”. Para obtener más información, consulte Procesamiento de entrada y salida en Step Functions.

04b
04b

(Haga clic para ampliar)


c. Haga clic en Guardar.

04c
04c

(Haga clic para ampliar)


Paso 5. Confirme que su flujo de trabajo esté funcionando como se espera

Ahora que ha activado su regla CloudWatch Events, CloudWatch dispara una ejecución de su flujo de trabajo de la máquina de estado a cada minuto. En este paso, observará dichas ejecuciones y verificará que los detalles de CloudWatch Event estén siendo captados por Step Funcions.


a. En la consola de Step Functions, haga clic en ScheduledWorkflow en la ruta de navegación de la parte superior de la página.

05a
05a

(Haga clic para ampliar)


b. Bajo Ejecuciones, puede observar las ejecuciones que se disparan mediante CloudWatch Events. Puede hacer clic en el botón actualizar para actualizar la ventana y observar las nuevas ejecuciones que aparecen en su máquina de estado. Espere unos instantes para permitir que se disparen al menos dos instancias.

05b
05b

(Haga clic para ampliar)


c. Haga clic con el botón derecho en una de las ejecuciones y abra el enlace en una nueva pestaña del navegador. Repita para lograr una ejecución diferente de su máquina de estado.

En cada pestaña, haga clic en el estado “Hacer algo” en el panel de flujo de trabajo Visual para completar los detalles del Panel de detalles de Step a la derecha.

Al hacer clic en Entrada, puede ver los detalles del evento coincidente de CloudWatch. Tenga en cuenta las diferencias de los eventos, tales como los campos “ID” y “tiempo”.

05c
05c

(Haga clic para ampliar)


d. En cada pestaña, expanda Salida bajo el panel Detalles de Step. Puede ver que la entrada se combinó con la salida del estado “Hacer algo”.

05d
05d

(Haga clic para ampliar)


Paso 6. Terminar los recursos

En este paso, terminará los recursos de AWS Step Functions y Amazon CloudWatch.

Importante: Terminar los recursos que no se están utilizando de forma activa reduce los costos y es una práctica recomendada. No terminar los recursos puede conllevar cargos.


a. Cierre las pestañas para sus ejecuciones de máquina de estado individuales. En la parte superior de la ventana de Step Functions, haga clic en Máquinas de estado.

06a
06a

(Haga clic para ampliar)


b. En la ventana de Máquinas de estado, haga clic en la máquina de estado que creó para este tutorial y seleccione Eliminar. Confirme la acción seleccionando Eliminar máquina de estado en el cuadro de diálogo. Su máquina de estado se eliminará en uno o dos minutos una vez que Step Functions haya confirmado que se han completado las ejecuciones en proceso.

06b
06b

(Haga clic para ampliar)


c. A continuación, eliminará su regla Amazon CloudWatch Events. En la consola CloudWatch, haga clic en Acciones y haga clic en Eliminar. Confirme la eliminación con un clic en Eliminar nuevamente.

06c
06c

(Haga clic para ampliar)


d. Haga clic en Servicios y luego ingrese IAM en la barra de búsqueda para navegar hasta la consola de IAM.

06d

(Haga clic para ampliar)


e. Haga clic en Roles.

06e
06e

(Haga clic para ampliar)


f. Seleccione los dos roles de IAM que creó para este tutorial y, luego, haga clic en Eliminar rol. Confirme la eliminación haciendo clic en Sí, eliminar en el cuadro de diálogo.

Ahora puede cerrar sesión en la consola de administración de AWS.

06f
06f

(Haga clic para ampliar).


¡Felicitaciones!

Ha programado con éxito un flujo de trabajo sin servidor para que se ejecute a cada minuto.
AWS Step Functions le permite inspeccionar y auditar la ejecución de tareas recurrentes para confirmar que se hayan ejecutado de manera consistente. Al combinar AWS Step Functions con Amazon CloudWatch Events, puede automatizar tareas diarias, semanales y mensuales, o disparar la ejecución de su flujo de trabajo Step Functions cuando se cumplan ciertas condiciones.


¿Le resultó útil este tutorial?