12 Tage von DigitalOcean (Tag 5) – Automatisierung von Geburtstags-Erinnerungen mit täglichen Auslösern

Willkommen zum 5. Tag der 12 Tage von DigitalOcean! Gestern haben Sie Ihren Geburtstags-Erinnerungsdienst eingerichtet, um auf DigitaleOcean-Funktionen zu laufen, was bedeutet, dass es jetzt serverlos und cloud-fertig ist. 🎉 Heute werden Sie einen Schritt weiter gehen, indem Sie es automatisieren, damit es nach einem Zeitplan läuft – keine manuelle Eingabe erforderlich.

Am Ende dieses Leitfadens wird Ihr Dienst (oder jede andere Funktion, an der Sie arbeiten) automatisch zu einer festgelegten Zeit jeden Tag ausgeführt. Das bedeutet, dass Sie sich nicht mehr daran erinnern müssen, es selbst auszulösen – es funktioniert einfach.

Warum automatisieren?

Das Bereitstellen Ihrer Funktion in der Cloud war gestern ein großer Erfolg, aber das manuelle Ausführen widerspricht dem Zweck der Automatisierung. Der Fokus von heute liegt darauf, den Dienst so zu planen, dass er automatisch ausgeführt wird – wie ein Uhrwerk – damit Sie ihn einstellen und vergessen können. DigitalOcean Functions verfügt über eine integrierte Zeitplanung mit Triggern für diesen genauen Zweck, und Sie haben zwei Möglichkeiten, sie einzurichten.

🚀 Was Sie Lernen Werden

Am Ende des Tages werden Sie wissen, wie Sie:

  1. Ein tägliches Trigger-Setup einrichten, um Ihre Funktion automatisch auszuführen.
  2. Zwei Möglichkeiten lernen, dies zu tun – über das DigitalOcean Control Panel oder mit der doctl CLI und project.yml.
  3. Die Einrichtung testen, um sicherzustellen, dass sie funktioniert.

🛠 Was Sie Benötigen

Bevor Sie anfangen, stellen Sie sicher, dass Sie Folgendes haben:

  1. Eine bereits auf DigitalOcean bereitgestellte Funktion (z.B. den Geburtstags-Erinnerungsdienst aus Tag 4: Erstellung eines Geburtstags-Erinnerungsdienstes), um sie mit Triggern zu automatisieren.
  2. Wenn Sie die doctl CLI verwenden, benötigen Sie die Datei project.yml für Ihre Funktion. Sie können sich Tag 4 für Anweisungen zum Installieren und Einrichten der doctl CLI sowie zum Erstellen der project.yml Datei ansehen.

🧑‍🍳 Rezept für Tag 5: Automatisierung von Funktionen mit Triggern

Schritt 1: Richten Sie einen Trigger für Ihre Funktion ein

DigitalOcean bietet Ihnen zwei Optionen zum Einrichten von Triggern:

  1. Option 1: Verwenden Sie das Bedienfeld für eine schnelle und einfache Einrichtung.
  2. Option 2: Verwenden Sie die doctl CLI für eine robustere und programmgesteuerte Steuerung.

Warnung: Denken Sie daran, dass Trigger, die im Control Panel erstellt wurden, verloren gehen, wenn Sie die Funktion mithilfe der CLI neu bereitstellen. Wenn Sie dies häufig tun werden, verwenden Sie Option 2, um Trigger direkt zur Datei project.yml hinzuzufügen.

Option 1: Verwenden des Control Panels zum Erstellen eines Triggers

Der einfachste Weg, einen Trigger einzurichten, erfolgt über das DigitalOcean Control Panel. Es ist schnell, erfordert keine Konfiguration und ist ideal für einfache einmalige Konfigurationen.

  • Navigieren Sie zur Hauptseite der Funktionen im DigitalOcean-Dashboard.
  • Finden Sie Ihre Funktion (z. B. reminders/birthdays) und klicken Sie auf den Trigger-Tab.

  • Klicken Sie auf Trigger erstellen, fügen Sie einen Namen für Ihren Trigger hinzu. Dies kann alles Beschreibende sein, wie z. B. täglicher-geburtstags-trigger. Der Name darf nur alphanumerische Zeichen, Bindestriche und Punkte enthalten.
  • Fügen Sie einen Cron-Ausdruck hinzu, um den Zeitplan festzulegen. Zum Beispiel bedeutet 0 9 * * *, dass die Funktion jeden Tag um 9:00 Uhr ausgeführt wird.

