【问题标题】:AWS Lambda function sometimes getting error when axios call API当 axios 调用 API 时,AWS Lambda 函数有时会出错
【发布时间】:2020-07-29 02:26:27
【问题描述】:

我的 Lambda 函数在调用 API 时有时返回错误。 (Lambda 会同时调用 2 个不同的 API)

非常有趣的是,我在启动 API 调用之前放置了一些 console.log,但是当 Lambda 启动时,它会立即返回错误,而不会打印任何日志并得到 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 Gateway 中具有相同的域和代理,但我检查了 API 始终按预期返回数据。

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

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

注意 4:我评论了 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:

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

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

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

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

【问题讨论】:

    标签: aws-lambda aws-api-gateway aws-certificate-manager


    【解决方案1】:

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

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

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

    • 另一个问题是代表我们的 API 的 Lambda 函数(通过 Sequelize 从 RDS 中提取数据并返回为 JSON)。我们仍然收到 Message: null 错误,但我认为它必须与 连接计数RDS非关闭 有关mySQL 连接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      相关资源
      最近更新 更多