12 Dagen van DigitalOcean (Dag 5) – Verjaardagsherinneringen Automatiseren met Dagelijkse Triggers

Welkom bij Dag 5 van 12 Dagen van DigitalOcean! Gisteren heb je je Verjaardagsherinneringsdienst opgezet om te draaien op DigitalOcean Functions, wat betekent dat het nu serverless en cloud-klaar is. 🎉 Vandaag ga je een stap verder door het te automatiseren zodat het op zijn eigen schema draait—geen handmatige invoer nodig.

Aan het einde van deze gids zal je dienst (of elke andere functie waaraan je werkt) automatisch op een vastgesteld tijdstip elke dag draaien. Dat betekent geen herinneringen meer om het zelf te activeren—het werkt gewoon.

Waarom Automatiseren?

Je functie naar de cloud implementeren was gisteren een grote overwinning, maar het handmatig draaien ervan ondermijnt het doel van automatisering. De focus van vandaag ligt op het plannen van de dienst zodat deze automatisch draait—als een klok—zodat je het kunt instellen en vergeten. DigitalOcean Functions heeft ingebouwde planning met behulp van Triggers voor dit specifieke doel, en je hebt twee manieren om het in te stellen.

🚀 Wat Je Zult Leren

Aan het einde van vandaag weet je hoe je:

  1. Een dagelijkse trigger instelt om je functie automatisch uit te voeren.
  2. Leer twee manieren om dit te doen—via het DigitalOcean Control Panel of met de doctl CLI en project.yml.
  3. Test de setup om te zorgen dat het werkt.

🛠 Wat Je Nodig Hebt

Voordat je begint, zorg ervoor dat je het volgende hebt:

  1. Een functie die al is gedeployd op DigitalOcean (bijv. de Verjaardagsherinneringsdienst van Dag 4: Een Verjaardagsherinneringsdienst Bouwen) om te automatiseren met triggers.
  2. Als je de doctl CLI gebruikt, heb je het project.yml bestand nodig voor je functie. Je kunt Dag 4 bekijken voor instructies over het installeren en instellen van de doctl CLI en het maken van het project.yml bestand.

🧑‍🍳 Recept voor Dag 5: Functies Automatiseren met Triggers

Stap 1: Stel een Trigger In voor je Functie

DigitalOcean biedt je twee opties voor het instellen van triggers:

  1. Optie 1: Gebruik het Control Panel voor een snelle en eenvoudige setup.
  2. Optie 2: Gebruik de doctl CLI voor meer robuuste en programmatische controle.

Waarschuwing: Vergeet niet dat triggers die in het Control Panel zijn gemaakt, verloren gaan als je de functie opnieuw implementeert met de CLI. Als je vaak opnieuw implementeert, gebruik dan Optie 2 om triggers rechtstreeks aan het project.yml bestand toe te voegen.

Optie 1: Gebruik het Control Panel om een Trigger te Maken

De eenvoudigste manier om een trigger in te stellen, is via het DigitalOcean Control Panel. Het is snel, vereist geen configuratie en is ideaal voor eenvoudige eenmalige configuraties.

  • Navigeer naar de hoofd Functies pagina in het DigitalOcean-dashboard.
  • Zoek je functie (bijv. reminders/birthdays) en klik op het Triggers tabblad.

  • Klik op Trigger Maken, voeg een Naam voor je trigger toe. Dit kan iets beschrijvends zijn, zoals daily-birthday-trigger. De naam mag alleen alfanumerieke tekens, koppeltekens en punten bevatten.
  • Voeg een cron-expressie toe om de planning in te stellen. Bijvoorbeeld, 0 9 * * * betekent dat de functie elke dag om 9:00 uur wordt uitgevoerd.

Opmerking: Weet je niet zeker hoe cron werkt? Bekijk crontab.guru voor een handige gids.

  • Sla de trigger op.

Zodra je je trigger hebt gemaakt, is het een goed idee om deze te testen om er zeker van te zijn dat alles werkt zoals verwacht. Ga naar de Test de Automatisering sectie hieronder om te leren hoe.

Waarschuwing: Hoewel het dashboard eenvoudig en effectief is, zullen alle triggers die je hier maakt worden overschreven of verwijderd als je de functie opnieuw implementeert met behulp van de CLI. Voor frequente updates of programmatic deployments, ga door naar Optie 2.

Optie 2: Gebruik van de doctl CLI met project.yml

Je kunt ook triggers maken door ze rechtstreeks aan je project.yml bestand toe te voegen. Deze methode is betrouwbaarder voor frequente herimplementaties omdat het ervoor zorgt dat je triggers altijd zijn opgenomen in de configuratie van de functie. In tegenstelling tot de eerder beschreven optie in het controlepaneel, voorkomt deze benadering dat triggers worden overschreven of verloren gaan tijdens herimplementaties.

