gpt4 book ai didi

node.js - 只要存在数据库调用,AWS Lambda 函数就会导致超时

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:44 25 4
gpt4 key购买 nike

我有一个 API 网关,其中包含一些 AWS Lambda 函数,这些函数进行数据库调用(使用sequelize.js)并将结果作为 JSON 对象返回。

当我在本地运行代码时,我会得到结果,但是当我部署代码时,任何包含数据库调用的方法都会导致内部服务器错误。

以下代码返回消息:

module.exports.testFunction = (event, context, callback) => {
return callback(null, {
statusCode: 200,
body: JSON.stringify({
message: 'Test function is working.'
})
});
};

以下代码将数据库结果记录在 CloudWatch 中,但 API 调用在 6 秒后超时,然后返回内部服务器错误 (502):

module.exports.getAll = (event, context, callback) => {
Entity.findAll().then(result => {
console.log(JSON.stringify(result));
return callback(null, {
statusCode: 200,
body: JSON.stringify(result)
});
});
};

有什么解决方案可以让返回成功吗?

最佳答案

首先恭喜您能够成功识别问题。然而,从发生的问题中可以学到很多概念。让我们讨论其中的几个。

Lambda 冷启动问题

要理解 lambda 中冷启动的概念,不可避免地要在不了解 AWS Lambda 工作原理的情况下进一步深入。请参阅下面提到的链接,该链接解释了 AWS re:Invent 2018

中共享的 lambda 的整体工作原理

AWS Lambda 底层(视频链接):https://www.youtube.com/watch?v=QdzV04T_kec

回到冷启动问题,由于我们的 lambda 函数是在容器中执行的,因此执行后,如果在不活动的大约 15 分钟内没有进一步的函数调用,容器就会被终止。一旦容器被终止,任何 future 执行相同函数的调用都将需要设置一个新容器,这可能需要 >5 秒(最可能的原因是 api 调用在 6 秒后终止)。然而,有许多可用的选项可以让您的 lambda 保持温暖。请参阅下面提到的无服务器社区链接。

保持 Lambda 函数的温暖(博客链接):https://serverless.com/blog/keep-your-lambdas-warm/

增加 Lambda 超时

“我必须进入 AWS 控制台并将超时时间增加到 20 秒”。

<小时/>

虽然,这种方法是完全可以接受的,但由于您使用的是无服务器技术(显式的 serverless.yml 文件),您可以直接更改默认的 lambda 超时时间(6 秒)。请参阅下面提到的代码片段和链接以进一步了解。

provider:
name: was
runtime: nodejs6.10
memorySize: 512 # optional, in MB, default is 1024
timeout: 10 # optional, in seconds, default is 6

无服务器 AWS Lambda 函数指南(博客链接):https://serverless.com/framework/docs/providers/aws/guide/functions/

关于node.js - 只要存在数据库调用,AWS Lambda 函数就会导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56185897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com