gpt4 book ai didi

javascript - 为什么我的 AWS Lambda 函数总是超时?

转载 作者:IT王子 更新时间:2023-10-29 05:58:48 25 4
gpt4 key购买 nike

我有一个在 node.js 8.10 上运行的 AWS Lambda 函数。此函数使用 ioredis 连接到 Redis 服务器库,获取一个键的值,然后返回该值。我可以在日志中看到连接成功,并且成功检索到值。但是,响应永远不会返回,如果我查看日志,我可以看到 lambda 总是超时。

为什么会一直这样?是否有某种原因导致 lambda 继续运行而不是从 Redis 返回值?

这是我的 lambda 函数中的代码:

const Redis = require('ioredis');
const redis = new Redis(6379, 'http://redis.example.com');

exports.handler = async (event, context) => {
const value = await redis.get('mykey');
console.log('value', value); // this shows up in Cloudwatch logs
return value;
};

最佳答案

简短的回答:只需设置 event.callbackWaitsForEmptyEventLoop = false

exports.handler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
...
};

为什么这很重要?

AWS Lambda 中 NodeJS 运行时的默认行为是等待 javascript 事件循环为空,然后结束 lambda 的执行并返回一个值。您可以阅读更多有关如何 AWS Lambda and the node.js event loop works here 的信息。 .

那么您的 lambda 函数目前正在发生的事情是与 Redis 的连接保持事件循环打开,从而阻止您的函数成功结束执行。

关于javascript - 为什么我的 AWS Lambda 函数总是超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55894789/

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