Мне было интересно, могу ли я отправить сообщение в очередь SQS и подписать на него тему SNS, чтобы активировать лямбду для отправки электронного письма.
SQS -> SNS -> (Лямбда) -> SES
Я знаю, что сообщения SNS можно отправлять в SQS, но мне любопытно, возможно ли обратное
Одна вещь, которую я сделал, - это создала будильник CloudWatch на ApproximateNumberOfMessagesVisible
(>= 1 for 5 minutes
) для очереди SQS. Аварийный сигнал публикуется в теме SNS, которая запускает лямбда-функцию. Лямбда-функция зацикливается, пока не очистит очередь.
Для срабатывания сигнала тревоги может потребоваться до 5 минут, но он отлично работает для задач, запланированных на пакет, без необходимости опроса очереди. (Детализация сигналов тревоги составляет 5 минут для активных очередей.)
Ты не можешь пойти SQS -> SNS
, только SNS -> SQS
.
Лямбда теперь поддерживает планирование поэтому один из вариантов - реализовать опросчик SQS в функции лямбда и часто запускать его.
Другой вариант, который следует рассмотреть, - действительно ли вам нужна очередь. Lambda поддерживает асинхронную обработку (через режим вызова событий) и должна прозрачно масштабироваться по горизонтали для обработки параллельных вызовов. Если ваша лямбда-функция не требует доступа к центральному хранилищу состояний, которое может ограничивать параллельное выполнение, вы, вероятно, можете просто запустить все свои вызовы параллельно. Я считаю, что для каждой учетной записи существует ограничение в 100 одновременных запусков, поэтому вам может потребоваться пакетная обработка сообщений, чтобы оставаться ниже этого.
SQS
очередь может быть подписана на SNS
тема и так обработать полученные SNS
Сообщения. В настоящее время это невозможно в другом направлении без дополнительного кодирования (см., Например, Lambda
Вопросы-Ответы).
Я бы сказал, что есть несколько вариантов, как это сделать, но это не так элегантно, как использование более распространенной системы, управляемой событиями. AWS event->SQS->Lambda
. В противном случае вам может потребоваться настроить / реализовать код, как SQS
очереди обрабатываются:
SQS
очереди, а затем вызвать Lambda
на мероприятиях SQSОб этом спросили и ответили некоторое время назад, но, только что подумав об этом, я подумал, что добавлю подход.
Как уже упоминалось, Источники событий может быть лучшим выбором здесь. В качестве альтернативы, и я не тестировал это и не думал об этом (так что это своего рода академический), но это можно сделать с помощью шаблона Fan-Out с SNS следующим образом:
1. Create a SNS topic.............................: SNS-topic-01
2. Subscribe a SQS queue to that topic............: SQS-queue-01
3. Subscribe a Lambda Function to that topic......: LAMBDA-func-01
Используя эту конфигурацию, отправка сообщения в тему SNS помещает его в очередь SQS, одновременно вызывая сопутствующую лямбда-функцию. Эта функция Lambda будет написана для чтения той же самой очереди SQS, но с Длинный опрос включен (до 20 секунд), чтобы он не читал очередь до завершения постановки в очередь (т.е. состояние гонки).
По сути, эта схема точно в срок вызывает одну лямбда-функцию для каждого помещенного в очередь сообщения SQS. Я не знаю, как одновременные читатели Long Poll работают с SQS (... неужели кто-то упал?), Но это просто еще один способ решить эту проблему. знак равно