Hinweis: Wenn Sie nicht sicher sind, wie Cron funktioniert, werfen Sie einen Blick auf crontab.guru für eine praktische Anleitung.

  • Speichern Sie den Trigger.

Nachdem Sie Ihren Trigger erstellt haben, ist es eine gute Idee, ihn zu testen, um sicherzustellen, dass alles wie erwartet funktioniert. Springen Sie zum Abschnitt Testen der Automatisierung unten, um zu erfahren, wie.

Warnung: Während das Dashboard einfach und effektiv ist, werden alle Trigger, die Sie hier erstellen, überschrieben oder gelöscht, wenn Sie die Funktion über die CLI neu bereitstellen. Bei häufigen Updates oder programmgesteuerten Bereitstellungen überspringen Sie zu Option 2.

Option 2: Verwendung der doctl CLI mit project.yml

Sie können Trigger auch erstellen, indem Sie sie direkt in Ihre project.yml-Datei hinzufügen. Diese Methode ist zuverlässiger für häufige Neu-Bereitstellungen, da sie sicherstellt, dass Ihre Trigger immer in der Konfiguration der Funktion enthalten sind. Im Gegensatz zur zuvor beschriebenen Control Panel-Option verhindert dieser Ansatz, dass Trigger während der Neu-Bereitstellungen überschrieben oder verloren gehen.

So richten Sie es ein:

  • Öffnen Sie Ihre project.yml Datei aus Tag 4: Bereitstellung von Geburtstagsbenachrichtigungen mit DigitalOcean Functions. Sie könnte ungefähr so aussehen:

    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
    
  • Fügen Sie Ihrer Funktionskonfiguration einen triggers Abschnitt hinzu, um den Zeitplan zu definieren:

    triggers:
      - name: täglich-geburtstags-trigger
        sourceType: scheduler
        sourceDetails:
        cron: "0 9 * * *"
    
  • Endgültig aktualisierte project.yml Datei:

    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 * * *"
    

    Dies sagt DigitalOcean, die birthdays Funktion jeden Tag um 9:00 Uhr auszuführen.

    1. triggers Abschnitt: Definiert den Namen, Typ und Zeitplan für den Trigger. Sie können Ihren Trigger beliebig beschreiben, wie daily-birthday-trigger.

    2. cron: Gibt die Zeit an, zu der die Funktion täglich in UTC ausgeführt wird. Der Cron-Ausdruck 0 9 * * * plant beispielsweise die Funktion, jeden Tag um 9:00 Uhr auszuführen.

  • Speichern Sie die Datei und führen Sie den folgenden Befehl aus dem Verzeichnis aus, das den my-birthday-reminder-service Ordner enthält:

    doctl serverless deploy my-birthday-reminder-service
    

    Wichtig: Stellen Sie sicher, dass Sie den Befehl aus dem übergeordneten Verzeichnis und nicht aus dem my-birthday-reminder-service Ordner ausführen. Ein Ausführen an der falschen Stelle kann zu einem Fehler wie diesem führen:

    ❯ doctl serverless deploy my-birthday-reminder-service
    Fehler: ENOENT: Keine solche Datei oder Verzeichnis, lstat
    
  • Sobald die Bereitstellung erfolgreich ist, sehen Sie eine Bestätigungsmeldung, die dieser ähnlich ist:

    Bereitgestellte Funktionen
      - reminders/birthdays
    Bereitgestellte Trigger:
      - daily-birthday-trigger
    

  • Gehen Sie zu Ihrem Dashboard, um zu überprüfen, ob der Trigger im Abschnitt Funktionen erstellt wurde.

Profi-Tipp: Um Ihren Trigger zu testen, setzen Sie vorübergehend den Cron-Ausdruck auf einige Minuten von jetzt an (z. B. 28 9 * * *, wenn es 9:25 Uhr ist). Nach Bestätigung, dass es funktioniert, setzen Sie ihn zurück auf Ihren beabsichtigten Zeitplan und führen Sie ihn erneut aus.

