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 count 到 RDS 或 未关闭 mySQL 个连接。
我的 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 count 到 RDS 或 未关闭 mySQL 个连接。