Eu queria saber se posso enviar uma mensagem para a fila SQS e assinar um tópico do SNS para acionar um lambda para enviar um email.
SQS -> SNS -> (Lambda) -> SES
Sei que as mensagens SNS podem ser enviadas para o SQS, mas estou curioso para saber o contrário.
Você não pode ir
SQS -> SNS
, apenasSNS -> SQS
.O Lambda agora suporta agendamento, portanto, uma opção é implementar um pesquisador SQS em uma função Lambda e executá-lo com freqüência.
Outra opção a considerar é se você realmente precisa de uma fila. O Lambda suporta processamento assíncrono (por meio do modo de chamada de evento) e deve ser escalado horizontalmente de forma transparente para lidar com chamadas paralelas. Se sua função lambda não requer acesso a um armazenamento de estado central que pode restringir a execução paralela, provavelmente você pode executar todas as suas chamadas em paralelo. Porém, acredito que há um limite de execução simultânea de 100 contas por conta; portanto, você pode precisar agrupar suas mensagens para permanecer abaixo disso.
fonte
SQS
A fila pode ser inscrita noSNS
tópico e, assim, processar asSNS
mensagens recebidas . Atualmente, não é possível em outra direção sem codificação adicional (consulte, por exemplo,Lambda
FAQ ).Eu diria que existem algumas opções de como fazê-lo, mas não é tão elegante quanto o uso de sistemas orientados a eventos mais comuns
AWS event->SQS->Lambda
. Caso contrário, pode ser necessário customizar / implementar o código de como asSQS
filas são processadas:SQS
filas e, em seguida, acionarLambda
eventos SQSfonte
Isso foi perguntado e respondido há um tempo atrás, mas tendo acabado de pensar nisso, pensei em adicionar uma abordagem.
Como mencionado, as fontes de eventos podem ser a melhor aposta aqui. Como alternativa, e eu não testei isso nem pensei nisso (portanto, isso é meio acadêmico), mas pode ser possível fazer isso por meio de um padrão Fan-Out com o SNS da seguinte maneira:
Usando essa configuração, o envio de uma mensagem para o tópico do SNS enfileirará-a na fila do SQS enquanto aciona simultaneamente uma função complementar do Lambda. Essa função Lambda seria gravada para ler a mesma fila SQS, mas com a Pesquisa longa ativada (até 20 segundos) para que ela não leia a fila antes que o enfileiramento seja concluído (ou seja, condição de corrida).
Em essência, esse esquema just-in-time invoca uma função Lambda para cada mensagem SQS enfileirada. Não sei como os leitores simultâneos da Long Poll funcionam no SQS (... alguém é descartado?), Mas essa é apenas outra maneira de considerar a solução. = :)
fonte