#amazon-web-services #aws-lambda #amazon-rds #tedious
#amazon-веб-сервисы #aws-lambda #amazon-rds #утомительный
Вопрос:
Настройка
- AWS Lambda (время ожидания 3 секунды)
- NodeJS 12.x
mssql
2.6.1tedious
(зависимость отmssql
и поэтому он устанавливает tedious 6.7.0)- База данных SQL Server в RDS (db.t3.small)
Я также имею дело с изрядным количеством трафика, примерно с 1 тыс. вызовов в минуту.
Проблема
Большую часть времени лямбда выполняется просто отлично. Примерно в 0,35% случаев лямбда выдает ошибку. Журналы выглядят следующим образом:
На скриншоте вы можете видеть, что функция запускается, печатает некоторую информацию об отладке, затем выдает ошибку, завершает работу и сообщает.
Хотя это ошибка «тайм-аута», в сообщении об ошибке говорится,
Ошибка запроса: время ожидания: запрос не удалось завершить за 15000 мс
Это меня смущает, потому что, как вы видите в журнале ОТЧЕТОВ, время вызова составило всего 255,33 мс.
Вопрос
Очевидный вопрос в том, как что-то заканчивается через 15 секунд всего за 255 мс? Это проблема с tedious
, mssql
моим кодом или что-то еще? Если мой код имеет отношение к вопросу, пожалуйста, дайте мне знать, и я смогу его добавить. Я предполагаю, что код в основном функционален, потому что он работает > 99% времени.
Неудачные теории:
- Журналы чередуются, и ошибки не связаны с вызовом 225 мс. Это неправильно, потому что на скриншоте идентификатор запроса совпадает.
- Периодически возникает ошибка подключения к базе данных, возможно, проблема с DNS. Я видел очень редкие
EAIAGAIN
ошибки DNS при разрешении узла DB, но это, похоже, не соответствует устойчивости этой ошибки. - Я не заметил ничего супер полезного в вопросах GitHub для Tedious.
Полная ошибка
{
"errorType": "Runtime.UnhandledPromiseRejection",
"errorMessage": "RequestError: Timeout: Request failed to complete in 15000ms",
"reason": {
"errorType": "RequestError",
"errorMessage": "Timeout: Request failed to complete in 15000ms",
"code": "ETIMEOUT",
"originalError": {
"errorType": "RequestError",
"errorMessage": "Timeout: Request failed to complete in 15000ms",
"code": "ETIMEOUT",
"message": "Timeout: Request failed to complete in 15000ms",
"stack": [
"RequestError: Timeout: Request failed to complete in 15000ms",
" at RequestError (/var/task/node_modules/mssql/node_modules/tedious/lib/errors.js:32:12)",
" at Connection.requestTimeout (/var/task/node_modules/mssql/node_modules/tedious/lib/connection.js:1212:46)",
" at Timeout._onTimeout (/var/task/node_modules/mssql/node_modules/tedious/lib/connection.js:1180:14)",
" at listOnTimeout (internal/timers.js:549:17)",
" at processTimers (internal/timers.js:492:7)"
]
},
"name": "RequestError",
"number": "ETIMEOUT",
"precedingErrors": [],
"stack": [
"RequestError: Timeout: Request failed to complete in 15000ms",
" at Request.userCallback (/var/task/node_modules/mssql/lib/tedious/request.js:429:19)",
" at Request.callback (/var/task/node_modules/mssql/node_modules/tedious/lib/request.js:56:14)",
" at Connection.endOfMessageMarkerReceived (/var/task/node_modules/mssql/node_modules/tedious/lib/connection.js:2407:20)",
" at Connection.dispatchEvent (/var/task/node_modules/mssql/node_modules/tedious/lib/connection.js:1279:15)",
" at Parser.<anonymous> (/var/task/node_modules/mssql/node_modules/tedious/lib/connection.js:1072:14)",
" at Parser.emit (events.js:315:20)",
" at Parser.EventEmitter.emit (domain.js:482:12)",
" at Parser.<anonymous> (/var/task/node_modules/mssql/node_modules/tedious/lib/token/token-stream-parser.js:37:14)",
" at Parser.emit (events.js:315:20)",
" at Parser.EventEmitter.emit (domain.js:482:12)"
]
},
"promise": {},
"stack": [
"Runtime.UnhandledPromiseRejection: RequestError: Timeout: Request failed to complete in 15000ms",
" at process.<anonymous> (/var/runtime/index.js:35:15)",
" at process.emit (events.js:315:20)",
" at process.EventEmitter.emit (domain.js:482:12)",
" at processPromiseRejections (internal/process/promises.js:209:33)",
" at processTicksAndRejections (internal/process/task_queues.js:98:32)"
]
}