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