Lambda NodeJS MySQL任务超时

Lambda NodeJS MySQL任务超时,mysql,node.js,amazon-web-services,aws-lambda,amazon-rds,Mysql,Node.js,Amazon Web Services,Aws Lambda,Amazon Rds,我试图学习如何在AWS中使用lambda函数连接MySQL。我在网上遵循了一些说明,基本上得出了以下代码: var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 1000, connectTimeout : 60 * 60 * 1000, acquireTimeout : 60 * 60 * 1000, t

我试图学习如何在AWS中使用lambda函数连接MySQL。我在网上遵循了一些说明,基本上得出了以下代码:



    var mysql = require('mysql');
    var pool  = mysql.createPool({
        connectionLimit : 1000,
        connectTimeout  : 60 * 60 * 1000,
        acquireTimeout  : 60 * 60 * 1000,
        timeout         : 60 * 60 * 1000,
        host: "foo-bar-123.us-east-2.rds.amazonaws.com",
        user: "root",
        password: "pass123",
        database: "sample_db",
    });

    exports.handler =  (event, context, callback) => {
      // prevent timeout from waiting event loop
      context.callbackWaitsForEmptyEventLoop = false;

      pool.getConnection(function(err, connection) {
        if (err) throw err;

        // Use the connection
        connection.query('SELECT id FROM customer limit 10;', function (error, results, fields) {
          // And done with the connection.
          connection.release();
          // Handle error after the release.
          if (error) callback(error);
          else callback(null,results);
        });
      });
    };

这是在我的本地工作,但当我压缩此代码并将其作为lambda函数上载时,返回


答复:
{
“错误消息”:“2018-11-13T02:16:10.339Z 0562b432-e6ea-11e8-81ef-bd64aa1af0a4任务在30.03秒后超时”
}

不管我设置了多少秒,它都会超时

我几乎将所有内容都设置为默认值,因为我对所有这些都是新手,但我已将AmazonRDSFullAccess添加到lambda函数的角色中

有人知道我的设置中可能有什么错误或遗漏吗


谢谢。

在做了一些尝试和错误之后,我能够使它工作,我缺少的是我不允许在我的RDS安全组的入站中使用
所有TCP
。之后,我将它设置为lambda函数,设置为
无VPC
,并且它能够正确地查询

这个链接:和在那里发布的堆栈溢出链接(这是:)帮助我找出了我的代码/设置的错误

这是我最后使用的代码



    const mysql = require('mysql');
    const pool  = mysql.createPool({
        host: "foo-bar-123.us-east-2.rds.amazonaws.com",
        user: "root",
        password: "pass123",
        database: "sample_db"
    });

    exports.handler = (event, context, callback) => {
      //prevent timeout from waiting event loop
      context.callbackWaitsForEmptyEventLoop = false;

      pool.getConnection((err, connection) => {
        if(err) throw err;

        // Use the connection
        connection.query('SELECT id FROM customer limit 10;', (error, results, fields) => {

          // And done with the connection.
          connection.release();

          // Handle error after the release.
          if (error) callback(error);
          else callback(null,results);
        });
      });
    };


谢谢

您是否让Lamda在VPC后面运行?只需更改行为,通过在上下文对象上设置callbackhaitsForemptyEventLoop=false,使回调函数一被调用,执行就结束。bcz默认值为true。。。您可能希望先将其设置为无VPC,然后尝试添加我在RDS实例中看到的子网和安全组,但连接仍然超时。