12 jours de DigitalOcean (Jour 5) – Automatisation des rappels d’anniversaire avec des déclencheurs quotidiens

Bienvenue au Jour 5 des 12 Jours de DigitalOcean ! Hier, vous avez configuré votre Service de Rappel d’Anniversaire pour qu’il fonctionne sur DigitalOcean Functions, ce qui signifie qu’il est maintenant sans serveur et prêt pour le cloud. 🎉 Aujourd’hui, vous allez aller un peu plus loin en l’automatisant pour qu’il fonctionne selon son propre emploi du temps—aucune intervention manuelle requise.

À la fin de ce guide, votre service (ou toute autre fonction sur laquelle vous travaillez) fonctionnera automatiquement à une heure fixe chaque jour. Cela signifie qu’il n’est plus nécessaire de se souvenir de le déclencher soi-même—cela fonctionne tout simplement.

Pourquoi Automatiser ?

Déployer votre fonction dans le cloud a été une grande victoire hier, mais devoir l’exécuter manuellement va à l’encontre du but de l’automatisation. L’accent d’aujourd’hui est mis sur la planification du service pour qu’il fonctionne automatiquement—comme une horloge—afin que vous puissiez le régler et l’oublier. DigitalOcean Functions dispose d’une planification intégrée utilisant des Déclencheurs pour ce but précis, et vous avez deux façons de le configurer.

🚀 Ce que vous apprendrez

À la fin de la journée, vous saurez comment :

  1. Configurer un déclencheur quotidien pour exécuter votre fonction automatiquement.
  2. Apprendre deux façons de le faire : via le panneau de contrôle DigitalOcean ou avec le doctl CLI et project.yml.
  3. Tester la configuration pour s’assurer qu’elle fonctionne.

🛠 Ce dont vous aurez besoin

Avant de commencer, assurez-vous d’avoir ce qui suit :

  1. Une fonction déjà déployée sur DigitalOcean (par exemple, le service de rappel d’anniversaire de Jour 4 : Création d’un service de rappel d’anniversaire) à automatiser avec des déclencheurs.
  2. Si vous utilisez le doctl CLI, vous aurez besoin du fichier project.yml pour votre fonction. Vous pouvez consulter Jour 4 pour des instructions sur l’installation et la configuration du doctl CLI, ainsi que la création du fichier project.yml.

🧑‍🍳 Recette pour le Jour 5 : Automatisation des Fonctions avec des Déclencheurs

Étape 1 : Configurer un Déclencheur pour Votre Fonction

DigitalOcean vous offre deux options pour configurer des déclencheurs :

  1. Option 1 : Utilisez le Panneau de Contrôle pour une configuration rapide et facile.
  2. Option 2 : Utilisez le doctl CLI pour un contrôle plus robuste et programmatique.

Avertissement: N’oubliez pas que les déclencheurs créés dans le Panneau de configuration sont perdus si vous redéployez la fonction en utilisant l’interface de ligne de commande. Si vous devez redéployer souvent, utilisez l’Option 2 pour ajouter directement des déclencheurs au fichier project.yml.

Option 1 : Utiliser le Panneau de configuration pour Créer un Déclencheur

La manière la plus simple de configurer un déclencheur est via le Panneau de configuration de DigitalOcean. C’est rapide, ne nécessite aucun paramétrage, et est idéal pour des configurations ponctuelles simples.

  • Rendez-vous sur la page principale des Fonctions dans le tableau de bord de DigitalOcean.
  • Trouvez votre fonction (par exemple, reminders/birthdays) et cliquez sur l’onglet Déclencheurs.

  • Cliquez sur Créer un déclencheur, ajoutez un Nom à votre déclencheur. Cela peut être n’importe quoi de descriptif, comme daily-birthday-trigger. Le nom ne doit contenir que des caractères alphanumériques, des tirets et des points.
  • Ajoutez une expression cron pour définir le planning. Par exemple, 0 9 * * * signifie que la fonction s’exécutera tous les jours à 9h00.

Remarque: Si vous n’êtes pas sûr du fonctionnement de cron, consultez crontab.guru pour un guide pratique.

  • Enregistrez le déclencheur.

Une fois que vous avez créé votre déclencheur, il est judicieux de le tester pour vous assurer que tout fonctionne comme prévu. Rendez-vous à la section Tester l’Automatisation ci-dessous pour apprendre comment faire.

Avertissement : Bien que le tableau de bord soit simple et efficace, tout déclencheur que vous créez ici sera écrasé ou supprimé si vous redéployez la fonction en utilisant la CLI. Pour des mises à jour fréquentes ou des déploiements programmatiques, passez à Option 2.

Option 2 : Utilisation de la doctl CLI avec project.yml

Vous pouvez également créer des déclencheurs en les ajoutant directement à votre fichier project.yml. Cette méthode est plus fiable pour des redéploiements fréquents car elle garantit que vos déclencheurs sont toujours inclus dans la configuration de la fonction. Contrairement à l’option du panneau de contrôle décrite précédemment, cette approche empêche les déclencheurs d’être écrasés ou perdus lors des redéploiements.

