Avez-vous déjà voulu programmer une Lambda pour qu’elle s’exécute régulièrement, pour découvrir qu’il n’y a pas de moyen intégré de le faire ? Il est surprenant que cette fonctionnalité ne fasse pas partie de l’offre AWS Lambda. Un simple planificateur de style cron ou même un exécuteur de tâches de base était malheureusement absent de l’offre initiale.
Cela a forcé beaucoup d’entre nous à exécuter des planificateurs à partir d’autres endroits, peut-être même d’autres fonctions Lambda. Cela double non seulement la charge de travail, mais rend également tout un peu plus fragile. Ce n’est pas tout à fait sans serveur si vous devez exécuter un autre service de planificateur persistant quelque part.
La bonne nouvelle est qu’Amazon a récemment ajouté une nouvelle fonctionnalité à EventBridge appelé « Planificateur”. Cette fonctionnalité vous permet de configurer des planifications récurrentes de type cron. Chaque planification est capable de lancer un certain nombre de services de catalogue AWS, y compris Lambda.
Dans cet article, nous allons explorer comment configurer EventBridge pour exécuter une fonction Lambda selon un calendrier régulier. Désormais, vos planifications peuvent être aussi simples que vos fonctions Lambda.
Une chose à propos d’EventBridge est que le planificateur ne peut être configuré que dans certaines régions. Vous ne pourrez pas cibler Lambdas dans d’autres régions. Assurez-vous que votre Lambda et votre planificateur se trouvent dans la même région lorsque vous les configurez.
Vous trouverez ci-dessous la liste actuelle des régions EventBridge Scheduler prises en charge :
- nous-est-1
- nous-est-2
- nous-ouest-2
- ap-sud-est-1
- ap-sud-est-2
- ap-nord-est-1
- eu-central-1
- eu-ouest-1
- eu-nord-1
Vérifiez documentation officielle du planificateur pour toute mise à jour ou modification de cette liste.
Pour cet exemple, construisons une simple fonction Python Lambda qui imprime simplement une sortie :
def lambda_handler(event, context):
print('hello!')
C’est extrêmement simple mais nous donne une fonction à exécuter et à confirmer que notre programme se déclenche effectivement au bon moment. Pour votre propre fonction, vous pouvez contrôler des instances EC2, exécuter des scripts de sauvegarde réguliers ou même prendre des instantanés d’objets.
Allez-y, déployez cette fonction simple et confirmez qu’elle fonctionne normalement. Nous n’aurons pas grand-chose d’autre à faire avec la fonction elle-même pour l’instant.
Maintenant que nous avons un Lambda à utiliser, nous pouvons commencer à configurer notre calendrier. Cela peut être un peu intimidant au début car il y a beaucoup d’options, mais c’est en fait très simple. Vous n’en aurez probablement pas besoin de beaucoup de toute façon.
Créez un nouveau calendrier EventBridge et fournissez le nom de base et d’autres informations descriptives. Dans la section modèle, vous pouvez soit créer un horaire unique, soit un horaire récurrent. Une planification récurrente utilisera un modèle de style cron pour déclencher les événements comme le ferait une crontab normale.
Maintenant, tout ce que vous avez à faire est de fournir l’expression cron sur laquelle vous souhaitez que la planification s’exécute. Si vous avez besoin d’aide pour choisir le bon modèle, vous pouvez utiliser Crotab Gourou. Ce site aide à décomposer les expressions cron pour faciliter leur composition.
Maintenant, configurons les cibles pour ce calendrier.
Sur la page suivante, vous pouvez sélectionner une cible. Cette section vous permet de choisir parmi une grande partie du catalogue AWS :
Sélectionnez l’API AWS Lambda, votre fonction dans la liste déroulante, puis configurez la charge utile souhaitée à transmettre à votre fonction :
Ici, nous ne faisons que transmettre des données de test dans la charge utile puisque notre fonction ne l’utilise pas. Si vous déployiez une fonction réelle, vous pourriez manipuler le même Lambda en utilisant différentes charges utiles sur différentes planifications. Cela facilite l’utilisation d’une seule fonction avec plusieurs horaires.
Ensuite, nous examinerons quelques-unes des options de configuration restantes.
Sur la page suivante, vous pouvez configurer la logique de nouvelle tentative et la mise en file d’attente pour les événements non livrés. Ceci est particulièrement utile pour d’autres services où des événements à volume élevé peuvent être abandonnés, mais moins pour notre fonction régulièrement planifiée.
Pour l’instant, nous pouvons simplement laisser la logique de nouvelle tentative seule ou la désactiver complètement. Dans certains cas, il peut ne pas être judicieux de réessayer des événements s’ils ne sont pas livrés.
Quel que soit le calendrier que vous configurez, vous risquez de manquer une fenêtre cruciale lors du premier essai et une livraison tardive peut entraîner des interruptions de service ou d’autres effets secondaires indésirables. Assurez-vous de connaître le comportement de votre fonction si elle est appelée plusieurs fois en succession rapide. Vous pouvez également rendre la fonction idempotente afin qu’elle ne produise pas d’erreur à partir d’exécutions en double.
Vers la fin de la même page, vous trouverez la section des autorisations. Dans la plupart des cas, il suffit de créer automatiquement un nouveau rôle. Cela configurera les autorisations par défaut pour EventBridge.
Si vous rencontrez des problèmes avec des autorisations plus restrictives sur votre Lambda ciblé, vous devrez peut-être ajuster la stratégie répertoriée ici ou lui en attribuer une nouvelle.
Sur la dernière page, vous pouvez revoir l’ensemble de la configuration planifiée. Cette page contient également une section de révision des expressions cron très pratique. Cette section affiche les 10 prochaines dates de déclenchement pour le calendrier d’entrée.
Ceci est utile pour confirmer et, si nécessaire, peaufiner votre expression cron. De plus, il est important de se rappeler que la date et l’heure indiquées sur les dates de déclenchement sont en fait dans le fuseau horaire local indiqué sur la page de configuration initiale de l’expression cron.
Si vous remarquez quelque chose qui n’est pas à sa place avec les dates de déclenchement (comme le fuseau horaire), revenez simplement à la configuration de la planification et modifiez l’expression ou le fuseau horaire.
Une fois que tout semble correct, enregistrez le programme et profitez du bonheur récurrent de la fonction Lambda.
L’utilisation d’EventBridge Scheduler pour déclencher les fonctions Lambda est la pièce manquante d’une configuration de tâches robuste et récurrente. La configuration ne prend que quelques minutes et apporter des modifications aux horaires est tout aussi simple.
Aucun code ne s’engage, pas de gestion cron vous-même, juste la même simplicité sans serveur.