AWS Lambda功能超时

时间:2016-11-24 00:19:30

标签: amazon-web-services aws-lambda

在我的本地mocha测试中,以下处理函数工作正常。但是,当我上传到AWS(使用无服务器框架)时,它会超时(除非您没有提供uid参数,然后它会立即正确响应。)

特别奇怪的是,在不到3秒钟内(超时设置为5秒),作业完成,甚至输出“post-facto”日志消息,但它以某种方式调用回调并且没有完成Lambda功能

这是cloudwatch日志:

![enter image description here] 1

这是处理程序函数:

export const handler = (event: IRequestInput, context: IContext, cb: IGatewayCallback) => {
  console.log('EVENT:\n', JSON.stringify(event, null, 2));
  const uid = _.get(event, 'queryStringParameters.uid', undefined);
  if(!uid) {
    cb(null, {
      statusCode: 412,
      body: 'no User ID was provided by frontend'
    });
    return;
  }

  oauth.getRequestToken()
    .then(token => {
      console.log('Token is:\n', JSON.stringify(token, null, 2));
      console.log('User ID: ', uid);
      token.uid = uid;
      return Promise.resolve(token);
    })
    .then((token) => {
      console.log('URL: ', token.url);
      cb(null, {
        statusCode: 200,
        body: token.url
      });
      console.log('post-facto');
    })
    .catch((err: PromiseError) => {
      console.log('Problem in getting promise token: ', err);
      cb(err.message);
    });

};

2 个答案:

答案 0 :(得分:8)

将以下内容添加为处理函数的第一行:

context.callbackWaitsForEmptyEventLoop = false

答案 1 :(得分:0)

我猜你正在使用lambda和#34; Node.js Runtime 0.10"

所以你应该添加

context.done(null, 'Terminate Lambda');

终止执行。

作为AWS lambda文档,它提到:

  

仅在Node.js运行时v4.3中支持回调。如果你   正在使用早期的运行时v0.10.42,您需要使用上下文   方法(完成,成功和失败)以正确终止Lambda   功能

请参阅此link以获取以上信息