你如何使用lambda连接到RDS,我应该在那里放置查询?

问题描述 投票:0回答:1

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

我有一个反应前端,我打电话给API网关=>这个触发器lambda => lambda使得DB查询=>返回API网关=>反应

其次,我的问题是如何

我有这个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.但无济于事

我究竟做错了什么?

javascript reactjs amazon-web-services aws-lambda amazon-rds
1个回答
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]);
        });
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.