从Java程序连接到documentdb



我在AWS中创建了一个documentdb集群。我使用相同的java程序,这里只是必要的改变连接字符串。在这里我无法连接。下面是错误信息:

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 -经理-刺激-新- docdb clsuter.cluster cduzobvhwuhh.us -东- 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。导入到keystore中的pem文件。在创建集群时,它要求一个主用户名&密码。我只是使用docdbnewbie作为用户名&一些编出来的密码。我是否必须事先创建一个用户并事先给它相应的策略?

更新:我已经能够在java客户端之间建立连接。AWS托管的documentdb。但是我的java程序也在一个使用EC2的云中。如果有人能说明当客户端在VPC之外时是否可以建立这样的连接,那将会有很大的帮助。

如果您查看共享文档,在从Amazon VPC外部连接到Amazon DocumentDB集群一节中,它清楚地说明您需要通过在DocumentDB的VPC内运行的EC2实例建立SSH隧道。准确地说,

要创建SSH隧道,您需要在与Amazon DocumentDB集群相同的Amazon VPC中运行一个Amazon EC2实例。您可以在与集群相同的VPC中使用现有的EC2实例,也可以创建一个。

指南显示您使用以下命令转发27017 (mongodb的默认端口)。

ssh -i "ec2Access.pem" -L 27017:sample-cluster.node.us-east-1.docdb.amazonaws.com:27017 ubuntu@ec2-34-229-221-164.compute-1.amazonaws.com -N

一旦设置了隧道,您将使用localhost:27017作为DocumentDB的端点,而不是自定义DNS名称price-manager-prod-new-docdb-clsuter.cluster-cduzobvhwuhh.us-east-1.docdb.amazonaws.com:27017。此DNS名称不是公开可用的,只能从您的VPC内解析。这就是为什么相同的程序在VPC内的EC2上运行时可以正常工作的原因。

如果您不想使用localhost,应该有一种方法可以在SSH隧道命令中配置所需的端点,您可以查看它。

相关内容

  • 没有找到相关文章

最新更新