AWS Lambda访问SQL Server出现ETIMEOUT连接超时错误如何解决
AWS Lambda连接SQL Server超时问题排查方案
该ETIMEOUT报错属于网络连接异常,本地运行正常可排除代码、数据库账号、数据库本身配置问题,按以下优先级排查即可:
1. Lambda VPC配置校验
- 10.2.3.44为内网IP,若SQL Server部署在AWS VPC内,必须将Lambda部署到与SQL Server相同VPC下,且选择路由互通的私有子网;未配置VPC的Lambda默认走公网,无法访问内网资源。
- 若SQL Server部署在本地IDC,需确认Lambda所在VPC已通过专线/VPN与IDC打通,且10.0.0.0/8网段路由指向IDC侧网关。
- 跨AWS账号部署的场景需确认VPC对等连接配置正确,双向路由规则均已添加。
2. 访问控制规则校验
- Lambda关联安全组的出站规则需放开到10.2.3.44的1433端口(SQL Server默认TCP端口,自定义端口需替换为实际端口)的访问权限。
- SQL Server所在服务器/EC2的安全组入站规则需放开Lambda子网CIDR段到1433端口的TCP访问权限。
- 子网关联的NACL需同时放开1433端口TCP的出入站规则,以及1024-65535临时端口范围的入站规则。
3. 实例名解析问题修复
你代码中配置了instanceName: 'SQLSRVR',SQL Server浏览器服务依赖1434 UDP端口做实例名解析,需确认安全组同时放开1434 UDP端口的双向访问。
也可直接指定端口规避实例名解析步骤:先查询SQLSRVR实例对应的实际监听端口,代码中添加port配置并删除instanceName即可,参考配置如下:
const { Sequelize } = require('sequelize'); const sequelize = new Sequelize('DBname', null, null, { dialect: 'mssql', host: '10.2.3.44', port: 1455, // 替换为你的SQLSRVR实例实际监听端口 dialectOptions: { authentication: { type: 'ntlm', options: { domain: 'addidas', userName: "uname", password: "pwd" } } } })
4. 运行时依赖校验
Lambda Node.js运行环境无内置NTLM认证所需依赖,部署包必须包含完整的node_modules文件夹,且依赖需要在Amazon Linux 2环境下安装,避免Windows/macOS下编译的二进制包在Lambda环境不兼容。
5. Lambda超时配置调整
数据库冷启动连接耗时较长,若Lambda超时时间设置低于3秒也会触发该报错,建议先将超时时间调整到10秒以上测试验证。
内容的提问来源于stack exchange,提问作者roby.elan
相关产品推荐
相关产品推荐

