我开发了一个节点应用程序,我希望将其称为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 / 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
由于
答案 0 :(得分:0)
我很确定这是由bunyan(dtrace-provider
)中至少1个本机模块依赖引起的。需要在将运行它们的系统上构建/安装本机模块。因此,在Lambda的情况下,您需要在linux ec2实例上运行npm install
或者可能是vagrant,以获得正确版本的dtrace-provider
。
请参阅: Cross-compile node module with native bindings with node-gyp https://aws.amazon.com/blogs/compute/nodejs-packages-in-lambda/(滚动到原生模块)
你可能只是删除Bunyan以验证它是否有效,然后在ec2 / vagrant编译路径下进行修复。