2017-02-16 42 views
1

我正在使用Lambda連接到RDS與VPC並正常工作。 我可以成功從mysql獲取數據,但Lambda會超時。Lambda從mysql RDS獲取數據,但超時

CloudWatch的日誌:

2017-02-15T18:56:18.609Z [RowDataPacket {USERINFO: 'xxx' 的}]
END的requestId:XXX REPORT的requestId:XXX持續時間:300001.69毫秒持續時間帳單:300000毫秒內存大小:512 MB最大內存使用:22 MB
2017-02-15T19:01:18.306Z XXX任務300.00秒

Handle.js

後超時個
db.getPersonInfo("xxx", function (err, result) { 
    console.log(result); 
    const response = { 
      statusCode: 200, 
      body: JSON.stringify({ 
      message: 'test', 
      input: event, 
      }), 
     }; 
    callback(null, response); 
}); 

DB.js

var getPersonInfo = function(userId, callback){ 
    pool.getConnection(function(err, connection){ 
     var sql = 'SELECT userInfo FROM user where userId = ?'; 
     connection.query(sql , userFbId , function(err, results) { 
     if(err){ 
      console.log(err); 
     } 
     callback(err, results); 
     connection.release(); 
     }); 
    }); 
    }; 

回答

2

我終於發現,池應該結束。和Lambda工作找到。

var getPersonInfo = function(userId, callback){ 
    pool.getConnection(function(err, connection){ 
     var sql = 'SELECT userInfo FROM user where userId = ?'; 
     connection.query(sql , userId , function(err, results) { 
     if(err){ 
      console.log(err); 
     } 
     callback(err, results); 
     connection.release(); 
     pool.end(function (err) { 
      // all connections in the pool have ended 
     }); 
     }); 
    }); 
    }; 

還有一件事是mysql的createConnection函數必須在lambda啓動時每次運行。這裏是Ref

+0

一旦你在'pool'實例上調用'end(..)'函數,你需要重新初始化它。否則,它會失敗。 – gokhanakkurt

相關問題