ВРЕМЯ выхода из Tedious в Lambda

#amazon-web-services #aws-lambda #amazon-rds #tedious

#amazon-веб-сервисы #aws-lambda #amazon-rds #утомительный

Вопрос:

Настройка

  • AWS Lambda (время ожидания 3 секунды)
  • NodeJS 12.x
  • mssql 2.6.1
  • tedious (зависимость от mssql и поэтому он устанавливает tedious 6.7.0)
  • База данных SQL Server в RDS (db.t3.small)

Я также имею дело с изрядным количеством трафика, примерно с 1 тыс. вызовов в минуту.

Проблема

Большую часть времени лямбда выполняется просто отлично. Примерно в 0,35% случаев лямбда выдает ошибку. Журналы выглядят следующим образом:

Cloudwatchlog

На скриншоте вы можете видеть, что функция запускается, печатает некоторую информацию об отладке, затем выдает ошибку, завершает работу и сообщает.

Хотя это ошибка «тайм-аута», в сообщении об ошибке говорится,

Ошибка запроса: время ожидания: запрос не удалось завершить за 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)"
    ]
}