Guide · AWS
Surveiller AWS Lambda (planifié / cron) avec un interrupteur homme mort
CloudWatch vous montre les erreurs d'invocation, mais pas l'invocation qui n'a jamais eu lieu : une règle EventBridge désactivée, une expression cron cassée, une permission retirée par erreur. Un check-in attrape aussi ce silence, avec un seul appel HTTPS depuis le handler, sans agent ni SDK à installer.
1. Créez un check
Créez un check dans Mortemain, réglez sa planification sur celle de votre règle EventBridge ou de votre expression Scheduler, et copiez l'URL de ping :
https://ping.mortemain.com/your-check-uuid
2. Faites le check-in en cas de succès depuis le handler
Rien à installer : la bibliothèque standard Python urllib.request suffit pour l'appel HTTPS. Faites le check-in une fois la logique du job terminée sans exception :
import urllib.request PING_URL = "https://ping.mortemain.com/your-check-uuid" def handler(event, context): do_the_work() # votre job urllib.request.urlopen(PING_URL, timeout=10)
Sur un runtime Node.js, le fetch global (Node 18+) fait la même chose sans dépendance :
export const handler = async (event) => { await doTheWork(); // votre job await fetch("https://ping.mortemain.com/your-check-uuid"); };
3. Alertez immédiatement en cas d'échec
Entourez le travail d'un try/except et appelez l'URL /fail avant de relever l'exception. Un plantage ou une exception non gérée déclenche alors une alerte immédiate au lieu d'attendre que le check reste silencieux :
import urllib.request PING_URL = "https://ping.mortemain.com/your-check-uuid" def handler(event, context): try: do_the_work() except Exception: urllib.request.urlopen(PING_URL + "/fail", timeout=10) raise else: urllib.request.urlopen(PING_URL, timeout=10)
Une fonction qui expire ou qui est tuée pour dépassement de mémoire n'atteint aucun des deux appels, et c'est très bien ainsi : Mortemain alerte une fois la fenêtre de grâce dépassée, exactement comme pour une règle qui aurait cessé de se déclencher. Un point à vérifier d'abord : une Lambda rattachée à un VPC a besoin d'une route vers Internet (une passerelle NAT, ou un sous-réseau public avec IGW) pour joindre ping.mortemain.com ; sans sortie internet, même une exécution réussie ne peut pas faire le check-in.
4. Planifiez-la et faites correspondre la période
Déclenchez la fonction sur une expression cron ou rate avec EventBridge Scheduler (ou une règle CloudWatch Events classique) :
aws scheduler create-schedule \ --name nightly-report \ --schedule-expression "cron(0 3 * * ? *)" \ --flexible-time-window '{"Mode": "OFF"}' \ --target '{"Arn": "arn:aws:lambda:eu-west-1:123456789012:function:nightly-report", "RoleArn": "arn:aws:iam::123456789012:role/scheduler-invoke-lambda"}'
Réglez la planification du check sur cette même expression cron(0 3 * * ? *), pour détecter aussi bien une règle désactivée, un déploiement raté ou une panne du scheduler qu'une simple erreur de code. Vous voulez mesurer la durée de l'invocation ? Appelez …/your-check-uuid/start en toute première ligne du handler et Mortemain calculera la durée jusqu'au ping de succès.
Testez
Invoquez la fonction une fois (aws lambda invoke, ou un déclenchement manuel depuis la console) et vérifiez que le check passe actif. Puis forcez une exception et vérifiez que le ping /fail se déclenche et que l'alerte arrive immédiatement.