【发布时间】: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 时,我 既没有错误也没有结果
- RDS 和 Lambda 在同一个 VPC 上
- 将 Lambda 超时时间增加到 5 分钟
- 为 Lambda 角色授予以下权限
AWSLambdaExecute
AWSLambdaBasicExecutionRole
AWSLambdaVPCAccessExecutionRole
AWSLambda_FullAccess
- 修改了 RDS 安全组以允许 lambda。
【问题讨论】:
-
如果 MySQL 实例位于私有网络上,请确保 lambda 位于同一网络上。如果 mysql 在公共网络上,您不能使用安全组来控制访问,并且您的客户端 IP 也将是公共 lambda IP,您将无法枚举
-
谢谢@DanielFarrell。我的 Lambda 和 RDS 在公共子网上。出于测试目的,我更改了安全组以允许所有 IP。还是同样的问题。如果有网络问题,我预计日志中会出现超时错误。
标签: mysql amazon-web-services aws-lambda