DataGripからAmazon RDSに接続する際のドライバーエラーのトラブルシューティング
JetBrainsは、リレーショナルデータベースとNoSQLデータベースの両方を扱うためのクロスプラットフォームツールであるDataGripを提供しています。 このツールは、MySQL、Oracle Database、PostgreSQL、SQLite、MongoDB、Redisなど、幅広いデータベースをサポートしています。 また、Amazon Redshiftのようなクラウドベースのデータベースに簡単に接続するためのオプションも提供しています。 最近、AIアシスタントプラグインが追加され、クエリの作成がさらに便利で効率的になりました。 この機能は、開発者がデータを扱う際の生産性を向上させるのに役立ちます。 この記事では、JetBrains DataGripを使用してAmazon RDSに接続する際に発生する可能性のあるドライバーエラーについて説明し、それを解決するための方法を探ります。
Mediumでも公開しています。

© Pixabay © Suresh anchan
データベース接続は、アプリケーションの開発および運用において非常に重要なステップの一つです。 特に、クラウド環境でデータベースを使用する場合、接続設定の過程での詳細事項と発生しうるエラーをよく理解することが不可欠です。 Amazon RDSは、クラウド環境で頻繁に使用されるマネージドデータベースサービスであり、その安定性と柔軟性から多くの開発者や企業に好まれています。 しかし、Amazon RDSをJetBrains DataGripのようなデータベース管理ツールに接続する際に、時折予期せぬ問題が発生することがあります。
この記事を通じて、同様の問題を経験した開発者が効果的に問題を解決し、より安定してAmazon RDSとDataGripを連携できるようになることを目指しています。 データベース接続の過程で経験する小さなエラー一つでも、開発プロセスに大きな影響を与える可能性があるため、問題の根本原因を特定し、適切な解決策を見つけることが重要です。 それでは、本文でこれらの問題を解決するための具体的な手順を順を追って見ていきましょう。
ドライバーエラー
DBMS: MySQL (no ver.)
Case sensitivity: plain=mixed, delimited=exact
NotAfter: Wed Jun 01 12:00:00 UTC 2022.

Amazon RDS接続時のドライバーエラー
MySQLドライバーが正常に接続できず、継続的に接続失敗が表示されます。 詳細なエラーメッセージを確認するには、DataGripのログメッセージを確認する必要があります。
DataGripのログを確認する
# DataGripのログファイル
vi ~/AppData/Local/JetBrains/DataGrip/log/idea.log

SSLHandshakeException エラー

Communications link failure
DataGripのログファイル内で Connecting to: jdbc:mysql://{HOST}:3306 で検索するか、接続を試みたホストアドレスを検索して、どのようなエラーが発生したかを確認できます。
javax.net.ssl.SSLHandshakeException または [08S01] Communications link failure のような通信エラーが確認されました。
TLS 通信の過程で問題があるものと思われ、個人的な見解では、Amazon RDSインスタンスの設定中にストレージの暗号化が有効になっている場合に問題が発生するようです。
1. javax.net.ssl.SSLHandshakeException
このエラーは通常、SSL/TLS設定に関連しており、クライアントとサーバー間の認証問題で発生します。
解決方法:
- JDBCドライバーの更新:
- JetBrains DataGripで使用しているMySQL JDBCドライバーを最新バージョンに更新します。最新のドライバーはSSL/TLSプロトコルに関連する多くの問題を解決します。
- TLSバージョンの確認:
- Amazon RDSインスタンスがサポートするTLSバージョンとJDBCドライバーが使用するTLSバージョンが一致する必要があります。
- Amazon RDSコンソールでインスタンス設定(TLSバージョン)を確認し、必要であれば低いバージョン(例:TLS 1.2)に変更します。
- SSL証明書の設定:
- Amazon RDSはデフォルトでSSL証明書を使用します。
- RDSコンソールで提供されるAWS証明書をダウンロードし、DataGripの接続設定でその証明書を追加します。
例:MySQL接続URLに?useSSL=true&requireSSL=trueを追加。
- SSL接続の無効化:
- 接続設定の「Advanced」でuseSSLの値をFALSEに変更します

- 接続設定の「Advanced」でuseSSLの値をFALSEに変更します
2. [08S01] Communications link failure
このエラーは、ネットワーク接続の問題によりクライアントがAmazon RDSインスタンスにアクセスできない場合に発生します。
解決方法:
- RDSセキュリティグループ設定の確認:
- Amazon RDSのセキュリティグループで、接続を試みるクライアントのIPアドレスが許可されているか確認します。
例:セキュリティグループで3306ポートを開き、クライアントのパブリックIPアドレスを追加します。
- Amazon RDSのセキュリティグループで、接続を試みるクライアントのIPアドレスが許可されているか確認します。
- VPCサブネットの確認:
- Amazon RDSがパブリックアクセスを許可していない場合、同じVPCからのみ接続が可能です。
Amazon RDSインスタンスが正しいサブネットとルーティング設定を使用しているか確認します。
- Amazon RDSがパブリックアクセスを許可していない場合、同じVPCからのみ接続が可能です。
- DNSおよびホストの確認:
- 接続URLで使用したRDSホスト名が正しいか確認します。
例:jdbc:mysql://your-instance-name.region.rds.amazonaws.com:3306.
- 接続URLで使用したRDSホスト名が正しいか確認します。
セキュアな接続を無効にする方法や、ストレージの暗号化を無効化する簡単な方法もありますが、 暗号化を設定しないことは基本的に推奨されないため、お勧めしません。 別の方法として、Amazon Aurora MySQLやMariaDBのドライバーを使用する方法もあるようです。 しかし、正しいドライバーを使用することが安定した運用に繋がるため、推奨される方法を使用することが望ましいです。
接続成功
データベース接続成功
参考文献
- Amazon RDS - MySQL Community 5.7.38
- DataGrip Log : https://intellij-support.jetbrains.com/hc/en-us/community/posts/10252570443282-Datagrip-cannot-access-containerized-database
- DataGrip DB Connection Error : https://youtrack.jetbrains.com/issue/DBE-13313/Cant-connect-to-remote-MySQL-since-last-version-of-IntelliJ#focus=Comments-27-4921748.0-0