我开发了一个节点应用程序,我希望将其称为AWS Lambda应用程序。AWS Lambda函数“在完成请求之前退出进程”引起的挂起?
该应用程序按照AWS Lambda预期的方式工作,但是我的CloudWatch日志始终以如下错误结束:Process exited before completing request
。
我写了一些代码,以确保我的context.succeed()
和context.fail()
调用正在发生,他们是。然而,当我在本地运行时,我还注意到我在start.js
的成功记录和再次出现的命令提示符之间存在延迟,这让我相信一旦这些调用完成后,仍然会发生一些节点进程。这是否会导致错误,如果有的话,什么是分类和解决问题的好方法?
相关的代码是下面:
λ-handle.js
import log from './log';
import database from './database';
import User from './database/models/user';
export function handle(event, context) {
log.info('CS Blogs Feed Aggregator Started');
database.sync()
.then(() =>
User.findAll({
attributes: ['id', 'blogFeedURI']
}))
.then(users => {
users.forEach(user => {
log.info({ user }, 'User loaded from database');
});
})
.then(() => {
// context.done() called so AWS knows function completed successfully
context.succeed();
})
.catch(error => {
context.fail(error);
});
}
start.js(用于测试context.succeed /失败被调用)
// This function invokes the AWS Lambda Handle as AWS would
// but allows you to do it from your local machine for development
// or from a non-AWS server
import { handle } from './lambda-handle';
import log from './log';
handle({}, {
succeed: result => {
log.info({ result: result || 'No result returned' }, 'Process succeeded');
},
fail: error => {
log.error({ error: error || 'No error returned' }, 'Process failed');
}
});
代码在部署前由babel转发。但是,我怀疑还有更多的逻辑问题,所以我已经向您展示了原始源代码。
如果有任何更多信息需要存储库,请访问:https://github.com/csblogs/feed-downloader/tree/fix/lambda-implementation-details
感谢
'User.findAll()'是否返回承诺?如果不是这样,似乎你会试图在它之前迭代“用户”。 – Ryan
是的。 User.findAll()返回一个承诺,代码按预期工作。 – DanTonyBrown
然后,我会检查以下内容:1.在Lambda上设置一个额外的高超时时间,也许它超时2.在本地安装节点0.10.x并确保代码仍然运行3.如果数据库是aws资源,请确保您的lambda拥有正确的角色来访问它 – Ryan