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

Node.js AWS Lambda使用mysql连接RDS出现Handshake inactivity timeout错误求助

可行排查方向

VPC网络层排查

  • 检查Lambda执行角色的VPC权限:必须包含ec2:CreateNetworkInterface、ec2:DescribeNetworkInterfaces、ec2:DeleteNetworkInterface三个权限,缺少权限时Lambda无法在VPC内创建弹性网卡,无法访问同VPC的RDS资源。
  • 检查VPC网络访问控制列表(NACL):确认Lambda和RDS所在子网关联的NACL,入站规则允许3306端口的TCP流量,出站规则允许1024-65535区间临时端口的TCP流量。NACL为无状态规则,仅放开入站不放开出站会导致握手包无法返回,触发超时。
  • 检查子网路由表配置:确认Lambda、RDS所在子网的路由表中,VPC内网CIDR的下一跳为local,没有将RDS的访问流量错误路由到NAT网关或互联网网关。
  • 验证RDS域名解析结果:在Lambda的测试代码中加入RDS域名的DNS解析逻辑,打印解析得到的IP,确认返回的是VPC内网IP而非公网IP。若RDS开启了公开访问,mysql包可能优先解析到公网IP,而部署在VPC内的Lambda默认没有公网出口,无法访问公网IP的RDS。

MySQL连接配置排查

  • 调整连接超时参数:Lambda冷启动阶段执行速度较慢,默认的握手超时阈值可能过小,可在创建连接时显式调大超时配置,参考示例:
const mysql = require('mysql');
const connection = mysql.createConnection({
  host: process.env.RDS_HOST,
  user: process.env.RDS_USER,
  password: process.env.RDS_PASSWORD,
  database: process.env.RDS_DATABASE,
  connectTimeout: 60000, // 连接超时调整为60秒
  acquireTimeout: 60000,
  timeout: 60000
});
  • 检查RDS SSL强制配置:如果RDS开启了强制SSL连接,未携带SSL证书的连接会被RDS主动拒绝,可在连接配置中添加ssl: "Amazon RDS"开启官方SSL验证。
  • 核对RDS参数组配置:检查RDS参数组中connect_timeout参数值,默认值通常为10秒,冷启动场景下握手过慢会被RDS主动断开连接,可临时调大到30秒验证。

Lambda运行时&基础配置排查

  • 调整Lambda资源配置:Lambda的CPU性能与内存配额成正比,内存过小会导致冷启动阶段代码执行过慢,可先将Lambda内存调整为1024MB、执行超时调整为2分钟,排除资源不足导致的握手超时。
  • 排除上层框架干扰:暂时完全禁用TypeORM的自动初始化逻辑,仅运行你编写的原生mysql测试代码,避免TypeORM的连接池、重试逻辑和Lambda执行生命周期冲突导致的异常。
  • 横向对比验证:临时创建一台和Lambda同子网、同安全组的EC2实例,在EC2中运行相同的原生mysql测试代码。如果EC2也无法连接,可排除Lambda本身的问题,聚焦VPC/RDS层配置;如果EC2可以正常连接,可锁定问题出在Lambda的权限或运行时配置上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 02:15:02