【发布时间】:2016-02-16 02:12:46
【问题描述】:
我开发了一个节点应用程序,我想将其称为 AWS Lambda 应用程序。
应用程序按预期作为 AWS Lambda 工作,但我的 CloudWatch 日志总是以以下错误结束:Process exited before completing request。
我编写了一些代码来确保我的context.succeed() 和context.fail() 调用正在发生并且确实如此。但是,当在本地运行时,我还注意到我在 start.js 中成功记录与再次出现命令提示符之间存在延迟,这让我相信一旦进行了这些调用,可能仍有一些节点进程正在发生。这是否会导致错误,如果是,有什么好的方法来分类和解决问题?
相关代码如下:
lambda-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/fail 被调用)
// 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()是否返回承诺?如果不是,您似乎会尝试在users出现之前对其进行迭代。 -
是的。 User.findAll() 返回一个承诺,代码按预期工作。
-
然后我会检查以下内容: 1. 在 Lambda 上设置一个额外的高超时,可能是超时 2. 在本地安装节点 0.10.x 并确保代码仍然运行 3. 如果数据库是 aws 资源确保您的 lambda 具有正确的角色来访问它
-
@Ryan。 lambda 的超时时间已经是 5 分钟。远远超过执行所需的时间。如日志所示,代码按预期作为 lambda 运行。该数据库是 AWS 资源,但由于用户在日志中正确打印,因此可以访问。
标签: javascript node.js amazon-web-services aws-lambda