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

VPC内AWS Lambda连接EC2上MongoDB失败求助

当前状态

  • 已在VPC内的EC2实例上成功部署MongoDB社区版,实例为运行Ubuntu系统的单节点,未使用Atlas集群
  • 数据库运行正常,已完成绑定配置,可从Windows机器正常连接、浏览数据库
  • 已在同一VPC内创建Lambda函数
  • 尝试用猜测的连接字符串 mongodb+srv://user@ec2-54-xxx.compute-1.amazonaws.com 建立连接,无相关文档参考
  • 收到错误:querySrv ENOTFOUND _mongodb._tcp.ec2-54-xxx.compute-1.amazonaws.com

需求帮助

  • 是否可以实现Lambda连接运行MongoDB的EC2单实例?
  • 若可以,应使用何种连接字符串?
  • 是否需要改用弹性IP?

代码片段(NodeJS,连接失败与语言无关)

import { MongoClient } from 'mongodb'

const client = new MongoClient('mongodb+srv://user@ec2-54-xxx.compute-1.amazonaws.com');

await client.connect()

解决方案

1. 能否连接?

完全可以。Lambda和EC2在同一VPC内,只要网络配置(安全组、NACLs)允许双向通信,就能建立连接。

2. 正确的连接字符串

你用的mongodb+srv://是MongoDB Atlas集群专用格式,依赖SRV DNS记录,而你的单实例EC2没有配置这类记录,所以才会报querySrv错误。单实例应该用标准连接格式:

// 格式:mongodb://用户名:密码@EC2私有IP/目标数据库名?authSource=认证数据库
const client = new MongoClient('mongodb://user:your-password@10.x.x.x:27017/your-db?authSource=admin');
  • 优先用EC2私有IP(比如10.x.x.x),同一VPC内通信更稳定,无需公网IP
  • 也可以用EC2私有DNS(如ip-10-x-x-x.ec2.internal),AWS会自动解析到私有IP
  • 默认端口是27017,要确保EC2安全组允许Lambda的安全组访问这个端口
  • 替换your-password、your-db为实际信息,authSource=admin是指定用户认证的数据库(如果你的用户是在admin库创建的)

3. 是否需要弹性IP?

不需要。同一VPC内用私有IP或私有DNS就能通信,弹性IP是公网IP,仅用于公网访问场景,这里完全没必要。从安全角度,单实例MongoDB也不建议暴露公网。

额外检查项

  • EC2安全组:入站规则允许Lambda所在安全组访问27017端口;出站规则允许EC2向VPC内发送流量(默认全通即可)
  • MongoDB配置:确保mongod.conf里的bindIp设置为0.0.0.0或EC2私有IP,不要只绑定127.0.0.1(否则只能本地访问)
  • Lambda配置:确认Lambda已开启VPC访问权限,子网、安全组设置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 06:37:05