【问题标题】:Lambda get data from mysql RDS but timeoutLambda 从 mysql RDS 获取数据但超时
【发布时间】:2017-07-05 00:15:40
【问题描述】:

我正在使用 Lambda 通过 VPC 连接到 RDS 并且工作正常。 我可以从 mysql 成功获取数据,但是 Lambda 会超时。

CloudWatch 日志:

2017-02-15T18:56:18.609Z [ RowDataPacket { userInfo: 'xxx'} ]
END RequestId: xxx 报告请求 ID: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();
      });
    });
  };

【问题讨论】:

    标签: mysql node.js lambda node-mysql


    【解决方案1】:

    我终于发现池应该结束了。和 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
            });
          });
        });
      };
    

    还有一件事是每次 lambda 启动时都必须运行 mysql createConnection 函数。这里是Ref

    【讨论】:

    • pool 实例上调用end(..) 函数后,您需要重新初始化它。否则会失败。
    • 我知道回调基本上是停止执行,所以我在 pool.end 之后有回调,否则我们一直在达到连接数限制,然后我在 pool.end 之后有回调,从时间到我们得到 PROTOCOL_SEQUENCE_TIMEOUT 的时候,因为 pool.end 基本上是一个承诺。所以我把回调移到了 pool.end 里面,现在好像没问题了。
    猜你喜欢
    • 2020-01-17
    • 2017-10-12
    • 2017-10-05
    • 2017-07-25
    • 2018-09-03
    • 2021-08-28
    • 1970-01-01
    • 2020-05-14
    • 2021-09-10
    相关资源
    最近更新 更多