Me preguntaba si puedo enviar un mensaje a la cola SQS y suscribirle un tema SNS para activar una lambda para enviar un correo electrónico.
SQS -> SNS -> (Lambda) -> SES
Sé que los mensajes SNS se pueden enviar a SQS, pero tengo curiosidad por saber si es posible al revés
No puedes ir
SQS -> SNS
, soloSNS -> SQS
.Lambda ahora admite la programación, por lo que una opción es implementar un sondeo SQS en una función Lambda y ejecutarlo con frecuencia.
Otra opción a considerar es si realmente necesita una cola. Lambda admite el procesamiento asincrónico (a través del modo de invocación de eventos) y debe escalar horizontalmente de forma transparente para manejar invocaciones paralelas. Si su función lambda no requiere acceso a un almacén de estado central que podría restringir la ejecución paralela, entonces probablemente podría ejecutar todas sus invocaciones en paralelo. Sin embargo, creo que hay un límite de ejecución simultánea de 100 por cuenta, por lo que es posible que deba agrupar sus mensajes para mantenerse por debajo de eso.
fuente
SQS
la cola se puede suscribir alSNS
tema y así procesar losSNS
mensajes recibidos . Actualmente, no es factible en otra dirección sin codificación adicional (ver, por ejemplo,Lambda
Preguntas frecuentes ).Diría que hay un par de opciones para hacerlo, pero no es tan elegante como usar un sistema más común basado en eventos
AWS event->SQS->Lambda
. De lo contrario, es posible que deba personalizar / implementar el código de cómoSQS
se procesan las colas:SQS
colas y luego dispararLambda
eventos SQSfuente
Esto fue preguntado y respondido hace un tiempo, pero habiendo pensado en esto yo mismo, pensé en agregar un enfoque.
Como se mencionó, las fuentes de eventos pueden ser la mejor apuesta aquí. Alternativamente, y no lo he probado ni lo he pensado (así que esto es algo académico), pero puede ser posible lograr esto a través de un patrón Fan-Out con SNS de la siguiente manera:
Al usar esta configuración, enviar un mensaje al tema SNS lo pondrá en cola en la cola SQS mientras activa simultáneamente una función complementaria de Lambda. Esa función Lambda se escribiría para leer esa misma cola SQS pero con Long Polling habilitado (hasta 20 segundos) para que no lea la cola antes de que se complete la cola (es decir, condición de carrera).
En esencia, este esquema justo a tiempo invoca una función Lambda para cada mensaje SQS en cola. No sé cómo funcionan los lectores de Long Poll simultáneos en SQS (... ¿se cae uno?), Pero esta es solo otra forma de considerar resolver esto. = :)
fuente