2017-05-24 2 views
0

J'ai le scénario de cas d'utilisation suivant pour lequel je considère aws services pour voir comment je peux arriver à une solution évolutive. Merci d'avance pour votre aide!envoyer une notification périodique en utilisant aws sns et lambda

Scénario: Les utilisateurs peuvent s'inscrire à une application (nommée 'Rappelons' ou autre chose) en utilisant leur adresse email et leur numéro de téléphone. L'application fait une chose qui est d'envoyer des alertes e-mail et SMS à l'utilisateur. L'utilisateur peut créer n nombre de tâches pour lesquelles il veut être rappelé. Par exemple, il peut mettre en place un rappel mensuel pour payer les frais de carte. Actuellement, la valeur de n est comprise entre 5 et 10 par utilisateur. Les notifications sont flexibles, ce qui signifie qu'elles peuvent être quotidiennes, hebdomadaires, mensuelles ou bimensuelles. L'utilisateur peut également spécifier la date de début d'une notification. La date de fin est la date à laquelle l'événement est dû (par exemple le jour où le paiement par carte est dû). Une fois cette date expirée, la notification est désactivée pour le mois en cours. Pour les notifications hebdomadaires, quotidiennes et bimensuelles, les notifications sont supprimées une fois la date de l'événement passée. Ceux-ci ne sont pas récurrents dans la nature. Pour les événements récurrents mensuels tels que le paiement du loyer d'appartement, etc., la notification elle-même n'est pas supprimée mais désactivée après la date d'échéance de l'événement. Une fois que le cycle d'événement suivant (généralement suivant mois cycle de facturation pour l'utilisation des paiements) commence, la notification revient à la vie et commence tous à nouveau. L'utilisation peut supprimer n'importe quel événement quand il veut. Si un événement est supprimé, les notifications pour cet événement seront également supprimées.

Tout d'abord, j'espère que le cas d'utilisation est clair. Maintenant, voici mes pensées à ce jour sur la résolution de ce cas d'utilisation -

1) Utilisez SNS car j'ai besoin d'envoyer des emails et des sms. SES prend uniquement en charge les e-mails. 2) Lorsqu'un utilisateur s'inscrit pour l'application, créez 2 abonnements (un pour son adresse e-mail et un pour son point de terminaison SMS) et créez également un sujet pour l'utilisateur (peut-être un ID utilisateur généré dynamiquement). (par exemple rappel pour la location mensuelle d'appartement), stockez les données d'événement telles que userid, startdate, duedate, frequency, isactive dans une table dynamodb. 4) Créer une fonction lambda qui va se réveiller lorsqu'une entrée est écrite dans la table dynamodb (étape 3); il fera ce qui suit - i) il lira les données d'événement de la table dynamodb ii) déterminera la prochaine date de la notification à envoyer en fonction de la date et de l'événement en cours données iii) Pour les événements actifs (cochez isActive colonne de l'enregistrement dynamodb) créez une règle d'expression cron planifiée basée sur ii ci-dessus dans les événements cloudwatch et ajoutez la cible en tant que sujet de l'utilisateur (créé à l'étape 2 ci-dessus). Pour l'instant, le message de notification est statique.

J'ai quelques doutes/requêtes au sujet de l'étape iii - Est-il possible de créer dynamiquement la règle cron d'événement cloudwatch et d'ajouter dynamiquement le sujet de l'utilisateur en tant que cible comme je l'ai décrit? Ou est-il préférable de déclencher une deuxième fonction lambda dédiée à l'envoi de messages sur le sujet de l'utilisateur en utilisant la notification SNS? Quelle approche sera la meilleure pour ce cas d'utilisation? Si la base d'utilisateurs devient grande, est-il recommandé de créer un sujet par utilisateur? Suis-je sur la bonne voie avec mon approche ci-dessus en général du point de vue de l'évolutivité? Si non, quelqu'un peut-il suggérer une meilleure idée pour la mise en œuvre de ce cas d'utilisation?

Merci d'avance!

+0

Cela peut fonctionner pour un petit groupe d'utilisateurs. Mais quand votre base d'utilisateurs se développe, cela ne fonctionnera pas. –

+0

Alors, quelle approche ou quels services suggérez-vous? Tout lien ou article connexe sera utile. – chakrar

+0

J'ai modifié la question avec plus de détails. Est-ce que quelqu'un a une idée si mon approche fonctionnerait dans ce cas? Merci. – chakrar

Répondre

0

Cela ne fonctionnera pas. Pour que l'abonné e-mail SNS reçoive une notification par e-mail envoyée via SNS, il doit d'abord confirmer l'abonnement. Vous ne pouvez pas simplement créer des abonnements à la volée et leur envoyer une notification par e-mail.

Je ne pense pas que SNS s'adapte à votre cas d'utilisation. Vous feriez mieux d'envoyer des notifications par e-mail en utilisant SES.

Vous pouvez écrire votre logique de planification dans Lambda si

+0

Je dois aussi envoyer des SMS; comment puis-je faire cela sans utiliser SNS? Une fois qu'un utilisateur s'enregistre, le système configurera un sujet et un point de terminaison d'abonnement avec son adresse e-mail; un email lui sera envoyé pour confirmation. Il ne pourra recevoir de notifications que lorsqu'il confirmera l'inscription. – chakrar

+0

Vous devrez utiliser un service SMS tiers. SNS, même s'il a des capacités d'envoi de SMS, n'est pas adapté à vos besoins –