Estou tentando me conectar ao meu MongoDB que está na minha instância do EC2. Eu sou capaz de me conectar usando o DNS público com esta declaração:
mongoClient = new MongoClient("ec2-3-92-197-163.compute-1.amazonaws.com", 27021);
mas se eu tentasse substituir o "ec2-3-92...." pelo endereço IP privado, assim:
mongoClient = new MongoClient("172.31.90.193", 27021);
Dá-me o erro:
INFO: Exceção no thread do monitor durante a conexão com o servidor 172.31.90.193:27021 com.mongodb.MongoSocketOpenException: Exceção abrindo soquete em com.mongodb.internal.connection.SocketStream.open(SocketStream.java:70) em com.mongodb.internal. connection.InternalStreamConnection.open(InternalStreamConnection.java:126) em com.mongodb.internal.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:117) em java.base/java.lang.Thread.run(Thread.java: 844) Causado por: java.net.SocketTimeoutException: a conexão expirou em java.base/java.net.PlainSocketImpl.socketConnect(Native Method) em java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:400) em java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:243) em java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:225) em java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:402) em java.base/java.net.Socket.connect(Socket. java:591) em com.mongodb.internal.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:64) em com.mongodb.internal.connection.SocketStream.initializeSocket(SocketStream.java:79) em com.mongodb.internal.connection .SocketStream.open(SocketStream.java:65) ... mais 3SocketStream.initializeSocket(SocketStream.java:79) em com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ... 3 maisSocketStream.initializeSocket(SocketStream.java:79) em com.mongodb.internal.connection.SocketStream.open(SocketStream.java:65) ... 3 mais
Exceção no encadeamento "main" com.mongodb.MongoTimeoutException: Expirado após 30.000 ms enquanto aguardava a conexão. A visualização do cliente do estado do cluster é {type=UNKNOWN, servers=[{address=172.31.90.193:27021, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, causada por {java. net.SocketTimeoutException: connect timed out}}] em com.mongodb.internal.connection.BaseCluster.getDescription(BaseCluster.java:182) em com.mongodb.internal.connection.SingleServerCluster.getDescription(SingleServerCluster.java:41) em com .mongodb.client.internal.MongoClientDelegate.getConnectedClusterDescription(MongoClientDelegate.java:136) em com.mongodb.client.internal.MongoClientDelegate.createClientSession(MongoClientDelegate.java:94) em com.mongodb.client.internal.
Está faltando algo que está me impedindo de me conectar ao mongo usando o endereço IP privado?
Eu configurei as regras de entrada como tal:
e é assim que meu arquivo mongod.conf se parece:
# mongod.conf
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# where to write logging data. systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log
# Where and how to store data. storage: dbPath: /var/lib/mongo journal:
enabled: true
# engine:
# mmapv1:
# wiredTiger:
# how the process runs processManagement: fork: true # fork and run in background pidFilePath: /var/run/mongodb/mongod.pid # location of pidfile timeZoneInfo: /usr/share/zoneinfo
# network interfaces net: port: 27017
# bindIp: 172.31.90.193 # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
#security:
#operationProfiling:
replication: replSetName: Midterm sharding: clusterRole: configsvr
## Enterprise-Only Options
#auditLog:
#snmp:
Observação: não defini nenhuma permissão ou adicionei credenciais na coleção do meu banco de dados de administrador.
Como você está tentando se conectar ao MongoDB na instância EC2 de sua máquina local, a conexão deve ser feita pela rede pública (Internet).
Se for uma rede pública, você deve usar IP público ou IP elástico para a conexão.
Você não pode usar o IP privado para se conectar ao MongoDB em execução no AWS EC2 por meio da rede pública.