Обработка AWS SQS сообщений одновременно с отдельной лямбдой - PullRequest
1 голос
/ 03 марта 2020

Как следует из названия, у меня есть сценарий, который я хотел бы изучить, но не знаю, как go об этом.

У меня есть лямбда-функция processCSVFile. У меня также есть очередь SQS, которая ежедневно в установленное время заполняется ссылкой на файлы CSV из S3, скажем, около 2000 сообщений. Теперь я хочу обрабатывать 25 сообщений одновременно, как только в очереди SQS есть сообщения.

Сценарий, который я ищу, состоит в том, чтобы обрабатывать 25 сообщений одновременно, я хочу, чтобы 25 сообщений обрабатывались 25 лямбда-вызовами отдельно. , Я думал, что мог бы использовать SendMessageBatch функцию в SQS, но это только доставляет сообщения в очередь, это, кажется, не относится к моему случаю использования.

Мой вопрос, могу ли я выполнить действие, описанное выше и если это возможно, какая документация или варианты использования могут объяснить, что я ищу. Кроме того, если этот вариант использования невозможен, что вы рекомендуете в качестве альтернативного способа выполнения обработки, которую я хочу сделать одновременно.

Ответы [ 2 ]

3 голосов
/ 03 марта 2020

Для обработки 25 сообщений от Amazon SQS с 25 одновременными функциями Lambda (1 сообщение на каждую выполняющуюся функцию Lambda) вам потребуется:

  • A максимальный параллелизм из 25, настроенных для лямбда-функция (в противном случае она может быть go выше, чем эта, когда доступно больше сообщений)
  • A размер пакета из 1, настроенный на лямбда-триггер, так что SQS передает ему только одно сообщение в время

См .:

2 голосов
/ 03 марта 2020

Я думаю, что комбинация источника событий lambda для sqs и установки зарезервированного параллелизма в 25 может быть способом go.

Лямбда использует длинный пул для подготовки пакетов сообщений к параллельной обработке лямбда. Таким образом, каждый вызов вашей функции может получать более 1 сообщения за раз.

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

Зарезервированный параллелизм 25 гарантирует, что вы не будете выполнять больше, чем 25 функций параллельно. Если вы оставите значение по умолчанию, вы можете использовать любой свободный параллелизм, который есть в вашей учетной записи.

Редактировать:

@ Джон Ротенштейн уже подтвердил, что есть способ настроить лямбду для передачи сообщения времени вашей функции.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...