Назад | Перейти на главную страницу

Поведение AWS SQS с несколькими установленными лямбда-триггерами

У меня настроена очередь SQS с множественный Лямбды настроены как триггеры. Хотя это разрешено API AWS, не ясно какие предполагаемое поведение.

Например, одно сообщение извлекается из очереди и отправляется каждой лямбде? Или вместо этого каждая лямбда-функция действует как служба опроса, которая отдельно извлекает сообщения из очереди?

Судя по моему тестированию, это последнее, но я не могу нигде найти это задокументировано. Последнее также не имеет для меня большого смысла, учитывая функциональность параллелизма в AWS Lambda.

Сообщение SQS может быть только прочитать один раз из очереди, и пока он обрабатывается одним потребителем, он будет невидим для других потребителей. Если у вас несколько лямбд, каждая из них получит свою долю сообщений, но одно сообщение не будет доставлено более чем одной лямбда за раз.

Сообщения SQS могут быть повторно вставлен в очередь, если обработка Lambda завершилась неудачно (если Lambda запускается очередью) или если сообщение не удалено в пределах таймаут видимости (если Lambda опрашивает очередь).

Если вам нужно, чтобы одно сообщение обрабатывалось одновременно несколькими лямбдами, вы можете:

  1. развернуть Сообщение SQS в SNS у которого будет несколько подписчиков (например, несколько лямбда-выражений, все обрабатывающие одно и то же сообщение), или
  2. использовать Kinesis stream вместо SQS. Kinesis поддерживает нескольких потребителей одного и того же сообщения.

Надеюсь, это поможет :)