12 Giorni di DigitalOcean (Giorno 5) – Automatizzare i Promemoria di Compleanno con Trigger Giornalieri

Benvenuto a Giorno 5 di 12 Giorni di DigitalOcean! Ieri, hai configurato il tuo Servizio di Promemoria per Compleanni per funzionare su DigitalOcean Functions, il che significa che ora è senza server e pronto per il cloud. 🎉 Oggi, farai un passo avanti automatizzandolo per farlo funzionare secondo un programma autonomo—senza input manuale necessario.

Entro la fine di questa guida, il tuo servizio (o qualsiasi altra funzione su cui stai lavorando) verrà eseguito automaticamente a un orario stabilito ogni giorno. Questo significa che non dovrai più ricordarti di attivarlo tu stesso—funzionerà da solo.

Perché Automatizzare?

Distribuire la tua funzione nel cloud è stata una grande vittoria ieri, ma doverla eseguire manualmente contraddice il concetto di automazione. L’argomento di oggi è sulla pianificazione del servizio per farlo funzionare automaticamente—come un orologio—così puoi impostarlo e dimenticartene. DigitalOcean Functions ha una pianificazione integrata utilizzando Trigger per questo scopo preciso, e hai due modi per configurarlo.

🚀 Cosa imparerai

Entro la fine di oggi, saprai come:

  1. Impostare un trigger giornaliero per eseguire automaticamente la tua funzione.
  2. Imparare due modi per farlo, attraverso il Pannello di Controllo di DigitalOcean o con il doctl CLI e project.yml.
  3. Testare la configurazione per assicurarti che funzioni.

🛠 Cosa ti serve

Prima di iniziare, assicurati di avere quanto segue:

  1. Una funzione già distribuita su DigitalOcean (ad esempio, il Servizio di Promemoria di Compleanno del Giorno 4: Costruzione di un Servizio di Promemoria di Compleanno) da automatizzare con trigger.
  2. Se utilizzi il doctl CLI, avrai bisogno del file project.yml per la tua funzione. Puoi consultare Giorno 4 per istruzioni su come installare e configurare il doctl CLI e creare il file project.yml.

🧑‍🍳 Ricetta per il Giorno 5: Automazione delle Funzioni con Trigger

Passo 1: Configura un Trigger per la tua Funzione

DigitalOcean ti offre due opzioni per configurare i trigger:

  1. Opzione 1: Usa il Pannello di Controllo per una configurazione rapida e semplice.
  2. Opzione 2: Usa il doctl CLI per un controllo più robusto e programmatico.

Attenzione: Ricorda che i trigger creati nel Pannello di Controllo vengono persi se ridistribuisci la funzione utilizzando la CLI. Se prevedi di ridistribuire spesso, usa Opzione 2 per aggiungere i trigger direttamente al file project.yml.

Opzione 1: Utilizzare il Pannello di Controllo per Creare un Trigger

Il modo più semplice per impostare un trigger è tramite il Pannello di Controllo di DigitalOcean. È veloce, non richiede configurazioni e è ideale per configurazioni semplici e una tantum.

  • Naviga verso la pagina principale delle Funzioni nel pannello di controllo di DigitalOcean.
  • Trova la tua funzione (ad esempio, reminders/birthdays) e fai clic sulla scheda Trigger.

  • Fai clic su Crea Trigger, aggiungi un Nome per il tuo trigger. Può essere qualsiasi cosa descrittiva, come daily-birthday-trigger. Il nome deve contenere solo caratteri alfanumerici, trattini e punti.
  • Aggiungi un espressione cron per impostare il programma. Ad esempio, 0 9 * * * significa che la funzione verrà eseguita ogni giorno alle 9:00 AM.

Nota: Non sei sicuro di come funzioni cron? Controlla crontab.guru per una guida utile.

  • Salva il trigger.

Una volta creato il tuo trigger, è una buona idea testarlo per assicurarti che tutto funzioni come previsto. Vai alla sezione Testare l’Automazione qui sotto per scoprire come.

