【发布时间】:2021-05-10 17:54:16
【问题描述】:
在 AWS 中,我创建了一个 documentdb 集群。我正在使用与此处相同的 java 程序,只是对连接字符串进行了必要的更改。 here 我无法连接。这是错误消息:
Feb 06, 2021 9:56:36 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[price-manager-prod-new-docdb-clsuter.cluster-
cduzobvhwuhh.us-east-1.docdb.amazonaws.com:27017], mode=MULTIPLE, requiredClusterType=REPLICA_SET,
serverSelectionTimeout='30000 ms', maxWaitQueueSize=500, requiredReplicaSetName='rs0'}
Feb 06, 2021 9:56:36 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Adding discovered server price-manager-prod-new-docdb-clsuter.cluster-cduzobvhwuhh.us-east-
1.docdb.amazonaws.com:27017 to client view of cluster
Feb 06, 2021 9:56:36 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by com.mongodb.client.internal.MongoClientDelegate$1@5890e879 from cluster
description ClusterDescription{type=REPLICA_SET, connectionMode=MULTIPLE, serverDescriptions=
[ServerDescription{address=price-manager-prod-new-docdb-clsuter.cluster-cduzobvhwuhh.us-east-
1.docdb.amazonaws.com:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing
out
Feb 06, 2021 9:56:56 PM com.mongodb.diagnostics.logging.JULLogger log
INFO: Exception in monitor thread while connecting to server price-manager-prod-new-docdb-
clsuter.cluster-cduzobvhwuhh.us-east-1.docdb.amazonaws.com:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
at com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70)
at com.mongodb.internal.connection.InternalStreamConnection.open(InternalStreamConnection.java:128)
at com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117)
亚马逊要求使用以下连接字符串。 mongodb://docdbnewbie:@price-manager-prod-new-docdb-clsuter.cluster-cduzobvhwuhh.us-east-1.docdb.amazonaws.com:27017/?ssl=true&ssl_ca_certs=rds-combined-ca-bundle。 pem&replicaSet=rs0&readPreference=secondaryPreferred&retryWrites=false
在程序中,连接字符串中我没有使用ssl_ca_certs=rds-combined-ca-bundle.pem。 我导入到密钥库的 pem 文件。 创建集群时,它要求提供主用户名和密码。我只是使用 docdbnewbie 作为用户名和一些虚构的密码。我必须事先创建一个用户并事先给它相关政策吗?
更新:我已经能够在 java 客户端和 AWS 托管的 documentdb 之间建立连接。但我的 java 程序也在 EC2 中 - 使用过 cloud9。如果有人可以说明当客户端在 VPC 之外时是否可以建立这种连接,那将有很大帮助。
【问题讨论】:
-
您是否从主机/lambda 检查了 db 的可达性?
-
@amitd,您的意思是来自 AWS 内部?即从 cloud9 说 - 我没有尝试过。这是否意味着只能从 AWS 内部访问 documentDB?不是从外面来的?
-
如果客户端和服务器不在同一个 VPC 中,那么您仍然可以建立连接。确保客户端有到达服务器的路由通常会失败。我不知道确切的步骤,但 AWS 上的 VPC 文档有从外部打开对 vpc 中服务器的访问的步骤。
标签: java amazon-web-services aws-documentdb