Hier is hoe je het kunt instellen:

  • Open je project.yml bestand van Dag 4: Het implementeren van verjaardagmeldingen met DigitalOcean Functions. Het kan er ongeveer zo uitzien:

    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
    
  • Voeg een triggers sectie toe aan je functieconfiguratie om de planning te definiëren:

    triggers:
      - name: dagelijks-verjaardag-trigger
        sourceType: planner
        sourceDetails:
        cron: "0 9 * * *"
    
  • Eind bijgewerkte project.yml bestand:

    packages:
      - name: herinneringen
        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: verjaardagen
            runtime: python:default
            triggers:
              - name: dagelijks-verjaardags-trigger
                sourceType: scheduler
                sourceDetails:
                  cron: "0 9 * * *"
    

    Dit vertelt DigitalOcean om de verjaardagen functie elke dag om 9:00 AM uit te voeren.

    1. triggers sectie: Definieert de naam, type en schema voor de trigger. Je kunt je trigger elke beschrijvende naam geven, zoals dagelijks-verjaardags-trigger.

    2. cron: Geeft de tijd op waarop de functie dagelijks zal draaien in UTC. De cron-expressie 0 9 * * * bijvoorbeeld, plant de functie om elke dag om 9:00 AM uit te voeren.

  • Bewaar het bestand en implementeer het door de volgende opdracht uit te voeren vanuit de map die de my-birthday-reminder-service map bevat:

    doctl serverless deploy my-birthday-reminder-service
    

    Belangrijk: Zorg ervoor dat je de opdracht uitvoert vanuit de bovenliggende map, niet binnen de my-birthday-reminder-service map. Het uitvoeren vanaf de verkeerde locatie kan resulteren in een fout zoals deze:

    ❯ doctl serverless deploy my-birthday-reminder-service
    Fout: ENOENT: geen dergelijk bestand of map, lstat
    
  • Zodra de implementatie succesvol is, zie je een bevestigingsbericht dat lijkt op dit:

    Geïmplementeerde functies
      - herinneringen/verjaardagen
    Geïmplementeerde triggers:
      - dagelijkse-verjaardags-trigger
    

  • Ga naar je dashboard om te verifiëren dat de trigger is aangemaakt onder de Functies sectie.

Pro Tip: Om je trigger te testen, stel je de cron-expressie tijdelijk in op een paar minuten vanaf nu (bijvoorbeeld, 28 9 * * * als het 9:25 AM is). Nadat je hebt bevestigd dat het werkt, zet je het terug naar je beoogde schema en herdeploy.

Stap 2: Test de Automatisering

Laten we je triggers testen om er zeker van te zijn dat ze werken. In plaats van te wachten tot ze op hun gebruikelijke schema afgaan, kun je ze tijdelijk instellen om een paar minuten vanaf nu te draaien. Hier is hoe je dat doet:

  • Stel de cron-expressie voor je trigger in op een paar minuten vanaf de huidige tijd (in UTC). Bijvoorbeeld, als het 9:25 AM UTC is, stel je de cron-expressie in op 28 9 * * * zodat de functie om 9:28 AM UTC draait.

    Opmerking: Niet zeker hoe je je lokale tijd naar UTC kunt converteren? Hulpmiddelen zoals Tijdzone Converter kunnen helpen.

  • Sla de bijgewerkte trigger op (indien u het controlepaneel gebruikt) of herdeploy uw bijgewerkte project.yml bestand (indien u de CLI gebruikt):

    doctl serverless deploy my-birthday-reminder-service
    
  • Wacht tot de trigger wordt uitgevoerd, controleer dan de activatie logs om te bevestigen dat de functie succesvol is uitgevoerd:

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

Opmerking: Activatielogboeken registreren details over wanneer je functie is uitgevoerd, inclusief of deze succesvol is uitgevoerd of fouten heeft ondervonden. Ze zijn een handige manier om te verifiëren dat je trigger op het geplande tijdstip is geactiveerd.

Dit commando retourneert de details van de meest recente activatie van je functie. Bijvoorbeeld, je zou iets als dit kunnen zien:

=== 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

Dit bevestigt dat de trigger is geactiveerd en de functie succesvol is geactiveerd! 🎉

Opmerking: Zodra je hebt bevestigd dat alles werkt, werk je de cron-expressie bij naar je gewenste schema (bijv. 0 9 * * * voor dagelijks om 9:00 AM UTC) en sla je op of herdeploy.

Een snelle opmerking over logboeken

Hoewel het activatie logboeken commando een geweldige manier is om recente uitvoeringen te controleren, heb je soms meer gedetailleerde logboeken nodig om problemen met je functie te debuggen of te onderzoeken. DigitalOcean biedt ook opties om deze logboeken door te sturen naar externe loggingdiensten, waardoor het monitoren en oplossen van problemen met je applicatie in de loop van de tijd eenvoudiger wordt.

Op Dag 6 leer je logboeken direct in te zien, ze effectief te interpreteren en logdoorsturing naar externe services zoals Logtail of Papertrail in te stellen. Deze tools helpen je om eenvoudig op de hoogte te blijven van de prestaties van je functie.

🎁 Samenvatting

Hier is wat je vandaag hebt bereikt:

  1. Je hebt je Verjaardagsherinneringsdienst (of een andere functie) geautomatiseerd om dagelijks te draaien.
  2. Je hebt twee manieren geleerd om triggers in te stellen—via het Controlepaneel en met de doctl CLI.
  3. Je hebt je setup getest om te zorgen dat het werkt zoals verwacht.

Hier zijn de eerdere tutorials uit deze serie:

Volgende: Nu je service onafhankelijk draait, is de volgende stap om deze effectief te monitoren. In de volgende tutorial leer je hoe je je functie-logboeken kunt bekijken en deze naar externe diensten kunt doorsturen om het volgen en oplossen van problemen te vereenvoudigen. Tot dan!

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