AWS Lambda连接DocumentDb实例报MongoServerSelectionError: getaddrinfo EAI_AGAIN错误
问题根因
你遇到的MongoServerSelectionError: getaddrinfo EAI_AGAIN报错本质是Lambda运行环境无法解析DocumentDB的私有域名,即便二者处于同一VPC,也会因为配置疏漏出现该问题,本地能正常连接是因为你的本地环境要么通过VPC peering、VPN等方式接入了目标VPC,且配置了正确的DNS/安全组规则。
常见原因如下:
- VPC未开启DNS解析与DNS主机名配置,导致VPC内部无法解析DocumentDB的私有域名
- Lambda的VPC绑定配置错误:绑定的子网不属于目标VPC,或Lambda安全组的出站规则未放行到DocumentDB 27017端口的流量
- DocumentDB的安全组入站规则未放行Lambda安全组的27017端口访问,仅放行了你本地的公网IP
- 你代码中引用的
rds-combined-ca-bundle.pem证书文件未随代码一起打包到Lambda部署包中,导致连接初始化失败(该问题后续也可能触发同类连接报错)
排查步骤
- 进入AWS VPC控制台,找到DocumentDB所在的VPC,查看属性确认DNS解析、DNS主机名两个选项均为已启用状态
- 检查Lambda的VPC配置,确认绑定的VPC、子网与DocumentDB完全一致,Lambda安全组的出站规则允许TCP 27017端口的访问请求
- 检查DocumentDB的安全组入站规则,确认已添加允许Lambda安全组访问27017端口的规则
- 核对Lambda部署包的文件结构,确认
rds-combined-ca-bundle.pem文件位于代码根目录,和入口js文件同级
解决方案
- 若VPC DNS配置未开启:在VPC属性页开启两项DNS配置,等待5分钟后重试连接
- 若安全组配置错误:修改Lambda出站规则、DocumentDB入站规则,放行27017端口的双向访问
- 若证书缺失:将RDS根证书文件和业务代码一起打包后重新部署Lambda
- 额外优化:将MongoClient实例初始化逻辑移到handler函数外部,利用Lambda执行环境复用能力避免每次调用都重建连接,同时可以在MongoClient配置中添加
connectTimeoutMS: 10000, serverSelectionTimeoutMS: 10000参数降低超时概率
内容的提问来源于stack exchange,提问作者Ethan Gong
相关产品推荐
相关产品推荐

