Когда произойдет, когда я достигну максимального количества одновременных функций Lambda

Когда произойдет, когда я достигну максимального количества одновременных функций Lambda

У меня есть 200 файлов jsonl (json-lines) в контейнере s3. Каждый файл содержит 100 000 JSON для записи в DynamoDB.

Я хочу использовать Lambda для загрузки файла из S3 и пакетной записи его в DynamoDB (файлы уже идеально соответствуют схеме таблицы).

У меня 200 файлов, но я не могу вызывать 200 лямбд одновременно — поскольку DynamoDB ограничен всего 10 000 WCU в секунду, я могу записывать только 10 000 строк в секунду. А лямбды могут существовать только 300 секунд, прежде чем истечет время ожидания.

Как лучше всего это сделать?

Сейчас я думаю о том, чтобы асинхронно вызывать 5 лямбда-функций одновременно и отслеживать файлы журналов, чтобы видеть, сколько из них выполнено, а затем вызывать следующую только после завершения предыдущей?

ИЛИ...

Могу ли я установитьограничение одновременного выполнениядо 5 для лямбда-функции, а затем асинхронно вызывать функцию 200 раз (по одному для каждого файла)? Будет ли AWS автоматически запускать следующую лямбду, когда та завершится?

решение1

Из документации Amazon:

https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html

Устанавливая предел параллелизма для функции, Lambda гарантирует, что распределение будет применено именно к этой функции, независимо от объема трафика, обрабатываемого оставшимися функциями. Если этот предел будет превышен, функция будет ограничена. То, как эта функция будет вести себя при ограничении, будет зависеть от источника события. Для получения дополнительной информации см. Throttling Behavior

Далее из документов aws, касающихся регулирования поведения: https://docs.aws.amazon.com/lambda/latest/dg/concurrent-executions.html#throttling-behavior

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

Синхронный вызов: если функция вызывается синхронно и дросселируется, Lambda возвращает ошибку 429, а вызывающая служба отвечает за повторные попытки. Код ошибки ThrottledReason объясняет, столкнулись ли вы с дросселированием на уровне функции (если указано) или дросселированием на уровне учетной записи (см. примечание ниже). У каждой службы может быть своя политика повторных попыток. Например, CloudWatch Logs повторяет неудачную партию до пяти раз с задержками между повторными попытками. Список источников событий и их тип вызова см. в разделе Поддерживаемые источники событий.

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

Таким образом, если вы установите ограничение на одновременные вызовы (по умолчанию оно равно 1000 для всех ваших функций), то AWS либо выдаст вам код состояния 429 (для запроса-ответа), либо автоматически поставит в очередь и повторит попытку выполнить вашу функцию в течение 6 часов.

Однако не уточняется, как работает функция задержки между повторными попытками.

Связанный контент