Превышена скорость на AWS Lambda с использованием API-шлюза и безсерверной инфраструктуры - PullRequest
4 голосов
/ 14 марта 2019

Когда я пытаюсь вызвать метод с HTTP-событием, это приводит к 500 Internal server error.

В журналах CloudWatch отображается Recoverable error occurred (Rate Exceeded.)

Когда я пытаюсь вызвать функцию без лямбды, она выполняется с ответом.

Вот мой бессерверный конфиг:

config

1 Ответ

3 голосов
/ 14 марта 2019

Вы установили для своей лямбды значение reservedConcurrency, равное 0. Это предотвратит активацию вашей лямбды.Установка его в 0 обычно полезна, когда ваши функции вызываются, но вы не уверены, почему, и вы хотите немедленно остановить его.

Если вы хотите, чтобы он вызывался, измените reservedConcurrency на положительныйцелое число (по умолчанию это может быть положительное целое число <= 1000, но вы можете увеличить этот лимит, связавшись с AWS) или просто удалить атрибут <code>reservedConcurrency из вашего файла .yml, поскольку он будет использовать значения по умолчанию.

Зачем вообще когда-либо использовать reservedConcurrency?Хорошо, скажем, ваши лямбда-функции запускаются запросами от API Gateway.Допустим, вы получаете 400 (пиковых часов) запросов в секунду, и при каждом запросе запускаются две другие функции Lambda: одна для создания миниатюры для заданного изображения и одна для вставки метаданных в DynamoDB.Теоретически у вас должно быть 1200 лямбда-функций, запущенных одновременно (если все ваши лямбда-функции завершат свое выполнение менее чем за секунду).Это привело бы к регулированию, так как одновременное выполнение по умолчанию для лямбда-функций равно 1000. Но настолько ли важна генерация миниатюр, как запросы, поступающие от API Gateway?Скорее всего, не так, как это, естественно, в конечном итоге непротиворечивая задача, поэтому вы можете установить reservedConcurrency на миниатюре Lambda только на 200, так что вы не израсходуете свой параллелизм, то есть другие функции смогут раскрутиться, чтобы сделать что-то более полезноев данный момент времени (в нашем примере получение HTTP-запросов важнее, чем генерация миниатюр).Затем остальные 800 левых параллелизмов можно было бы разделить между функцией, запускаемой из API Gateway, и функцией, которая вставляет данные в DynamoDB, предотвращая тем самым регулирование важности и поддерживая не столь важные вещи в конечном итоге согласованными.

...