私は最近、新しいAWS DocumentDBサービスをSpringアプリケーションのDBとして使用してみました。
クラスターは、アプリケーションをデプロイするEKSと同じVPCに作成されています。セキュリティグループは、VPC内のすべてのノード間の接続を許可します。
AWSは、私のDBクラスターに対して次のようなmongo URIを公開します。
mongodb://<my-user>:<insertYourPassword>@<my-cluster-endpoint>:27017/?ssl_ca_certs=rds-combined-ca-bundle.pem&replicaSet=rs0
私の質問:
この種の接続でSpringコードを機能させるにはどうすればよいですか?
Followigをapplication.properties
ファイルに追加してみました。
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
そして、PEMファイルを/src/main/resources
に配置します
ただし、コードはDBクラスターへの接続に失敗します。
エラーとしてこのメッセージが表示されます:No server chosen by com.mongodb.client.internal.MongoClientDelegate
Exception in monitor thread while connecting to server ...
が後に続く
そして最後にタイムアウト例外:com.mongodb.MongoSocketReadTimeoutException: Timeout while receiving message
セキュリティグループの問題のように見えますが、Springアプリケーションポッドを実行している同じEC2からmongo Shellに接続しても問題ありません。
何か案は?
単純な解決策は、AWSでTLS(SSL)オプションを削除してから、接続文字列から「ssl_ca_certs = rds-combined-ca-bundle.pem」を削除することです。ただし、アプリケーションでSSL DB接続が必要な場合は、 AWSガイド を使用できます。