AWS Lambda function never calls the callback

寵の児 提交于 2019-12-12 10:37:18

问题


I've created a node lambda function that does a simple call to an Aurora database. When I test the function in the console, the query returns, I can see the results in the log, but the callback never seems to get called and so my lambda function times out. I can't figure out what the problem is. Hopefully someone here can point me to the problem.

var mysql = require("mysql");

module.exports.handler = function(event, context, cb) {
  console.log('start\n');
  var con = mysql.createConnection({
    ...
  });
  console.log('call data\n');

  con.query('SELECT * FROM Tags', function(err, rows) {
    console.log('Data received from Db:\n');
    console.log(rows);

    console.log('calling callback');

    cb(null, 'Success');

    console.log('callback called');
  });
  console.log('data called\n');
};

The resulting Cloudwatch log is as follows...

2016-07-25T14:20:05.343Z    daf5cd6b-5272-11e6-9036-e73ad17006df    start  
2016-07-25T14:20:05.398Z    daf5cd6b-5272-11e6-9036-e73ad17006df    call data  
2016-07-25T14:20:05.405Z    daf5cd6b-5272-11e6-9036-e73ad17006df    data called  
2016-07-25T14:20:05.440Z    daf5cd6b-5272-11e6-9036-e73ad17006df    Data received from Db:  
2016-07-25T14:20:05.440Z    daf5cd6b-5272-11e6-9036-e73ad17006df    [ 
    RowDataPacket {
        id: 1,
        externalId:
        'a87ead34de7e',
        orgId: 1,
        name: 'lacinia sapien',
        createdDate: 1448598369,
        modifiedDate: 0
    },
    ...,
    RowDataPacket {
        id: 50,
        externalId: '9ebaaab372e3',
        orgId: 1,
        name: 'et commodo',
        createdDate: 1451551837,
        modifiedDate: 0
    }
]
2016-07-25T14:20:05.483Z    daf5cd6b-5272-11e6-9036-e73ad17006df    calling callback 
2016-07-25T14:20:05.483Z    daf5cd6b-5272-11e6-9036-e73ad17006df    callback called 
END RequestId: daf5cd6b-5272-11e6-9036-e73ad17006df 
REPORT RequestId: daf5cd6b-5272-11e6-9036-e73ad17006df  Duration: 300000.12 ms  Billed Duration: 300000 ms Memory Size: 1024 MB Max Memory Used: 52 MB   
2016-07-25T14:25:05.341Z daf5cd6b-5272-11e6-9036-e73ad17006df Task timed out after 300.00 seconds 

回答1:


Thanks to this question...

Lambda Timing out after calling callback

I found the problem. the Node mysql module keeps the connection open until the server closes it unless it is explicitly closed by the handler logic.

So the node event loop never empties and so never returns the callback. In the above code, I did a ...

con.end();

before calling the callback and it worked.



来源:https://stackoverflow.com/questions/38570839/aws-lambda-function-never-calls-the-callback

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