【发布时间】:2023-02-16 17:11:55
【问题描述】:
当我有一个长时间运行的查询时,我得到 internal server error。
实际上,我必须通过 API 获取历史数据,有时可能需要超过 30 秒的时间。这取决于查询的复杂程度。也可能需要 1 分钟。
不确定但猜测,API 网关超时设置为 30 秒(我不能增加它)并且我的查询执行时间超过 30 秒。所以我得到internal server error我相信。
我怎么能说上面的陈述?
因为如果我在本地运行相同的查询,我的意思是通过运行 npm run start 在本地节点/express 中运行,即使需要 1 分钟,它也能正常工作,响应总是会回来。
但是当我部署节点/快递lambda 函数的代码,如果任何查询需要更长的执行时间,它就会抛出错误。
我有以下节点/快递设置
const express = require("express");
const serverless = require("serverless-http");
const app = express();
app.use(cors());
app.use((req, res, next) => {
res.setHeader('Connection', 'keep-alive'); // I added this line as suggested in some post but not helping
res.setHeader('Keep-Alive', 'timeout=30'); // I added this line as suggested in some post but not helping
res.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type");
res.setHeader("Access-Control-Allow-Origin", "*");
res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, PATCH, DELETE");
res.setHeader("Access-Control-Allow-Credentials", true);
next();
});
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(`api-end-point/user`, userRoute);
....
if (process.env.NODE_ENV !== "lambda") {
PORT = process.env.PORT || 7000;
const server = app.listen(PORT, () => {
console.log(`node-express server running in ${process.env.NODE_ENV} mode on ${PORT}`);
});
server.timeout = 0;
}else {
module.exports.handler = serverless(app); // this is for lambda function
}
我将此代码部署到 AWS lambda 函数。
HTTP API网关配置了两条路由/ANY, /{proxy+}
暂停
API网关设置为默认值 30 seconds。[我不能增加这个时间,因为 AWS 不允许]
拉姆达设置为10 **mins**
我真的不知道该如何解决这个问题?
如何增加 API 网关超时或如何使连接保持活动状态?
【问题讨论】:
-
Bdw 我认为您还可以查看与 lambda 函数关联的 cloudwatch 日志,以查看它占用了多少或任何其他内部服务器错误。
标签: node.js amazon-web-services express aws-lambda aws-api-gateway