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

MongoDB Atlas连接失败?AWS环境下的问题排查与解决

MongoDB Atlas连接AWS环境下的问题排查与解决

问题描述

使用MongoDB Atlas数据库,尝试通过Python进行数据存储与读取操作时无法建立连接,执行以下代码:

import pymongo

client = pymongo.MongoClient("mongodb+srv://guest:guest@cluster0.oqhmaiq.mongodb.net/?retryWrites=true&w=majority")
db = client["MyDB"]
print(db.list_collection_names())

执行后终端卡顿数秒,抛出错误:

Traceback (most recent call last):
  File "mongo.py", line 5, in <module>
    print(db.list_collection_names())
  File "/usr/local/lib64/python3.7/site-packages/pymongo/database.py", line 959, in list_collection_names
    return [result["name"] for result in self.list_collections(session=session, **kwargs)]
  File "/usr/local/lib64/python3.7/site-packages/pymongo/database.py", line 911, in list_collections
    return self.__client._retryable_read(_cmd, read_pref, session)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/_csot.py", line 105, in csot_wrapper
    return func(self, *args, **kwargs)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/mongo_client.py", line 1441, in _retryable_read
    server = self._select_server(read_pref, session, address=address)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/mongo_client.py", line 1257, in _select_server
    server = topology.select_server(server_selector)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/topology.py", line 272, in select_server
    server = self._select_server(selector, server_selection_timeout, address)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/topology.py", line 261, in _select_server
    servers = self.select_servers(selector, server_selection_timeout, address)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/topology.py", line 223, in select_servers
    server_descriptions = self._select_servers_loop(selector, server_timeout, address)
  File "/usr/local/lib64/python3.7/site-packages/pymongo/topology.py", line 240, in _select_servers_loop
    % (self._error_message(selector), timeout, self.description)
pymongo.errors.ServerSelectionTimeoutError: ac-qymr9hr-shard-00-02.oqhmaiq.mongodb.net:27017: connection closed,ac-qymr9hr-shard-00-01.oqhmaiq.mongodb.net:27017: connection closed,ac-qymr9hr-shard-00-00.oqhmaiq.mongodb.net:27017: connection closed, Timeout: 30s, Topology Description: <TopologyDescription id: 638931405b2cf5e370bcbc8d, topology_type: ReplicaSetNoPrimary, servers: [<ServerDescription ('ac-qymr9hr-shard-00-00.oqhmaiq.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-qymr9hr-shard-00-00.oqhmaiq.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-qymr9hr-shard-00-01.oqhmaiq.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-qymr9hr-shard-00-01.oqhmaiq.mongodb.net:27017: connection closed')>, <ServerDescription ('ac-qymr9hr-shard-00-02.oqhmaiq.mongodb.net', 27017) server_type: Unknown, rtt: None, error=AutoReconnect('ac-qymr9hr-shard-00-02.oqhmaiq.mongodb.net:27017: connection closed')>]>

原因分析(AWS环境下常见情况)

  • IP白名单限制:MongoDB Atlas默认只允许特定IP访问,AWS实例的公网IP未加入Atlas的白名单列表,导致连接被拒绝。
  • AWS安全组规则:运行Python代码的AWS资源(EC2、ECS等)的安全组未配置出向规则,不允许访问MongoDB Atlas的27017端口。
  • 驱动版本不兼容:使用的pymongo版本过旧,与MongoDB Atlas的服务器版本不匹配,导致握手失败连接关闭。
  • 凭证或权限问题:连接字符串中的用户名/密码错误,或者guest用户没有访问MyDB数据库及执行list_collection_names的权限。
  • 网络连通性问题:AWS环境到MongoDB Atlas的网络链路存在阻塞,比如VPC路由配置错误、NAT网关限制等。

解决步骤

  1. 配置MongoDB Atlas IP白名单

    • 登录MongoDB Atlas控制台,进入目标集群的"Network Access"页面。
    • 添加运行代码的AWS实例的公网IP;若使用VPC内网访问,配置VPC Peering连接Atlas的VPC与AWS的目标VPC。
    • 保存配置后等待1-2分钟生效。
  2. 检查AWS安全组规则

    • 找到运行代码的AWS资源对应的安全组,添加出向规则:
      • 类型选择Custom TCP,端口范围填27017,目标填0.0.0.0/0(或Atlas集群的IP段,更安全)。
    • 确保安全组的出向规则没有限制该端口的访问。
  3. 升级pymongo驱动

    • 在AWS实例上执行命令升级pymongo到兼容版本:
      pip install --upgrade pymongo
      
    • 注意Python3.7需安装适配的pymongo版本(如pymongo 4.x系列部分版本支持3.7)。
  4. 验证凭证与权限

    • 确认连接字符串中的用户名guest和密码guest正确无误。
    • 在MongoDB Atlas控制台的"Database Access"页面,检查guest用户是否拥有MyDB数据库的read或readWrite权限,若没有则添加对应权限。
  5. 测试网络连通性

    • 在AWS实例上执行以下命令测试端口是否可达:
      nc -zv ac-qymr9hr-shard-00-00.oqhmaiq.mongodb.net 27017
      
    • 若连接失败,排查AWS网络配置(如NAT网关、路由表、防火墙等)是否存在阻塞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 15:10:42