2 votes

Déclencheurs Lambda programmés dynamiquement pour un bot Slack.

Ma société dispose d'un bot Slack interne pour créer et envoyer des rapports entre les départements. Actuellement, quelqu'un peut créer un rapport et l'envoyer manuellement à un département quand il le souhaite. Ces deux actions sont gérées via une simple fonction Lambda. Cependant, nous rencontrons des problèmes car les gens oublient parfois d'envoyer les rapports plus tard.

Je cherche un moyen de permettre à un utilisateur de pré-sélectionner l'heure à laquelle il souhaite envoyer un rapport. J'ai envisagé de créer une expression de cron CloudWatch dynamiquement pour chaque rapport en fonction de l'heure sélectionnée, mais cela ne me semble pas très évolutif - que se passe-t-il si plusieurs utilisateurs veulent envoyer un rapport au même moment?

Est-ce que quelque chose comme le polling d'une file d'attente SQS est plus durable ou existe-t-il une meilleure solution pour gérer la planification dynamique d'événements?

*Je préférerais ne pas devoir exécuter la fonction Lambda toutes les minutes juste pour poller les messages.

Toutes les suggestions sont grandement appréciées!

0voto

Erik Kalkoken Points 10522

Voici un schéma général de la façon d'implémenter votre exigence avec Slack :

  • Ajoutez une fonction à votre bot Slack afin que l'utilisateur puisse entrer la date d'échéance pour l'envoi du rapport, par exemple avec un dialogue Slack ou une liste déroulante d'options courantes
  • Stockez les informations du rapport avec la date d'échéance d'envoi dans une base de données
  • Exécutez un lot sur la base de données de manière régulière et envoyez les rapports dus

Le lot peut être une fonction lambda. Et je suppose que vous pouvez également stocker des données persistantes avec votre fonction lambda, par exemple une base de données.

Pour que votre lot s'exécute de manière régulière, par exemple toutes les 5 minutes, vous aurez besoin d'un ordonnanceur CRON. Un bon que j'utilise moi-même est cron-job.org. Fonctionne parfaitement pour déclencher des applications via une requête http et ils ont un plan gratuit.

Je n'utiliserais pas de file d'attente, car il est fort probable que les rapports ne seront pas envoyés dans un ordre successif. Il est donc préférable d'utiliser une table de base de données, où vous pouvez interroger pour obtenir uniquement les éléments dus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X