Функция AWS Lambda иногда получает ошибку при вызове API Axios

Моя лямбда-функция возвращает ошибки иногда при вызове API. (есть 2 разных API, которые Lambda вызывает одновременно)

Очень интересно, что я поместил несколько console.log перед запуском вызова API, но когда Lambda запускает, он сразу же возвращает ошибку, не печатая журнал и не получая ошибок двух типов:

{
    “errorType”: “Runtime.UnhandledPromiseRejection”,
    “errorMessage”: “Error: socket hang up”,
    “trace”: [
        “Runtime.UnhandledPromiseRejection: Error: socket hang up”,
        ”    at process.<anonymous> (/var/runtime/index.js:35:15)“,
        ”    at process.emit (events.js:310:20)“,
        ”    at processPromiseRejections (internal/process/promises.js:209:33)“,
        ”    at processTicksAndRejections (internal/process/task_queues.js:98:32)”
    ]
}


{
  “errorType”: “Runtime.UnhandledPromiseRejection”,
  “errorMessage”: “Error: Client network socket disconnected before secure TLS connection was established”,
  “trace”: [
    “Runtime.UnhandledPromiseRejection: Error: Client network socket disconnected before secure TLS connection was established”,
    ”    at process.<anonymous> (/var/runtime/index.js:35:15)“,
    ”    at process.emit (events.js:310:20)“,
    ”    at processPromiseRejections (internal/process/promises.js:209:33)“,
    ”    at processTicksAndRejections (internal/process/task_queues.js:98:32)”
  ]
}

Примечание 1. API - это еще одна функция Lambda с тем же доменом, что и прокси в шлюзе Api, но я проверил, что API всегда возвращает данные, как ожидалось.

Примечание 2: где нет журналов в CloudWatch, основанных на этой ошибке.

Примечание 3. Lambda работает на узле v12, объем ОЗУ превышает 3000 МБ, а время ожидания составляет 60 секунд.

Примечание 4: я прокомментировал один из двух API и сейчас получаю ошибку ниже:

{
     "errorType": "Runtime.UnhandledPromiseRejection",
     "errorMessage": "Error: read ECONNRESET",
      "trace": [
      "Runtime.UnhandledPromiseRejection: Error: read ECONNRESET",
      "    at process.<anonymous> (/var/runtime/index.js:35:15)",
      "    at process.emit (events.js:310:20)",
      "    at processPromiseRejections 
  (internal/process/promises.js:209:33)",
      "    at processTicksAndRejections 
  (internal/process/task_queues.js:98:32)"
    ]
  }

Обработчик:

'use strict'
console.log("in APP 1");
const awsServerlessExpress = require('aws-serverless-express');
console.log("APP 2");

//express app
const app = require('./start-server');
console.log("in APP 3");

const binaryMimeTypes = [
    'application/json',
    'text/html',
];
console.log("in APP 4");

const server = awsServerlessExpress.createServer(app,null,binaryMimeTypes);

console.log("in APP 5");

exports.handler = (event, context) => awsServerlessExpress.proxy(server, event, context)

Примечание 5:

Я всегда могу связаться с API-адресом bu url (как я тестировал прямо сейчас, в ответах нет проблем, но, возможно, через 10 минут возвращается ошибка, кто знает), но я начинаю тестировать в шлюзе Api на панели AWS и иногда начинаю получать ошибку ниже:

Тело ответа конечной точки до преобразований: {Message: null}

Я не совсем уверен, что Lambda - стабильная платформа.

В этой Lambda я использую ExpressJS и использую Sequelize как ORM.


person Ali SadeghipourKorabaslo    schedule 28.07.2020    source источник


Ответы (1)


Итак, здесь были две разные проблемы:

  • Лямбда обертывает все приложение и начинает обрабатывать такие ошибки, как ошибки обещаний.

Чтобы предотвратить внутреннюю ошибку сервера на стороне клиента, мы должны упомянуть .catch () после функции .then ().

  • Другой проблемой была лямбда-функция, которая представляет наш API (извлекает данные из RDS с помощью Sequelize и возвращает как JSON). мы по-прежнему получаем сообщение об ошибке Сообщение: null, но я думаю, что это должно быть связано с количеством подключений к RDS или не закрыто соединения mySQL.
person Ali SadeghipourKorabaslo    schedule 28.07.2020