Avviso: Anche se il cruscotto è semplice ed efficace, eventuali trigger che crei qui verranno sovrascritti o eliminati se ridistribuisci la funzione utilizzando la CLI. Per aggiornamenti frequenti o distribuzioni programmatiche, salta a Opzione 2.

Opzione 2: Utilizzando la doctl CLI con project.yml

Puoi anche creare trigger aggiungendoli direttamente al tuo file project.yml. Questo metodo è più affidabile per ridistribuzioni frequenti perché garantisce che i tuoi trigger siano sempre inclusi nella configurazione della funzione. A differenza dell’opzione del Pannello di Controllo descritta in precedenza, questo approccio impedisce che i trigger vengano sovrascritti o persi durante le ridistribuzioni.

Ecco come puoi configurarlo:

  • Apri il tuo project.yml file da Giorno 4: Distribuzione delle Notifiche di Compleanno con le Funzioni di DigitalOcean. Potrebbe apparire qualcosa del genere:

    packages:
      - name: reminders
        shared: false
        environment:
          DO_DB_NAME: "${DB_NAME}"
          DO_DB_USER: "${DB_USER}"
          DO_DB_PASSWORD: "${DB_PASSWORD}"
          DO_DB_HOST: "${DB_HOST}"
          DO_DB_PORT: "${DB_PORT}"
          TWILIO_ACCOUNT_SID: "${TWILIO_ACCOUNT_SID}"
          TWILIO_AUTH_TOKEN: "${TWILIO_AUTH_TOKEN}"
          TWILIO_PHONE_FROM: "${TWILIO_PHONE_FROM}"
          TWILIO_PHONE_TO: "${TWILIO_PHONE_TO}"
        functions:
          - name: birthdays
            runtime: python:default
    
  • Aggiungi una sezione triggers alla configurazione della tua funzione per definire l’orario:

    triggers:
      - name: daily-birthday-trigger
        sourceType: scheduler
        sourceDetails:
        cron: "0 9 * * *"
    
  • File project.yml aggiornato:

    packages:
      - name: reminders
        shared: false
        environment:
          DO_DB_NAME: "${DB_NAME}"
          DO_DB_USER: "${DB_USER}"
          DO_DB_PASSWORD: "${DB_PASSWORD}"
          DO_DB_HOST: "${DB_HOST}"
          DO_DB_PORT: "${DB_PORT}"
          TWILIO_ACCOUNT_SID: "${TWILIO_ACCOUNT_SID}"
          TWILIO_AUTH_TOKEN: "${TWILIO_AUTH_TOKEN}"
          TWILIO_PHONE_FROM: "${TWILIO_PHONE_FROM}"
          TWILIO_PHONE_TO: "${TWILIO_PHONE_TO}"
        functions:
          - name: birthdays
            runtime: python:default
            triggers:
              - name: daily-birthday-trigger
                sourceType: scheduler
                sourceDetails:
                  cron: "0 9 * * *"
    

    Questo dice a DigitalOcean di eseguire la funzione birthdays tutti i giorni alle 9:00 del mattino.

    1. triggers sezione: Definisce il nome, il tipo e l’orario del trigger. Puoi dare al tuo trigger un nome descrittivo, come daily-birthday-trigger.

    2. cron: Specifica l’orario in cui la funzione verrà eseguita quotidianamente in UTC. L’espressione cron 0 9 * * * ad esempio, pianifica l’esecuzione della funzione tutti i giorni alle 9:00 del mattino.

  • Salva il file e distribuiscilo eseguendo il comando seguente dalla directory che contiene la cartella my-birthday-reminder-service:

    doctl serverless deploy my-birthday-reminder-service
    

    Importante: Assicurati di eseguire il comando dalla directory principale, non all’interno della cartella my-birthday-reminder-service. Eseguirlo dalla posizione sbagliata può causare un errore del tipo:

    ❯ doctl serverless deploy my-birthday-reminder-service
    Error: ENOENT: no such file or directory, lstat
    
  • Una volta completata con successo la distribuzione, vedrai un messaggio di conferma simile a questo:

    Funzioni distribuite
      - reminders/birthdays
    Trigger distribuiti:
      - daily-birthday-trigger
    

  • Vai al tuo cruscotto per verificare che il trigger sia stato creato nella sezione Funzioni.

