AWS Lambda SQS Trigger Throttle / Limit - PullRequest
0 голосов
/ 06 июля 2018

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

Одним из этапов обработки будет попадание в конечную точку API, чтобы получить данные обратно для каждого элемента, добавленного в очередь, и затем сохранить их в таблице DynamoDB. Чтобы управлять затратами и контролировать этот процесс, я хочу ограничить количество вызовов этой лямбда-функции за определенный период времени.

Например, я хочу, чтобы эта функция запускалась максимум 100 раз в день, чтобы не перегружать емкость таблицы DynamoDB или конечную точку API. Также было бы неплохо ограничить его, чтобы он выполнял не более 5 одновременных действий одновременно с задержкой в ​​1 секунду между повторными запусками. Этот тип управления позволил бы мне напрямую сопоставить функцию с пределами таблицы DynamoDB, чтобы гарантировать, что я не превышаю емкость, и соблюдать любые ограничения скорости API.

Я изучил AWS Lambda Managing Concurrency . В частности, раздел «Предел одновременного выполнения на уровне функций». Но в этом разделе, похоже, не рассматривается ограничение в 100 раз в день или задержка в 1 секунду между запуском следующей функции.

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

Есть ли способ использовать AWS SQS и Lambda для достижения этого и ограничения этих функций Lambda?

1 Ответ

0 голосов
/ 06 июля 2018

Я не думаю, что есть способ ограничить количество Lambda-вызовов при использовании SQS в качестве источника событий до 100 в день.

Альтернативным методом было бы использование запланированного события, запускающего лямбду, которая опрашивает очередь SQS. Хотя это может увеличить разрыв между данными, передаваемыми из SQS в DynamoDB, у вас будет намного больше контроля над количеством и скоростью записи в DynamoDB.

Чтобы управлять счетом 100, вы можете либо удерживать состояние ежедневного счета записи внешне (например, S3), либо делить 100 на количество запланированных вызовов, например, 10 вызовов лямбды, которая останавливается после обработки 10 сообщений. В любом случае вам нужно будет убедиться, что ваша лямбда не истечет половину времени при обработке сообщения.

Поскольку один вызов Lambda будет выполнять несколько записей в DynamoDB, вы можете управлять количеством записей в секунду или создавать повторные попытки.

...