Eu possuo um ambiente Elastic Beanstalk que contém uma única instância EC2 , executando um servidor Spring Boot . Não acho necessário falar sobre as opções de implantação, mas se forem necessárias, as adicionarei como edições.
Recentemente, implantei um código que se conecta ao meu banco de dados MongoDB (usando uma fonte externa hospedada via MongoDB Atlas), que roda perfeitamente localmente. Meu aplicativo Spring Boot atualmente lista itens desse banco de dados, quando tento acessar uma determinada página.
No remoto, funciona perfeitamente até que eu alcance aquela página específica que tenta consultar meu banco de dados. Tentando olhar dentro do web.stdout.log
arquivo do Beanstalk, eu recebo algumas exceções:
Dec 18 10:07:45 ip-172-31-46-201 web[182140]: 2024-12-18T10:07:45.757Z ERROR 182140 --- [mockapi] [nio-5000-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.DataAccessResourceFailureException: Timed out while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=REPLICA_SET, servers=[{address=docsbymario-shard-00-00.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}, {address=docsbymario-shard-00-01.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}, {address=docsbymario-shard-00-02.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}]] with root cause
Dec 18 10:07:45 ip-172-31-46-201 web[182140]: com.mongodb.MongoTimeoutException: Timed out while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=REPLICA_SET, servers=[{address=docsbymario-shard-00-00.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}, {address=docsbymario-shard-00-01.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}, {address=docsbymario-shard-00-02.xyx0n.mongodb.net:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketWriteException: Exception sending message}, caused by {javax.net.ssl.SSLException: Received fatal alert: internal_error}}]
Por suposição, acredito que tal exceção venha de problemas no acesso à URL do banco de dados (que está corretamente definida dentro do application.properties
arquivo).
Os grupos de segurança do EC2 permitem tráfego de saída para cada endereço, para cada porta.
Estou usando a VPC padrão, não criei uma personalizada, e parece que suas regras de saída permitem e negam tráfego de rede:
Não posso remover a regra que nega explicitamente tudo.
Eu deveria ter criado minha VPC personalizada, com minha ACL personalizada e regras de saída personalizadas? Apenas para acessar um recurso externo como um banco de dados MongoDB? Talvez eu tenha perdido alguma coisa? Sou novo na AWS (na prática) e acabei de perceber que obter a certificação AWS não garante nenhuma habilidade prática.
Você não deve tocar nas regras de ACL de rede do VPC. Essa ACL na sua captura de tela permite todo o tráfego, então a ACL de rede não é um problema.
O MongoDB Atlas tem uma configuração de lista de acesso IP . Você precisa adicionar o IP público da sua instância EC2 a essa lista? Observe que esse tem que ser o IP público da instância , não o IP privado.