【问题标题】:"errorMessage": Task timed out after 3.00 seconds aws lambda nodejs lambda function trying to connect with RDS“errorMessage”:任务在 3.00 秒后超时 aws lambda nodejs lambda 函数尝试与 RDS 连接
【发布时间】:2017-12-09 09:05:25
【问题描述】:

我在 nodejs 中编写了一个简单的 lambda 函数,它从 amazon rds 查询数据。(注意:我的 lambda 和 rds 在默认 vpc 中,所有端口都打开,并且还尝试在 lambda 中增加超时)

我的问题是,当我测试我的 lambda 函数时,我得到带有查询数据的 日志输出,但我也得到了

执行结果:“errorMessage”失败:“2017-07-05T15:05:27.425Z 596fdf39-6193-11e7-9176-f58796899f9b 任务在 3.00 秒后超时” }

var mysql = require('mysql');

exports.handler = (event, context) => {
var con = mysql.createConnection({
  host: "testdb.cxyzu.ap-south-1.rds.amazonaws.com",
  user: "root",
  password: "mypassword",
  database: "test",
  port: "3306",
 // debug: true
});

con.connect(function(err) {
  if (err) throw err;
  console.log("Connected!");
 // var sql = "INSERT INTO users (id, name) VALUES (4, 'dfdd')";
var sql = "select * from test.users";
  con.query(sql, function (err, result) {
    if (err) throw err;
//    console.log("1 record inserted");
      console.log(result);
  });
});
//callback("sucess");
}

START RequestId: 596fdf39-6193-11e7-9176-f58796899f9b Version: $LATEST
2017-07-05T15:05:24.680Z	596fdf39-6193-11e7-9176-f58796899f9b	Connected!
2017-07-05T15:05:24.684Z	596fdf39-6193-11e7-9176-f58796899f9b	[ RowDataPacket { id: 1, name: 'sai' },
  RowDataPacket { id: 2, name: 'chandra' },
  RowDataPacket { id: 3, name: 'AA' },
  RowDataPacket { id: 4, name: 'dfdd' } ]
END RequestId: 596fdf39-6193-11e7-9176-f58796899f9b
REPORT RequestId: 596fdf39-6193-11e7-9176-f58796899f9b	Duration: 3003.80 ms	Billed Duration: 3000 ms 	Memory Size: 1536 MB	Max Memory Used: 21 MB	
2017-07-05T15:05:27.425Z 596fdf39-6193-11e7-9176-f58796899f9b Task timed out after 3.00 seconds

【问题讨论】:

    标签: amazon-web-services lambda devops serverless-framework


    【解决方案1】:

    您需要通过成功或错误回调退出 lambda。否则,引擎会一直运行,直到发生超时。

    退出 lambda 的最简单方法是调用 'context.succeed("done");'代码完成后。

    var mysql = require('mysql');
    
    exports.handler = (event, context) => {
    var con = mysql.createConnection({
      host: "testdb.cxyzu.ap-south-1.rds.amazonaws.com",
      user: "root",
      password: "mypassword",
      database: "test",
      port: "3306",
     // debug: true
    });
    
    con.connect(function(err) {
      if (err) throw err;
      console.log("Connected!");
     // var sql = "INSERT INTO users (id, name) VALUES (4, 'dfdd')";
    var sql = "select * from test.users";
      con.query(sql, function (err, result) {
        if (err) throw err;
    //    console.log("1 record inserted");
          console.log(result);
          context.succeed("done");
      });
    });
    //callback("sucess");
    }
    

    这里是对该主题的一些基本介绍:

    Lambda Function Handler (Node.js)

    【讨论】:

      【解决方案2】:

      接受的解决方案对我不起作用。我正在连接到一个 RDS 实例,如果我发送“context.succeed(“done”)”,则不会调用回调。

      我正在连接到运行 nodejs 8.1 的 lambda 内的 Amazon RDS 实例。

      解决方案:

      为了退出“Nodejs事件循环”,您必须添加下一个代码来调用回调:

      connection.end( function(err) {
          if (err) {console.log("Error ending the connection:",err);}
      
          //  reconnect in order to prevent the"Cannot enqueue Handshake after invoking quit"
      
          connection = mysql.createConnection({
              host     : 'rds.host',
              port     :  3306,
              user     : 'user',
              password : 'password',
              database : 'target database'
      
          });
          callback(null, {
              statusCode: 200,
              body: response,
      
          });
      });
      

      【讨论】:

        猜你喜欢
        • 2020-11-06
        • 2018-08-08
        • 2019-01-28
        • 1970-01-01
        • 2017-07-25
        • 2018-05-15
        • 2020-11-18
        • 2018-11-22
        • 1970-01-01
        相关资源
        最近更新 更多