Voici comment vous pouvez le configurer :

  • Ouvrez votre fichier project.yml de Day 4: Déploiement des notifications d’anniversaire avec les fonctions DigitalOcean. Il pourrait ressembler à ceci :

    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
    
  • Ajoutez une section triggers à la configuration de votre fonction pour définir le calendrier :

    triggers:
      - name: daily-birthday-trigger
        sourceType: scheduler
        sourceDetails:
        cron: "0 9 * * *"
    
  • Fichier project.yml mis à jour final :

    packages:
      - name: rappels
        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: anniversaires
            runtime: python:default
            triggers:
              - name: quotidien-anniversaire-déclencheur
                sourceType: planificateur
                sourceDetails:
                  cron: "0 9 * * *"
    

    Cela indique à DigitalOcean d’exécuter la fonction anniversaires tous les jours à 9h00.

    1. triggers section: Définit le nom, le type et le calendrier pour le déclencheur. Vous pouvez nommer votre déclencheur de manière descriptive, comme déclencheur-quotidien-anniversaire.

    2. cron: Spécifie l’heure à laquelle la fonction s’exécutera quotidiennement en UTC. L’expression cron 0 9 * * * par exemple, programme la fonction pour s’exécuter tous les jours à 9h00.

  • Enregistrez le fichier et déployez-le en exécutant la commande suivante depuis le répertoire contenant le dossier my-birthday-reminder-service:

    doctl serverless deploy my-birthday-reminder-service
    

    Important : Assurez-vous d’exécuter la commande depuis le répertoire parent, et non à l’intérieur du dossier my-birthday-reminder-service. L’exécuter depuis le mauvais emplacement peut entraîner une erreur comme celle-ci :

    ❯ doctl serverless deploy my-birthday-reminder-service
    Erreur : ENOENT : aucun fichier ou répertoire, lstat
    
  • Une fois le déploiement réussi, vous verrez un message de confirmation similaire à celui-ci :

    Fonctions déployées
      - rappels/anniversaires
    Déclencheurs déployés :
      - déclencheur-anniversaire-quotidien
    

  • Allez sur votre tableau de bord pour vérifier que le déclencheur a été créé sous la section Fonctions.

Conseil professionnel: Pour tester votre déclencheur, définissez temporairement l’expression cron à quelques minutes à partir de maintenant (par exemple, 28 9 * * * s’il est 9h25). Après avoir confirmé que cela fonctionne, mettez-le à jour avec votre planning prévu et redéployez.

Étape 2 : Tester l’automatisation

Testons vos déclencheurs pour nous assurer qu’ils fonctionnent. Au lieu d’attendre qu’ils se déclenchent selon leur planning habituel, vous pouvez temporairement les programmer pour s’exécuter quelques minutes plus tard. Voici comment procéder :

  • Définissez l’expression cron pour votre déclencheur à quelques minutes après l’heure actuelle (en UTC). Par exemple, s’il est 9h25 UTC, définissez l’expression cron à 28 9 * * * pour que la fonction s’exécute à 9h28 UTC.

    Remarque: Vous ne savez pas comment convertir votre heure locale en UTC ? Des outils comme Convertisseur de fuseau horaire peuvent vous aider.

  • Enregistrez le déclencheur mis à jour (si vous utilisez le panneau de contrôle) ou redéployez votre fichier project.yml mis à jour (si vous utilisez l’interface en ligne de commande) :

    doctl serverless deploy my-birthday-reminder-service
    
  • Attendez que le déclencheur s’exécute, puis vérifiez les journaux d’activation pour confirmer que la fonction s’est exécutée avec succès :

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

Remarque : Les journaux d’activation enregistrent des détails sur le moment où votre fonction a été exécutée, y compris si elle a réussi ou rencontré des erreurs. Ils constituent un moyen utile de vérifier que votre déclencheur s’est activé à l’heure prévue.

Cette commande retournera les détails de la dernière activation de votre fonction. Par exemple, vous pourriez voir quelque chose comme ceci :

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

Cela confirme que le déclencheur s’est activé et que la fonction a été activée avec succès ! 🎉

Remarque : Une fois que vous avez vérifié que tout fonctionne, mettez à jour l’expression cron selon votre emploi du temps prévu (par exemple, 0 9 * * * pour 9h00 UTC tous les jours) et enregistrez ou redéployez.

Une brève note sur les journaux

Bien que la commande journaux d'activations soit un excellent moyen de vérifier les exécutions récentes, il arrive parfois que vous ayez besoin de journaux plus détaillés pour déboguer ou enquêter sur des problèmes avec votre fonction. DigitalOcean fournit également des options pour transférer ces journaux vers des services de journalisation externes, facilitant ainsi la surveillance et le dépannage de votre application au fil du temps.

Le sixième jour, vous apprendrez à visualiser directement les journaux, à les interpréter efficacement et à configurer la redirection des journaux vers des services externes tels que Logtail ou Papertrail. Ces outils vous aideront à suivre facilement les performances de votre fonction.

🎁 Conclusion

Voici ce que vous avez accompli aujourd’hui :

  1. Vous avez automatisé votre service de rappel d’anniversaire (ou toute autre fonction) pour qu’il s’exécute quotidiennement.
  2. Vous avez appris deux façons de configurer des déclencheurs : via le Panneau de Contrôle et avec le CLI doctl.
  3. Vous avez testé votre configuration pour vous assurer qu’elle fonctionne comme prévu.

Voici les tutoriels précédents de cette série :

Prochainement : Maintenant que votre service fonctionne de manière autonome, la prochaine étape consiste à le surveiller efficacement. Dans le prochain tutoriel, vous apprendrez comment consulter les journaux de votre fonction et les transmettre à des services externes pour simplifier le suivi et le dépannage. À bientôt !

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