Hay tareas que no las lanza nadie: ocurren cada noche. Borrar ficheros temporales, enviar el resumen del día, comprobar que una web responde, hacer una copia. En un servidor clásico se usaba el cron; en AWS, cuando la tarea es un programa pequeño, la forma limpia es una función Lambda (el código) más un programador (el despertador) que la llame a la hora que digas. El programador se llama EventBridge Scheduler y es gratis en la práctica para unas pocas ejecuciones al día. Esta guía conecta las dos cosas.
Antes de empezar: qué significa cada cosa
- Función Lambda
- Un trozo de código tuyo guardado en Amazon que se ejecuta cuando algo lo llama. Pagas por ejecución, no por tener nada encendido.
- EventBridge Scheduler
- El despertador de AWS: ejecuta una acción (por ejemplo, llamar a tu función) a las horas que programes.
- Programación
- Cada "alarma" del despertador: cuándo y a quién llamar.
- Expresión cron
- La forma clásica de escribir horarios repetitivos con números: minuto, hora, día del mes, mes, día de la semana. La guía te da las expresiones hechas.
- Zona horaria
- Scheduler permite elegir la tuya (Europe/Madrid), así que las 3:00 son las 3:00 también con el cambio de hora.
- Rol de ejecución
- El permiso que el despertador necesita para llamar a tu función. Scheduler lo crea solo si se lo pides.
- CloudWatch Logs
- Donde la función escribe su diario cada vez que se ejecuta. Es cómo compruebas que funcionó.
Paso a paso
Prepara la función para que funcione sin nadie delante
Abre la función en la consola de Lambda y pruébala con el botón Probar con un evento vacío (
{}): debe terminar sin error. Si necesita datos (una contraseña, una dirección), ponlos en las variables de entorno de la función (Configuración), no en el código. Y comprueba el tiempo de espera (Configuración general): si la tarea tarda dos minutos y el límite es tres segundos, fallará cada noche.Abre el programador
Busca Amazon EventBridge en la consola y, en el menú de la izquierda, Programador, Programaciones, Crear programación. Nombre:
limpieza-nocturna. Grupo: el predeterminado.Di cuándo
Patrón: Programación recurrente, tipo Programación basada en cron. Para cada noche a las 3:00:
cron(0 3 * * ? *)Para las 8:00 de lunes a viernes:
cron(0 8 ? * MON-FRI *). Para el día 1 de cada mes a las 7:00:cron(0 7 1 * ? *). Debajo, Zona horaria: elige la tuya (Europe/Madrid). La pantalla te muestra las próximas diez ejecuciones para que compruebes que son las que esperas. Ventana flexible: Desactivada si quieres la hora exacta.Di a quién llamar
Destino: Plantillas de destino, AWS Lambda - Invoke. Selecciona tu función en el desplegable. En Carga (payload) puedes dejar
{}o pasar datos que la función lea del evento, por ejemplo{"modo": "nocturno"}: así la misma función puede hacer cosas distintas según quién la llame.Permisos y reintentos
En Configuración, deja Crear un rol nuevo para esta programación: Scheduler le dará exactamente el permiso de invocar esa función. En la política de reintentos, 2 o 3 reintentos están bien para una tarea que no pasa nada por repetir; para una que envía correos, pon 0 para no enviar dos veces. Deja la acción tras completarse en NINGUNA (la programación recurrente no se borra). Siguiente, revisa y Crear programación.
Comprueba la primera ejecución
Al día siguiente (o pon una ejecución de prueba dentro de cinco minutos y luego cámbiala), abre la función, pestaña Monitorizar: la gráfica de invocaciones debe mostrar una a la hora programada, y Ver registros de CloudWatch enseña lo que escribió. Si no hay nada, mira la programación en Scheduler: su estado debe ser "Habilitada" y la pestaña de detalles muestra la última ejecución y si falló.
Qué puede salir mal
No se ejecutó a la hora que puse
Dejaste la zona horaria en UTC: en invierno es una hora menos que en España, en verano dos. Edita la programación y elige Europe/Madrid. O la expresión cron tiene los campos cambiados: en AWS el orden es minuto, hora, día del mes, mes, día de la semana, año, y uno de los dos "día" debe ser ?.
Se ejecuta pero la función falla
El problema es la función, no el despertador. Mira los registros de CloudWatch: la excepción está ahí. Lo habitual: le falta un permiso para hacer lo que hace (su propio rol de ejecución), o se agota el tiempo de espera.
Se ejecuta dos veces
Reintentos: la primera ejecución falló o tardó demasiado y Scheduler reintentó. Baja los reintentos a 0 si repetir es un problema, y haz que la función no tarde más que su límite.
Quiero parar la tarea unos días
En Scheduler, selecciona la programación y Deshabilitar. Se queda guardada; la vuelves a habilitar cuando quieras. No hace falta borrarla.
En Simplio
En Simplio cada función Lambda muestra su última ejecución, si fue bien y qué escribió, y programarla es elegir "cada día", "cada semana" o "cada mes" y una hora en tu zona horaria: Simplio crea la programación y el permiso. Si una ejecución falla, te avisa por correo. Y puedes ejecutarla ahora mismo con un botón y ver la respuesta, sin salir de la pantalla.
Lo mismo, en AWS y en Simplio
| En la consola de AWS | En Simplio | |
|---|---|---|
| Programar la función | EventBridge Scheduler: expresión cron, zona horaria, destino, rol, reintentos: 6 pasos | En la función: "cada día a las 3:00" en un desplegable y una hora, en tu zona horaria |
| Saber si se ejecutó | Gráfica de Monitorizar y registros de CloudWatch | Última ejecución, resultado y registros en la tarjeta de la función; aviso por correo si falla |
| Probarla a mano | Botón Probar en Lambda con un evento JSON | Botón Ejecutar ahora, con la respuesta y los registros en la misma pantalla |