Suggerimento professionale: Per testare il tuo trigger, imposta temporaneamente l’espressione cron a pochi minuti da adesso (ad esempio, 28 9 * * * se sono le 9:25). Dopo aver confermato che funziona, ripristina l’orario pianificato e rilascia nuovamente.

Passo 2: Testare l’Automazione

Testiamo i tuoi trigger per assicurarci che funzionino. Invece di aspettare che si attivino secondo il solito orario, puoi temporaneamente impostarli per eseguirsi tra pochi minuti. Ecco come fare:

  • Imposta l’espressione cron per il tuo trigger a pochi minuti dall’orario attuale (in UTC). Ad esempio, se sono le 9:25 UTC, imposta l’espressione cron su 28 9 * * * in modo che la funzione si avvii alle 9:28 UTC.

    Nota: Non sei sicuro di come convertire il tuo orario locale in UTC? Strumenti come Convertitore di Fusi Orari possono aiutarti.

  • Salva il trigger aggiornato (se utilizzi il Pannello di Controllo) o ridistribuisci il tuo file project.yml aggiornato (se utilizzi la CLI):

    doctl serverless deploy my-birthday-reminder-service
    
  • Attendi che il trigger venga eseguito, poi controlla i log di attivazione per confermare che la funzione sia stata eseguita con successo:

    doctl serverless activations logs --function reminders/birthdays --last
    

Nota: I log di attivazione registrano dettagli su quando la tua funzione è stata eseguita, inclusa l’indicazione se è stata eseguita con successo o ha incontrato errori. Sono un modo utile per verificare che il tuo trigger sia scattato all’orario programmato.

Questo comando restituirà i dettagli dell’ultima attivazione della tua funzione. Ad esempio, potresti vedere qualcosa del genere:

=== 59e8e4f482874d79a8e4f48287dd79ef success 12/23 07:46:33 reminders/birthdays:0.0.6
2024-12-23T07:46:33.323205805Z stdout: Message sent for Charlie Brown. Message SID: SM85f5caeb3ec09239e0d8bdaaba2b158b

Questo conferma che il trigger è scattato e la funzione è stata attivata con successo! 🎉

Nota: Una volta verificato che tutto funziona, aggiorna l’espressione cron secondo il tuo programma previsto (ad esempio, 0 9 * * * per le 9:00 AM UTC giornalmente) e salva o ridistribuisci.

Una nota veloce sui log

Mentre il comando log di attivazione è un ottimo modo per controllare le esecuzioni recenti, a volte avrai bisogno di log più dettagliati per eseguire debug o indagare su problemi con la tua funzione. DigitalOcean offre anche opzioni per inoltrare questi log a servizi di logging esterni, rendendo più facile nel tempo il monitoraggio e la risoluzione dei problemi della tua applicazione.

Il Giorno 6, imparerai a visualizzare i log direttamente, interpretarli in modo efficace e configurare l’inoltro dei log verso servizi esterni come Logtail o Papertrail. Questi strumenti ti aiuteranno a rimanere facilmente aggiornato sulle prestazioni della tua funzione.

🎁 Riepilogo

Ecco cosa hai realizzato oggi:

  1. Hai automatizzato il tuo Servizio di Promemoria per Compleanni (o qualsiasi altra funzione) per eseguire quotidianamente.
  2. Hai imparato due modi per impostare i trigger: tramite il Pannello di Controllo e con il CLI doctl.
  3. Hai testato la tua configurazione per assicurarti che funzioni come previsto.

Ecco i precedenti tutorial di questa serie:

Prossimo: Ora che il tuo servizio funziona in modo indipendente, il passo successivo è monitorarlo efficacemente. Nel prossimo tutorial, imparerai come visualizzare i log delle tue funzioni e inoltrarli a servizi esterni per semplificare il tracciamento e la risoluzione dei problemi. Ci vediamo allora!

Source:
https://www.digitalocean.com/community/tutorials/automating-birthday-reminders-with-triggers