繁体   English   中英

AWS Lambda function axios 调用 API 时有时会出错

[英]AWS Lambda function sometimes getting error when axios call API

我的 Lambda function 在调用 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 function,与 Api 网关中的代理具有相同的域,但我检查过 API 总是按预期返回数据。

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

注3: Lambda运行在Node v12上,RAM大于3000MB,超时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。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM