您如何使用lambda连接到RDS,我应该在那里查询吗?

时间:2019-03-16 09:15:10

标签: javascript reactjs amazon-web-services aws-lambda amazon-rds

我的第一个问题是方法。这是正确的方法吗?

我有一个React前端,我调用了API网关=>这会触发lambda => lambda进行数据库查询=>返回API Gateway => react

第二,我的问题是

我有以下lambda代码:

var pool = mysql.createPool({
  host     : RDSINSTANCE,
  user     : USER,
  password : PASSWORD,
  database : DBNAME
});

exports.handler = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false
    pool.getConnection(function(err, connection) {

      connection.query('SELECT * FROM exercises', function (error, results, fields) {

        connection.release();

        if (error) context.fail(error)
        else context.succeed(null, results[0])

      });
    })
}

我可以确认何时将代码更改为与本地节点兼容,它正确地返回了我所经过的行,因此RDS和javascript代码均已正确设置。

但是,我的lambda超时了

我添加了这一行:context.callbackWaitsForEmptyEventLoop = false,因为有些人说这是一个问题。但是,仍然会超时

我也尝试使用callback代替context.,但无济于事

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

从API网关到Lambda的流程是正确的方法。

我建议使用callback而不是context将信息传递回呼叫者,因为这是正式记录的方式。 1

您应该考虑Lambda可能无法从池中获取连接对象并无法处理这种情况。

exports.handler = (event, context, callback) => {
    context.callbackWaitsForEmptyEventLoop = false;

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

        connection.query('SELECT * FROM exercises', function (error, results, fields) {
            connection.release();

            if (error) callback(error);
            else callback(null, results[0]);
        });
    });
}