You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda(Node.js)连接EC2实例中MySQL的技术问询

问题描述

已创建EC2实例并在其上安装配置了MySQL(非RDS),创建了数据库airpollutiondata及表CO2。尝试编写Node.js环境的Lambda函数以连接该MySQL并执行SELECT查询拉取数据,但测试代码未成功,网上资源多针对RDS,寻求正确方向。

测试代码:

var con = mysql.createConnection({ 
host: "localhost", 
user: "yourusername", 
password: "yourpassword", 
database: 'airpollutiondata' 
}); 
con.connect(function(err) { 
if (err) throw err; 
console.log("Connected!"); 
});
解决方案
  • 修正数据库连接地址:Lambda函数运行在AWS独立的容器环境中,localhost指向Lambda自身容器,不是你的EC2实例。必须替换为EC2实例的公网IP(跨VPC访问时)或私有IP(Lambda与EC2同VPC时)。
  • 配置网络与安全组:
    • 公网访问场景:EC2安全组需开放3306端口的入站权限,允许Lambda所在IP段访问(测试阶段可临时放开0.0.0.0/0,生产环境严格限制IP范围);同时EC2需分配公网IP且网络可达。
    • 内网访问场景:将Lambda配置到EC2所在的VPC、子网和安全组,确保VPC内安全组规则允许Lambda的安全组访问EC2的3306端口。
  • 调整MySQL用户权限:默认MySQL用户仅允许本地连接,需修改权限让用户能从Lambda的IP或VPC网段访问。执行以下SQL:
    GRANT ALL PRIVILEGES ON airpollutiondata.* TO 'yourusername'@'lambda_ip_or_vpc_cidr' IDENTIFIED BY 'yourpassword';
    FLUSH PRIVILEGES;
    
    测试时可临时允许所有IP访问(生产环境禁用):
    GRANT ALL PRIVILEGES ON airpollutiondata.* TO 'yourusername'@'%' IDENTIFIED BY 'yourpassword';
    FLUSH PRIVILEGES;
    
  • 打包Lambda依赖:Lambda默认不包含mysql库,需在本地项目目录执行npm install mysql,将代码与node_modules目录一起打包上传,或使用Lambda层管理依赖包。
  • 排查具体错误:查看Lambda的CloudWatch日志,根据错误信息定位问题——连接超时多为网络/安全组配置问题,权限拒绝则是MySQL用户权限或密码错误。

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:41:43