Ответы:
Единственное, что я сделал, - это включил тревогу CloudWatch ApproximateNumberOfMessagesVisible
( >= 1 for 5 minutes
) для очереди SQS. Тревога публикуется в теме SNS, которая запускает лямбда-функцию. Лямбда-функция зацикливается, пока не очистит очередь.
Срабатывание по тревоге может занять до 5 минут, но это фантастически работает для задач, запланированных на выполнение пакета, без необходимости опроса очереди. (Степень детализации тревоги составляет 5 минут для активных очередей.)
Ты не можешь идти SQS -> SNS
, только SNS -> SQS
.
Lambda теперь поддерживает планирование, поэтому одним из вариантов является реализация SQS-опроса в функции Lambda и частое его выполнение.
Еще один вариант для рассмотрения - нужна ли вам очередь? Лямбда поддерживает асинхронную обработку (через режим вызова событий) и должна прозрачно масштабироваться горизонтально для обработки параллельных вызовов. Если вашей лямбда-функции не требуется доступ к центральному хранилищу состояний, что может ограничить параллельное выполнение, тогда вы, вероятно, можете просто выполнить все свои вызовы параллельно. Я полагаю, что для каждой учетной записи существует ограничение на 100 одновременных исполнений, поэтому вам может потребоваться пакетировать свои сообщения, чтобы остаться под этим.
SQS
Очередь можно подписать на SNS
тему и так обрабатывать полученные SNS
сообщения. В настоящее время это невозможно в другом направлении без дополнительного кодирования (см., Например, Lambda
FAQ ).
Я бы сказал, что есть несколько вариантов, как это сделать, но это не так элегантно, как использование более распространенной системы, управляемой событиями AWS event->SQS->Lambda
. В противном случае вам может понадобиться настроить / реализовать код для обработки SQS
очередей:
SQS
очередей и последующего запуска Lambda
событий SQSЭто спросили и ответили некоторое время назад, но, подумав об этом сам, я решил добавить подход.
Как уже упоминалось, источники событий могут быть лучшим выбором здесь. В качестве альтернативы, и я не проверял это и не продумывал это (так что это своего рода академический подход), но это может быть возможно сделать через шаблон разветвления с 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 (... один отбрасывается?), Но это просто еще один способ решить эту проблему. знак равно