如何将AWS Elastic Beanstalk连接至DocumentDB?Node.js连接超时排查
确认安全组入站规则的源配置:给DocumentDB集群绑定的安全组添加27017端口入站规则时,要将源设置为Elastic Beanstalk实例所在的EC2安全组ID,而非单个IP。Cloud9能正常连接说明DocumentDB安全组对Cloud9的IP开放,但Beanstalk实例可能使用独立的安全组,需确保这个安全组被纳入DocumentDB的入站允许范围。
校验VPC与子网一致性:确保Elastic Beanstalk的EC2实例和DocumentDB集群处于同一个VPC内,且DocumentDB的子网组包含Beanstalk实例所在的子网。跨VPC场景需额外配置VPC对等连接或私有链路,但同VPC是最直接的连通前提。
修正Node.js连接字符串:DocumentDB强制要求SSL连接,连接字符串必须包含
ssl=true参数,同时需指定AWS CA证书路径,示例如下:const uri = "mongodb://<用户名>:<密码>@<DocumentDB端点>:27017/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false";注意将
rds-combined-ca-bundle.pem证书文件放置在项目可访问路径下,避免路径错误导致SSL验证失败。检查Beanstalk实例的出站规则:Elastic Beanstalk绑定的EC2安全组需允许27017端口的出站流量,若自定义了出站规则,需确认未限制对DocumentDB端点的访问(默认安全组出站为全开放,但若有修改需重点排查)。
测试实例到DocumentDB的网络连通性:登录Beanstalk的EC2实例,执行以下命令测试端口连通性:
telnet <DocumentDB端点> 27017 # 或使用nc命令 nc -zv <DocumentDB端点> 27017若命令返回连接失败,说明网络层面存在阻塞;若能连通,则排查Node.js代码或依赖问题,比如尝试升级/降级
mongodb驱动版本,部分旧版本驱动可能与DocumentDB的协议不兼容。查看DocumentDB集群日志:在AWS控制台进入DocumentDB集群的日志页面,检查是否有连接拒绝记录,确认是否存在认证失败、SSL配置错误等非网络层面问题。
内容的提问来源于stack exchange,提问作者Sadek Syed

