Je me demandais si je pouvais envoyer un message à la file d'attente SQS et y abonner une rubrique SNS pour déclencher un lambda pour l'envoi d'un e-mail.
SQS -> SNS -> (Lambda) -> SES
Je sais que les messages SNS peuvent être envoyés à SQS mais je suis curieux de savoir si l'inverse est possible
Tu ne peux pas y aller
SQS -> SNS
, seulementSNS -> SQS
.Lambda prend désormais en charge la planification , une option consiste donc à implémenter un poller SQS dans une fonction Lambda et à l'exécuter fréquemment.
Une autre option à considérer est de savoir si vous avez réellement besoin d'une file d'attente. Lambda prend en charge le traitement asynchrone (via le mode d'invocation d'événement) et doit évoluer de manière transparente horizontalement pour gérer les invocations parallèles. Si votre fonction lambda ne nécessite pas l'accès à un magasin d'état central qui pourrait limiter l'exécution parallèle, vous pouvez probablement simplement exécuter toutes vos invocations en parallèle. Je pense cependant qu'il y a une limite d'exécution simultanée de 100 par compte, vous devrez donc peut-être regrouper vos messages pour rester en dessous.
la source
SQS
la file d'attente peut être abonnée auSNS
sujet et ainsi traiter lesSNS
messages reçus . Actuellement, il n'est pas possible dans une autre direction sans codage supplémentaire (voir par exemple laLambda
FAQ ).Je dirais qu'il y a quelques options pour le faire, mais ce n'est pas aussi élégant que d'utiliser un système événementiel plus courant
AWS event->SQS->Lambda
. Sinon, vous devrez peut-être personnaliser / implémenter le code deSQS
traitement des files d'attente:SQS
files d' attente, puis pour déclencher desLambda
événements SQSla source
Cela a été demandé et répondu il y a un certain temps, mais après y avoir pensé moi-même, j'ai pensé ajouter une approche.
Comme mentionné, les sources d'événements peuvent être le meilleur pari ici. Alternativement, et je n'ai pas testé cela ni réfléchi (c'est donc un peu académique), mais il peut être possible de le faire via un modèle de fan-out avec SNS comme suit:
En utilisant cette configuration, la soumission d'un message à la rubrique SNS le mettra dans la file d'attente SQS tout en déclenchant simultanément une fonction Lambda associée. Cette fonction Lambda serait écrite pour lire cette même file d'attente SQS mais avec l'interrogation longue activée (jusqu'à 20 secondes) afin qu'elle ne lise pas la file d'attente avant la fin de la mise en file d'attente (c'est-à-dire la condition de concurrence critique).
En substance, ce schéma appelle juste à temps une fonction Lambda pour chaque message SQS mis en file d'attente. Je ne sais pas comment fonctionnent les lecteurs simultanés Long Poll sur SQS (... est-ce que l'un d'eux est supprimé?), Mais ce n'est qu'une autre façon d'envisager de résoudre ce problème. = :)
la source