AWS Lambda 函数在 axios 调用时有时会出错 API

AWS Lambda function sometimes getting error when axios call API

我的 Lambda 函数 return 在调用 API 时出错 有时 。 (Lambda 同时调用了 2 个不同的 API)

非常有趣的是,我在开始 API 调用之前放置了一些 console.log,但是当 Lambda 启动时它立即出现 return 错误,没有打印任何日志并出现 2 种类型的错误:

{
    “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 总是 returns 数据符合预期。

注意 2: 根据此错误,CloudWatch 中没有任何日志。

注3: Lambda 运行 在Node v12上,RAM超过3000 MB,超时为60秒。

Note4:我评论了 2 个 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:

我总是可以到达 APIs bu url(正如我现在测试的那样,响应没有问题,但可能 10 分钟后 returns 错误,谁知道)但我开始在 AWS 面板的 Api 网关中进行测试,有时开始出现以下错误:

转换前的端点响应正文:{"Message":null}

我不太确定 Lambda 是一个稳定的平台。

在这个 Lambda 中,我使用 ExpressJS 并将 Sequelize 用作 ORM。

好的,这里有 2 个不同的问题:

  • Lambda 包装整个应用程序并开始处理错误,例如 Promise 错误。

为了防止在客户端发生内部服务器错误,我们必须在之后提到.catch() .then() 函数.

  • 另一个问题是代表我们的 API 的 Lambda 函数(通过 Sequelize 和 return 从 RDS 拉取数据为 JSON)。我们仍然收到 Message: null 错误,但我认为它必须与 connection countRDS未关闭 mySQL 个连接。