AWS Lambda function timing out

筅森魡賤 提交于 2019-12-20 02:43:06

问题


In my local mocha tests the following handler function works just fine. However, when I upload to AWS (using Serverless framework) it times out (unless you don't provide a uid parameter where it then correctly responds immediately).

What's particularly odd is that in less than 3 seconds (timeout is set at 5 seconds), the job completes and even the "post-facto" log message is output but it somehow calling the callback and that is not completing the Lambda function

Here's the cloudwatch log:

]1

And here's the handler function:

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);
    });

};

回答1:


Add the following as the first line of your handler function:

context.callbackWaitsForEmptyEventLoop = false



回答2:


I guess that you're using lambda with "Node.js Runtime 0.10"

So you should add

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

to terminate the execution.

As the AWS lambda document, it mentions that:

The callback is supported only in the Node.js runtime v4.3. If you are using the earlier runtime v0.10.42, you need to use the context methods (done, succeed, and fail) to properly terminate the Lambda function.

Please refer this link for above information



来源:https://stackoverflow.com/questions/40776264/aws-lambda-function-timing-out

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!