由挂起引起的AWS Lambda函数“在完成请求之前退出流程”?

时间:2016-02-14 00:42:51

标签: javascript node.js amazon-web-services 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 / 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

由于

1 个答案:

答案 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编译路径下进行修复。