AWS одновременных вызовов лямбда-дросселя из указанного c источника события - PullRequest
0 голосов
/ 10 марта 2020

Я создал динамические c sqs стандартные очереди, которые используются в качестве источника событий для моего вызова лямбда-функции. Всякий раз, когда какое-либо сообщение помещается в очередь, вызывается лямбда-функция. Теперь я хочу добавить немного регулирования в свою лямбда-функцию, например, чтобы один источник событий мог иметь только один активный вызов лямбды за раз. Есть несколько ответов , но они работают только для регулирования общего лямбда-параллелизма.

Ответы [ 3 ]

1 голос
/ 10 марта 2020

С Управление параллелизмом для лямбда-функции :

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

Следовательно, зарезервированный параллелизм может использоваться для ограничения число одновременных выполнений спецификатора c AWS лямбда-функции.

0 голосов
/ 11 марта 2020

AWS Лямбда-функции также могут запускаться из очереди Amazon SQS FIFO .

С Новое для AWS Лямбда - SQS FIFO в качестве источника события | AWS Compute Blog :

В очередях SQS FIFO использование более одной MessageGroupId позволяет Lambda масштабировать и обрабатывать больше элементов в очереди с использованием большего ограничения параллелизма. Общий параллелизм равен или меньше числа уникальных идентификаторов MessageGroupIds в очереди SQS FIFO.

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

0 голосов
/ 10 марта 2020

Короткий ответ: да, это может быть сделано, но только окольным путем.

Если у вас установлена ​​лямбда-функция в качестве запускаемой функции в очереди SQS, служба Lambda опрашивает очередь и обрабатывает прием и удаление сообщения из очереди. Единственный контроль над тем, сколько сообщений читает служба Lambda и сколько экземпляров вашей функции вызывает служба Lambda, - это (a) размер пакета и (b) параллелизм функции.

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

Итак, вот способ, которым это может быть достигнуто: создайте другую функцию с пределом параллелизма: 1, установите его как запускаемую функцию вместо вашей функции. Эта функция будет получать сообщения, и она в свою очередь вызовет вашу функцию с указанным сообщением (ями). Он будет ждать возврата вашей функции, прежде чем вернуться сам. Только когда новая функция вернется, она сможет получить другое сообщение / пакет от службы Lambda и снова вызвать вашу функцию. Таким образом, ваша «реальная» функция не имеет общего ограничения параллелизма, но только один экземпляр может быть запущен / запущен одновременно из вашего источника SQS (через новую функцию).

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