Я получаю расплывчатую ошибку "Rate Exceeded" при вызове AWS Lambda от другого. Есть ли способ отследить, какая скорость превышается?
У меня есть процесс, который принимает файл и помещает каждую строку в поток Kinesis. Существуют лямбда, настроенные на использование потока Kinesis в качестве источника событий. Цель - максимально быстро обработать большие файлы.
Поток Kinesis настроен на 50 осколков. Ошибка «Превышена скорость» возникает, когда лямбда-прослушивание событий Kinesis вызывает другую лямбду.
Вот блок catch, фиксирующий ошибку:
} catch (ex) {
if (ex instanceof RetryableError) {
console.error('Error processing record, retry enabled.', ex);
} else {
console.error('Error processing record, retry disabled.', ex);
}
}
Журналы CloudWatch показывают:
2018-09-10T06:55:03.454Z d04484eb-e006-4180-8618-0c543497a637 Error processing record, retry disabled. Error: 500 - "Rate exceeded"
at httpRequest.then.catch.err (/var/task/fileProcessor/streamProcessor/index.js:105442:19)
at tryCatcher (/var/task/fileProcessor/streamProcessor/index.js:5811:23)
at Promise._settlePromiseFromHandler (/var/task/fileProcessor/streamProcessor/index.js:76426:31)
at Promise._settlePromise (/var/task/fileProcessor/streamProcessor/index.js:76483:18)
at Promise._settlePromise0 (/var/task/fileProcessor/streamProcessor/index.js:76528:10)
at Promise._settlePromises (/var/task/fileProcessor/streamProcessor/index.js:76603:18)
at Async._drainQueue (/var/task/fileProcessor/streamProcessor/index.js:76829:16)
at Async._drainQueues (/var/task/fileProcessor/streamProcessor/index.js:76839:10)
at Immediate.Async.drainQueues (/var/task/fileProcessor/streamProcessor/index.js:76713:14)
at runCallback (timers.js:794:20)
at tryOnImmediate (timers.js:752:5)
at processImmediate [as _immediateCallback] (timers.js:729:5)
Обычно первые 1-10 (из 5000) строк обрабатываются нормально. Тогда эта ошибка завершается ошибкой остальных строк.
Согласно странице Lambda Monitor, максимальное число одновременных выполнений составляет 492, и это N. Вирджиния, поэтому ограничение равно 1000. Однако отладка показала, что ошибка вызывается кодом, который отправляет HTTP-запрос на вызов. другая лямбда.
Я проверил журналы CloudWatch другой Lambda, и каждый запрос обрабатывается правильно. Похоже, что обработка запросов Lambda блокируется этой ошибкой.