Ci sono attività che non lancia nessuno: avvengono ogni notte. Cancellare file temporanei, inviare il riepilogo della giornata, controllare che un sito risponda, fare una copia. Su un server classico si usava il cron; in AWS, quando l'attività è un piccolo programma, il modo pulito è una funzione Lambda (il codice) più un pianificatore (la sveglia) che la chiami all'ora che dici tu. Il pianificatore si chiama EventBridge Scheduler ed è in pratica gratuito per poche esecuzioni al giorno. Questa guida collega le due cose.
Prima di iniziare: cosa significa ogni cosa
- Funzione Lambda
- Un pezzo di codice tuo salvato in Amazon che viene eseguito quando qualcosa lo chiama. Paghi per esecuzione, non per tenere niente acceso.
- EventBridge Scheduler
- La sveglia di AWS: esegue un'azione (per esempio, chiamare la tua funzione) agli orari che programmi.
- Pianificazione
- Ogni "sveglia" del pianificatore: quando e chi chiamare.
- Espressione cron
- Il modo classico di scrivere orari ripetitivi con numeri: minuto, ora, giorno del mese, mese, giorno della settimana. La guida ti dà le espressioni già pronte.
- Fuso orario
- Scheduler permette di scegliere il tuo (Europe/Madrid), così le 3:00 sono le 3:00 anche con il cambio dell'ora.
- Ruolo di esecuzione
- Il permesso di cui la sveglia ha bisogno per chiamare la tua funzione. Scheduler lo crea da solo se glielo chiedi.
- CloudWatch Logs
- Dove la funzione scrive il suo diario ogni volta che viene eseguita. È così che verifichi che ha funzionato.
Passo dopo passo
Prepara la funzione perché funzioni senza nessuno davanti
Apri la funzione nella console di Lambda e provala con il pulsante Test con un evento vuoto (
{}): deve terminare senza errori. Se ha bisogno di dati (una password, un indirizzo), mettili nelle variabili d'ambiente della funzione (Configuration), non nel codice. E controlla il timeout (General configuration): se l'attività impiega due minuti e il limite è tre secondi, fallirà ogni notte.Apri il pianificatore
Cerca Amazon EventBridge nella console e, nel menu a sinistra, Scheduler, Schedules, Create schedule. Nome:
limpieza-nocturna. Gruppo: quello predefinito.Di' quando
Schema: Recurring schedule, tipo Cron-based schedule. Per ogni notte alle 3:00:
cron(0 3 * * ? *)Per le 8:00 dal lunedì al venerdì:
cron(0 8 ? * MON-FRI *). Per il giorno 1 di ogni mese alle 7:00:cron(0 7 1 * ? *). Sotto, Time zone: scegli il tuo (Europe/Madrid). La schermata ti mostra le prossime dieci esecuzioni perché tu verifichi che siano quelle che ti aspetti. Finestra flessibile: Off se vuoi l'ora esatta.Di' chi chiamare
Destinazione: Templated targets, AWS Lambda - Invoke. Seleziona la tua funzione dal menu a tendina. In Payload puoi lasciare
{}o passare dati che la funzione legga dall'evento, per esempio{"modo": "nocturno"}: così la stessa funzione può fare cose diverse a seconda di chi la chiama.Permessi e nuovi tentativi
In Settings, lascia Create new role for this schedule: Scheduler gli darà esattamente il permesso di invocare quella funzione. Nella retry policy, 2 o 3 tentativi vanno bene per un'attività che non ha problemi a ripetersi; per una che invia email, metti 0 per non inviare due volte. Lascia l'azione dopo il completamento su NONE (la pianificazione ricorrente non si cancella). Avanti, rivedi e Create schedule.
Verifica la prima esecuzione
Il giorno dopo (oppure imposta un'esecuzione di prova tra cinque minuti e poi cambiala), apri la funzione, scheda Monitor: il grafico delle invocazioni deve mostrarne una all'ora programmata, e View CloudWatch logs mostra quello che ha scritto. Se non c'è niente, guarda la pianificazione in Scheduler: il suo stato deve essere "Enabled" e la scheda dei dettagli mostra l'ultima esecuzione e se è fallita.
Cosa può andare storto
Non è stata eseguita all'ora che ho messo
Hai lasciato il fuso orario su UTC: in inverno è un'ora in meno rispetto alla Spagna, in estate due. Modifica la pianificazione e scegli Europe/Madrid. Oppure l'espressione cron ha i campi invertiti: in AWS l'ordine è minuto, ora, giorno del mese, mese, giorno della settimana, anno, e uno dei due "giorno" deve essere ?.
Viene eseguita ma la funzione fallisce
Il problema è la funzione, non la sveglia. Guarda i log di CloudWatch: l'eccezione è lì. Di solito: le manca un permesso per fare quello che fa (il suo ruolo di esecuzione), oppure va in timeout.
Viene eseguita due volte
Nuovi tentativi: la prima esecuzione è fallita o ha impiegato troppo e Scheduler ha riprovato. Abbassa i tentativi a 0 se ripetere è un problema, e fai in modo che la funzione non impieghi più del suo limite.
Voglio fermare l'attività per qualche giorno
In Scheduler, seleziona la pianificazione e Disable. Resta salvata; la riabiliti quando vuoi. Non serve cancellarla.
In Simplio
In Simplio ogni funzione Lambda mostra la sua ultima esecuzione, se è andata bene e cosa ha scritto, e programmarla è scegliere "ogni giorno", "ogni settimana" o "ogni mese" e un'ora nel tuo fuso orario: Simplio crea la pianificazione e il permesso. Se un'esecuzione fallisce, ti avvisa via email. E puoi eseguirla subito con un pulsante e vedere la risposta, senza uscire dalla schermata.
La stessa cosa, in AWS e in Simplio
| Nella console di AWS | In Simplio | |
|---|---|---|
| Programmare la funzione | EventBridge Scheduler: espressione cron, fuso orario, destinazione, ruolo, tentativi: 6 passi | Nella funzione: "ogni giorno alle 3:00" in un menu a tendina e un'ora, nel tuo fuso orario |
| Sapere se è stata eseguita | Grafico di Monitor e log di CloudWatch | Ultima esecuzione, risultato e log nella scheda della funzione; avviso via email se fallisce |
| Provarla a mano | Pulsante Test in Lambda con un evento JSON | Pulsante Esegui ora, con la risposta e i log nella stessa schermata |