ger*_*der 5 javascript amazon-web-services redis aws-lambda
我在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;
};
Run Code Online (Sandbox Code Playgroud)
简短的答案:刚刚设置event.callbackWaitsForEmptyEventLoop = false。
exports.handler = async (event, context) => {
context.callbackWaitsForEmptyEventLoop = false;
...
};
Run Code Online (Sandbox Code Playgroud)
为什么这么重要?
AWS Lambda中NodeJS运行时的默认行为是等待javascript事件循环为空,然后结束lambda的执行并返回值。您可以在此处阅读有关AWS Lambda和node.js事件循环如何工作的更多信息。
因此,当前您的lambda函数正在发生的事情是,与Redis的连接使事件循环保持打开状态,从而使您的函数无法成功结束执行。
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |