Windows本地Node.js应用连接AWS Document DB失败求助
问题分析与解决方案
一、先确认SSH隧道是否真的打通(Windows本地端)
EC2能正常连接DocumentDB,说明集群本身和EC2的访问权限没问题,本地连接失败的核心大概率是SSH隧道未正确建立。
手动用命令行建立SSH隧道,保持窗口运行不要关闭:
ssh -i "你的EC2密钥对路径.pem" -L 27017:docdb集群端点:27017 ec2-user@EC2公网IP注意:如果是Ubuntu系统的EC2,用户名要改成
ubuntu;Windows路径用正斜杠/或双反斜杠\\。测试端口连通性:
打开PowerShell执行:Test-NetConnection localhost -Port 27017若返回
TcpTestSucceeded: True,说明隧道正常;若失败,检查:- EC2安全组是否允许本地IP的22端口入站
- Windows本地防火墙是否拦截了27017端口
二、Node.js连接代码修正
隧道打通后,代码里的几个常见坑要修正:
连接字符串指向本地隧道端口
用SSH隧道时,连接地址要改成localhost:27017,而非DocumentDB集群端点:const MongoClient = require('mongodb').MongoClient; const path = require('path'); const uri = 'mongodb://root:<DB密码>@localhost:27017/<DB名称>?tls=true'; const options = { // 用绝对路径避免Windows下相对路径报错 tlsCAFile: path.resolve(__dirname, './rds-combined-ca-bundle.pem'), // 延长超时时间,避免因网络延迟导致超时 connectTimeoutMS: 30000, socketTimeoutMS: 45000 }; MongoClient.connect(uri, options, function(err, client) { if (err) { // 打印完整错误信息,不要直接throw console.error('连接失败详情:', err.message, err.stack); return; } console.log('成功连接DocumentDB'); const db = client.db('<DB名称>'); // 后续业务操作 client.close(); });CA证书路径问题
Windows下相对路径容易出问题,建议用path.resolve生成绝对路径,或者直接写完整路径(如C:/项目路径/rds-combined-ca-bundle.pem)。错误排查要精准
不要直接throw err,打印err.message和err.stack能明确是证书错误、权限问题还是超时。
三、其他排查点
- DocumentDB安全组:确认入站规则允许EC2所在私有IP/安全组访问27017端口(隧道转发依赖EC2和DocumentDB的连通性)
- 密钥对权限:Windows上的EC2密钥对
.pem文件权限不能太开放,右键属性→安全,只保留当前用户的读取权限,否则SSH连接会报错 - 驱动版本兼容:确保
mongodb驱动版本在3.x或4.x区间,旧版本可能不支持DocumentDB的TLS配置
内容的提问来源于stack exchange,提问作者Heshan
相关产品推荐
相关产品推荐

