Відповіді:
Одне, що я зробив, - створити сигнал CloudWatch ApproximateNumberOfMessagesVisible(( >= 1 for 5 minutes) для черги SQS. Сигналізація публікується до теми SNS, яка запускає функцію лямбда. Функція лямбда петлює, поки не очистить чергу.
Щоб спрацювати з тривоги, може зайняти до 5 хвилин, але це працює фантастично для виконання пакетних завдань, не потребуючи опитування черги. (Сигналізація тривоги становить 5 хвилин для активних черг.)
Ти не можеш їхати SQS -> SNS, тільки SNS -> SQS.
Тепер Lambda підтримує планування, так що одним із варіантів є впровадження запитувача SQS у функцію Lambda та запуск його часто.
Ще один варіант, який слід врахувати - чи вам справді потрібна черга. Lambda підтримує асинхронну обробку (через режим виклику події) і повинен прозоро масштабувати горизонтально для обробки паралельних викликів. Якщо ваша лямбда-функція не потребує доступу до центрального магазину стану, який може обмежувати паралельне виконання, ви, ймовірно, можете просто запустити всі виклики паралельно. Я вважаю, що існує 100 одночасних лімітів виконання для кожного облікового запису, тому вам може знадобитися згрупувати свої повідомлення, щоб залишатися під цим.
SQSЧерга може бути підписана на SNSтему і так для обробки отриманих SNSповідомлень. В даний час це неможливо здійснити в іншому напрямку без додаткового кодування (див., Наприклад, LambdaFAQ ).
Я б сказав, що існує кілька варіантів, як це зробити, але це не так елегантно, як використання більш поширеної системи, керованої подіями 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-супутника. Ця функція Lambda була б написана для читання тієї самої черги SQS, але з увімкненим довгим опитуванням (до 20 секунд), щоб вона не читала черги до завершення enqueue (тобто умови гонки).
По суті, ця схема вчасно залучає одну функцію Lambda для кожного інтегрованого повідомлення SQS. Я не знаю, як одночасно працюють читачі Довгого опитування на SQS (... хтось випадає?), Але це лише інший спосіб розглянути це рішення. = :)