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

У меня 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

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

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

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

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

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

Другие вопросы по тегам