为了编程地将python连接到本地环境中的AWS DocumentDB (AWS版本的MongoDB)实例,我面临一些问题。我们尝试了以下步骤:
from pymongo import MongoClient,ReadPreference
import urllib
import ssl
username=urllib.parse.quote_plus("username")
password=urllib.parse.quote_plus("password")
port=27019
host="localhost"
dbName="general"
dbUri = f'mongodb://{username}:{password}@{host}:{port}/?tls=true&tlsCAFile=./rds-combined-ca-bundle.pem&retryWrites=false'
print(dbUri)
client = MongoClient(dbUri)
print(client.list_database_names())
以错误的形式运行上面的示例:
pymongo.errors.ServerSelectionTimeoutError: hostname '127.0.0.1' doesn't match either of 'docdb.XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-ro-XXXXXXX.region.docdb.amazonaws.com', Timeout: 30s, Topology Description: <TopologyDescription id: 61e7f8c811a815088e97e5a7, topology_type: Unknown, servers: [<ServerDescription ('127.0.0.1', 27019) server_type: Unknown, rtt: None, error=CertificateError("hostname '127.0.0.1' doesn't match either of 'docdb.XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-XXXXXXX.region.docdb.amazonaws.com', 'docdb.cluster-ro-XXXXXXX.region.docdb.amazonaws.com'",)>]>
2022-01-19 11:41:27,120| ERROR | Could not establish connection from local ('127.0.0.1', 27019) to remote ('ai-docdb-dev.cluster-cq8mixmxuhvt.eu-west-1.docdb.amazonaws.com', 27017) side of the tunnel: open new channel error:
这说明了两点:首先,我们的代码正确地使用了.pem证书,并且能够获得我们的集群名称。其次,代码无法理解localhost是一个地址,并检查本地端口27019以到达集群。
为了克服这个问题,我们还尝试将代码变量主机替换为127.0.01,但是结果是一样的。我们还试图调整pymongo函数MongoClient client.MongoClient的几个参数,但结果保持不变。
谢谢
发布于 2022-02-17 20:43:42
将&tlsAllowInvalidHostnames=true添加到URI以跳过主机名检查。
https://stackoverflow.com/questions/70770130
复制相似问题