Мне было интересно, могу ли я отправить сообщение в очередь SQS и подписать на него тему SNS, чтобы вызвать лямбду для отправки электронной почты.
SQS -> SNS -> (Lambda) -> SES
Я знаю, что сообщения SNS можно отправлять в SQS, но мне любопытно, возможен ли другой путь
Ты не можешь идти
SQS -> SNS
, толькоSNS -> SQS
.Lambda теперь поддерживает планирование, поэтому одним из вариантов является реализация SQS-опроса в функции Lambda и частое его выполнение.
Еще один вариант для рассмотрения - нужна ли вам очередь? Лямбда поддерживает асинхронную обработку (через режим вызова событий) и должна прозрачно масштабироваться горизонтально для обработки параллельных вызовов. Если вашей лямбда-функции не требуется доступ к центральному хранилищу состояний, что может ограничить параллельное выполнение, тогда вы, вероятно, можете просто выполнить все свои вызовы параллельно. Я полагаю, что для каждой учетной записи существует ограничение на 100 одновременных исполнений, поэтому вам может потребоваться пакетировать свои сообщения, чтобы остаться под этим.
источник
SQS
Очередь можно подписать наSNS
тему и так обрабатывать полученныеSNS
сообщения. В настоящее время это невозможно в другом направлении без дополнительного кодирования (см., Например,Lambda
FAQ ).Я бы сказал, что есть несколько вариантов, как это сделать, но это не так элегантно, как использование более распространенной системы, управляемой событиями
AWS event->SQS->Lambda
. В противном случае вам может понадобиться настроить / реализовать код для обработкиSQS
очередей:SQS
очередей и последующего запускаLambda
событий SQSисточник
Это спросили и ответили некоторое время назад, но, подумав об этом сам, я решил добавить подход.
Как уже упоминалось, источники событий могут быть лучшим выбором здесь. В качестве альтернативы, и я не проверял это и не продумывал это (так что это своего рода академический подход), но это может быть возможно сделать через шаблон разветвления с SNS следующим образом:
Используя эту конфигурацию, отправка сообщения в тему SNS ставит его в очередь SQS, одновременно вызывая сопутствующую функцию Lambda. Эта лямбда-функция будет написана для чтения той же самой очереди SQS, но с включенным длинным опросом (до 20 секунд), чтобы она не читала очередь до завершения постановки в очередь (т. Е. Состояние гонки).
По сути, эта схема как раз вовремя вызывает одну лямбда-функцию для каждого сообщения SQS в очереди. Я не знаю, как одновременные читатели Long Poll работают на SQS (... один отбрасывается?), Но это просто еще один способ решить эту проблему. знак равно
источник