Schritt 2: Testen der Automatisierung

Testen wir Ihre Trigger, um sicherzustellen, dass sie funktionieren. Anstatt darauf zu warten, dass sie zu ihrer üblichen Zeit ausgelöst werden, können Sie sie vorübergehend so einstellen, dass sie in wenigen Minuten ausgeführt werden. So geht’s:

  • Legen Sie den Cron-Ausdruck für Ihren Trigger auf einige Minuten von der aktuellen Zeit (in UTC) fest. Wenn es z. B. 9:25 Uhr UTC ist, setzen Sie den Cron-Ausdruck auf 28 9 * * *, damit die Funktion um 9:28 Uhr UTC ausgeführt wird.

    Hinweis: Nicht sicher, wie Sie Ihre lokale Zeit in UTC umrechnen? Tools wie Zeitzonenkonverter können helfen.

  • Speichern Sie den aktualisierten Auslöser (wenn Sie das Control Panel verwenden) oder bereitstellen Sie Ihre aktualisierte project.yml-Datei erneut (wenn Sie die CLI verwenden):

    doctl serverless deploy my-birthday-reminder-service
    
  • Warten Sie darauf, dass der Auslöser ausgeführt wird, überprüfen Sie dann die Aktivierungs-Logs, um zu bestätigen, dass die Funktion erfolgreich ausgeführt wurde:

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

Hinweis: Aktivierungsprotokolle zeichnen Details darüber auf, wann Ihre Funktion ausgeführt wurde, einschließlich ob sie erfolgreich war oder Fehler aufgetreten sind. Sie sind eine hilfreiche Möglichkeit, um zu überprüfen, ob Ihr Trigger zur geplanten Zeit ausgelöst wurde.

Dieser Befehl gibt die Details der letzten Aktivierung Ihrer Funktion zurück. Zum Beispiel könnten Sie etwas wie dies sehen:

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

Das bestätigt, dass der Trigger ausgelöst wurde und die Funktion erfolgreich aktiviert wurde! 🎉

Hinweis: Sobald Sie bestätigt haben, dass alles funktioniert, aktualisieren Sie den Cron-Ausdruck auf Ihren gewünschten Zeitplan (z. B. 0 9 * * * für 9:00 Uhr UTC täglich) und speichern oder redeployen Sie.

Eine kurze Anmerkung zu Protokollen

Während der Befehl Aktivierungsprotokolle eine großartige Möglichkeit ist, um kürzliche Ausführungen zu überprüfen, benötigen Sie manchmal detailliertere Protokolle, um Probleme mit Ihrer Funktion zu debuggen oder zu untersuchen. DigitalOcean bietet auch Optionen, um diese Protokolle an externe Protokollierungsdienste weiterzuleiten, was die Überwachung und Fehlersuche Ihrer Anwendung im Laufe der Zeit erleichtert.

Am Tag 6 lernen Sie, Protokolle direkt einzusehen, sie effektiv zu interpretieren und die Protokollweiterleitung an externe Dienste wie Logtail oder Papertrail einzurichten. Diese Tools helfen Ihnen, die Leistung Ihrer Funktion leicht im Auge zu behalten.

🎁 Zusammenfassung

Das haben Sie heute erreicht:

  1. Sie haben Ihren Geburtstags-Erinnerungsdienst (oder eine andere Funktion) automatisiert, sodass er täglich ausgeführt wird.
  2. Sie haben zwei Möglichkeiten gelernt, Trigger einzurichten—über das Control Panel und mit dem doctl CLI.
  3. Sie haben Ihre Einrichtung getestet, um sicherzustellen, dass sie wie erwartet funktioniert.

Hier sind die vorherigen Tutorials aus dieser Reihe:

Als Nächstes: Da Ihr Dienst jetzt unabhängig läuft, ist der nächste Schritt, ihn effektiv zu überwachen. Im nächsten Tutorial erfahren Sie, wie Sie Ihre Funktionsprotokolle anzeigen und an externe Dienste weiterleiten, um das Tracking und die Fehlerbehebung zu vereinfachen. Bis bald!

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