Il y a des tâches que personne ne lance : elles se produisent chaque nuit. Supprimer des fichiers temporaires, envoyer le résumé de la journée, vérifier qu'un site répond, faire une copie. Sur un serveur classique, on utilisait le cron ; chez AWS, quand la tâche est un petit programme, la façon propre est une fonction Lambda (le code) plus un planificateur (le réveil) qui l'appelle à l'heure que vous indiquez. Le planificateur s'appelle EventBridge Scheduler et il est gratuit en pratique pour quelques exécutions par jour. Ce guide relie les deux.
Avant de commencer : ce que signifie chaque chose
- Fonction Lambda
- Un morceau de code à vous stocké chez Amazon qui s'exécute quand quelque chose l'appelle. Vous payez à l'exécution, pas pour avoir quelque chose d'allumé.
- EventBridge Scheduler
- Le réveil d'AWS : il exécute une action (par exemple, appeler votre fonction) aux heures que vous programmez.
- Planification
- Chaque « alarme » du réveil : quand et qui appeler.
- Expression cron
- La façon classique d'écrire des horaires répétitifs avec des chiffres : minute, heure, jour du mois, mois, jour de la semaine. Le guide vous donne les expressions toutes faites.
- Fuseau horaire
- Scheduler permet de choisir le vôtre (Europe/Madrid), donc 3 h 00 reste 3 h 00 même avec le changement d'heure.
- Rôle d'exécution
- La permission dont le réveil a besoin pour appeler votre fonction. Scheduler le crée tout seul si vous le lui demandez.
- CloudWatch Logs
- Là où la fonction écrit son journal à chaque exécution. C'est ainsi que vous vérifiez qu'elle a fonctionné.
Pas à pas
Préparez la fonction pour qu'elle fonctionne sans personne devant
Ouvrez la fonction dans la console Lambda et testez-la avec le bouton Tester et un événement vide (
{}) : elle doit se terminer sans erreur. Si elle a besoin de données (un mot de passe, une adresse), mettez-les dans les variables d'environnement de la fonction (Configuration), pas dans le code. Et vérifiez le délai d'expiration (Configuration générale) : si la tâche prend deux minutes et que la limite est de trois secondes, elle échouera chaque nuit.Ouvrez le planificateur
Cherchez Amazon EventBridge dans la console et, dans le menu de gauche, Planificateur, Planifications, Créer une planification. Nom :
limpieza-nocturna. Groupe : celui par défaut.Dites quand
Modèle : Planification récurrente, type Planification basée sur cron. Pour chaque nuit à 3 h 00 :
cron(0 3 * * ? *)Pour 8 h 00 du lundi au vendredi :
cron(0 8 ? * MON-FRI *). Pour le 1er de chaque mois à 7 h 00 :cron(0 7 1 * ? *). En dessous, Fuseau horaire : choisissez le vôtre (Europe/Madrid). L'écran vous montre les dix prochaines exécutions pour que vous vérifiiez que ce sont bien celles que vous attendez. Fenêtre flexible : Désactivée si vous voulez l'heure exacte.Dites qui appeler
Cible : Modèles de cible, AWS Lambda - Invoke. Sélectionnez votre fonction dans la liste déroulante. Dans Charge utile (payload), vous pouvez laisser
{}ou passer des données que la fonction lira dans l'événement, par exemple{"modo": "nocturno"}: ainsi la même fonction peut faire des choses différentes selon qui l'appelle.Permissions et nouvelles tentatives
Dans Paramètres, laissez Créer un nouveau rôle pour cette planification : Scheduler lui donnera exactement la permission d'invoquer cette fonction. Dans la stratégie de nouvelles tentatives, 2 ou 3 tentatives conviennent pour une tâche qu'on peut répéter sans conséquence ; pour une tâche qui envoie des courriels, mettez 0 pour ne pas envoyer deux fois. Laissez l'action après l'achèvement sur AUCUNE (la planification récurrente ne se supprime pas). Suivant, vérifiez et Créer une planification.
Vérifiez la première exécution
Le lendemain (ou programmez une exécution de test dans cinq minutes, puis changez-la), ouvrez la fonction, onglet Surveiller : le graphique des invocations doit en montrer une à l'heure programmée, et Afficher les journaux CloudWatch montre ce qu'elle a écrit. S'il n'y a rien, regardez la planification dans Scheduler : son état doit être « Activée » et l'onglet des détails montre la dernière exécution et si elle a échoué.
Ce qui peut mal tourner
Elle ne s'est pas exécutée à l'heure que j'ai mise
Vous avez laissé le fuseau horaire en UTC : en hiver, c'est une heure de moins qu'en Espagne, en été deux. Modifiez la planification et choisissez Europe/Madrid. Ou l'expression cron a les champs inversés : chez AWS, l'ordre est minute, heure, jour du mois, mois, jour de la semaine, année, et l'un des deux « jour » doit être ?.
Elle s'exécute mais la fonction échoue
Le problème vient de la fonction, pas du réveil. Regardez les journaux CloudWatch : l'exception y est. Le plus courant : il lui manque une permission pour faire ce qu'elle fait (son propre rôle d'exécution), ou le délai d'expiration est dépassé.
Elle s'exécute deux fois
Nouvelles tentatives : la première exécution a échoué ou a pris trop de temps et Scheduler a réessayé. Baissez les tentatives à 0 si répéter pose problème, et faites en sorte que la fonction ne dépasse pas sa limite de temps.
Je veux arrêter la tâche quelques jours
Dans Scheduler, sélectionnez la planification et Désactiver. Elle reste enregistrée ; vous la réactivez quand vous voulez. Pas besoin de la supprimer.
Dans Simplio
Dans Simplio, chaque fonction Lambda affiche sa dernière exécution, si elle s'est bien passée et ce qu'elle a écrit, et la programmer consiste à choisir « chaque jour », « chaque semaine » ou « chaque mois » et une heure dans votre fuseau horaire : Simplio crée la planification et la permission. Si une exécution échoue, vous êtes prévenu par courriel. Et vous pouvez l'exécuter tout de suite avec un bouton et voir la réponse, sans quitter l'écran.
La même chose, dans AWS et dans Simplio
| Dans la console AWS | Dans Simplio | |
|---|---|---|
| Programmer la fonction | EventBridge Scheduler : expression cron, fuseau horaire, cible, rôle, tentatives : 6 étapes | Sur la fonction : « chaque jour à 3 h 00 » dans une liste déroulante et une heure, dans votre fuseau horaire |
| Savoir si elle a tourné | Graphique de Surveiller et journaux CloudWatch | Dernière exécution, résultat et journaux sur la carte de la fonction ; avis par courriel en cas d'échec |
| La tester à la main | Bouton Tester dans Lambda avec un événement JSON | Bouton Exécuter maintenant, avec la réponse et les journaux sur le même écran |