无法通过Lambda向DocDB集合发起POST请求(GET请求正常)
DocumentDB写入操作返回code301错误的排查与解决
错误原因分析
你遇到的code:301错误是DocumentDB的重定向错误,核心逻辑是:
- 读操作(如GET请求)允许在集群从节点执行,因此你的GET路由能正常返回数据
- 写入操作(如POST插入)必须在主节点执行,但当前Lambda连接的是集群从节点,导致请求被重定向,最终触发错误
解决方案
1. 更新连接URI为集群完整地址
当前你的连接URI仅指定单个节点,大概率是从节点。需替换为包含集群所有节点的连接字符串,并指定副本集参数:
// 从AWS DocumentDB控制台"连接"页面复制完整集群连接字符串 const uri = 'mongodb://<username>:<password>@docdb-2023-06-08-15-56-01.cuz2po50vpwx.us-east-1.docdb.amazonaws.com:27017,docdb-2023-06-08-15-56-01-secondary.cuz2po50vpwx.us-east-1.docdb.amazonaws.com:27017/?replicaSet=rs0';
2. 显式配置MongoClient副本集参数
创建MongoClient时,明确指定副本集名称(DocumentDB默认副本集名为rs0),帮助客户端自动发现主节点:
const client = new MongoClient(uri, { tls: true, tlsCAFile: 'global-bundle.pem', replicaSet: 'rs0', directConnection: false, // 禁用直连,允许客户端自动选择主节点 });
3. 额外排查点
- 权限验证:用Mongo Shell连接集群,执行命令确认用户拥有test数据库读写权限:
use test db.grantRolesToUser('<username>', [{role: 'readWrite', db: 'test'}]) - VPC安全组检查:确保Lambda所在VPC安全组允许访问DocumentDB集群所有节点的27017端口,DocumentDB安全组也要允许Lambda的IP/安全组访问。
- 主节点状态确认:在AWS控制台查看DocumentDB集群主节点信息,尝试直接连接主节点执行写入操作,验证是否能正常插入。
内容的提问来源于stack exchange,提问作者yungfrankling
相关产品推荐
相关产品推荐

