【问题标题】:Unable to query RDS MySQL from AWS Lambda using Node JS无法使用 Node JS 从 AWS Lambda 查询 RDS MySQL
【发布时间】:2022-01-18 14:10:48
【问题描述】:

我正在尝试使用 Node js mysql 客户端从 Lambda 查询 MySQL RDS。相同的代码在本地正常运行。

var mysql = require('mysql');

// TODO Read credentials from Secret Manager. 
var connection = mysql.createConnection({
    host: "XXX",
    user: "XXX",
    password: "XXX",
    database: "XXX",
    timezone: 'utc'
});

connection.connect();

exports.handler = async (event, context, callback) => {

    connection.query('show tables', function (error, results, fields) {
        if (error) {
            connection.destroy();
            throw error;
        } else {
            // connected!
            console.log(results);
            callback(error, results);
            connection.end(function (err) { callback(err, results); });
        }
    });
};

当我执行 lambda 时,我 既没有错误也没有结果

  1. RDS 和 Lambda 在同一个 VPC 上
  2. 将 Lambda 超时时间增加到 5 分钟
  3. 为 Lambda 角色授予以下权限

AWSLambdaExecute
AWSLambdaBasicExecutionRole
AWSLambdaVPCAccessExecutionRole
AWSLambda_FullAccess

  1. 修改了 RDS 安全组以允许 lambda。

【问题讨论】:

  • 如果 MySQL 实例位于私有网络上,请确保 lambda 位于同一网络上。如果 mysql 在公共网络上,您不能使用安全组来控制访问,并且您的客户端 IP 也将是公共 lambda IP,您将无法枚举
  • 谢谢@DanielFarrell。我的 Lambda 和 RDS 在公共子网上。出于测试目的,我更改了安全组以允许所有 IP。还是同样的问题。如果有网络问题,我预计日志中会出现超时错误。

标签: mysql amazon-web-services aws-lambda


【解决方案1】:

在这里找到解决方案 - https://stackoverflow.com/a/64739725/5589444

删除 async 关键字后,它起作用了。以下是更新后的代码

var mysql = require('mysql');

// TODO Read credentials from Secret Manager. 
var connection = mysql.createConnection({
    host: "XXX",
    user: "XXX",
    password: "XXX",
    database: "XXX",
    timezone: 'utc'
});

connection.connect();

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

    connection.query('show tables', function (error, results, fields) {
        if (error) {
            connection.destroy();
            throw error;
        } else {
            // connected!
            console.log(results);
            callback(error, results);
            connection.end(function (err) { callback(err, results); });
        }
    });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-13
    • 2019-09-01
    • 1970-01-01
    • 2020-11-05
    • 2021-10-11
    • 2021-06-10
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多