J'ai récemment essayé d'utiliser le nouveau service AWS DocumentDB comme base de données dans une application Spring.
Le cluster a été créé dans le même VPC que l'EKS sur lequel je déploie mon application. Les groupes de sécurité autorisent les connexions entre tous les nœuds du VPC.
AWS expose un URI mongo comme celui-ci pour mon cluster DB:
mongodb://<my-user>:<insertYourPassword>@<my-cluster-endpoint>:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
Ma question:
Comment faire fonctionner mon code Spring avec ce type de connexion?
J'ai essayé d'ajouter le suivi à mon application.properties
fichier:
spring.data.mongodb.uri=mongodb://<my-user>:<insertYourPassword>@<my-cluster-endpoint>:27017/admin?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs00
spring.data.mongodb.database=admin
server.ssl.key-store=classpath:rds-combined-ca-bundle.pem
Et en plaçant le fichier PEM dans /src/main/resources
Cependant, le code ne parvient toujours pas à se connecter au cluster DB.
Je reçois ce message comme une erreur: No server chosen by com.mongodb.client.internal.MongoClientDelegate
Suivi d'un Exception in monitor thread while connecting to server ...
Et enfin une exception de timeout: com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
Cela ressemble un peu à un problème de groupe de sécurité, mais je n'ai aucun problème à me connecter avec mongo Shell à partir du même EC2 exécutant le pod d'application Spring.
Des idées?
La solution simple est que vous pouvez supprimer l'option TLS (SSL) dans AWS, puis vous pouvez supprimer le "ssl_ca_certs = rds-combine-ca-bundle.pem" de votre chaîne de connexion. Mais si l'application nécessite la connectivité SSL DB, vous pouvez utiliser le AWS Guide