Eclipse側の初期設定等は「その⑥」でRDSの構築は「その⑦」で行いました。
特にその⑦でEclipseからRDSに接続する際発生した問題を抜き出しました。
まぁ私自体は素人なので基本、自分の確認怠りや設定ミスです。
- 前提
- Eclipseからサービスを参照した際に「unable to connect」と表示される
- EclipseからRDSに接続しようとするとエラーが発生する
- EclipseからRDSに接続しようとするとエラーが発生する②
- Eclipseから操作系SQLが実行できない
前提
・Eclipseの環境構築が完了している
・EclipseにAWS Toolkitプラグインが導入されている
・Eclipse接続用のIAMユーザを作成している
・AWS Toolkitのユーザ設定に成功している
・RDSインスタンス(データベース)が作成済みで起動している
Eclipseからサービスを参照した際に「unable to connect」と表示される
事象
RDSインスタンスを作成⇒起動し、EclipseのAWS ToolkitからRDSのデータベースを参照しようとした場合に「unable to connect」と表示された。
確認・対応方法
データベースが作成されているかどうかというより、ユーザの設定の方が怪しいと思われます。
私の場合は以下のように対応しました。
まずは、Eclipse上から他のサービスが利用できる状態にあるか確認しました。
私の場合は、EC2やIAMはEclipseから利用可能状態で、他のサービスの多くは「unable to connect」と表示されていました。
ここで利用したいサービスの一部が「unable to connect」である場合、IAMグループの設定が適切でない可能性が高いです。私の場合はそうでした。
ユーザやIAMグループの権限設定を見直してみるといいかもしれません。
サービスから「IAM」を選択し、Eclipseユーザ用のグループを確認するとRDS用のポリシーに誤った「AmazonRDSDataFullAccess 」が設定されていました。
なので、これをデタッチして、「ポリシーのアタッチ」を押下し、「AmazonRDSFullAccess 」を設定し直しました。
これで解決しました。
EclipseからRDSに接続しようとするとエラーが発生する
事象
私の場合は、上記の対応を行ってすぐにEclipseからRDSに接続しようとしたときの以下のエラーが発生しました。
DB Instance Not Publicly Accessible
The DB Instance you selected is not publicly accessible. For more information about making your DB instance publically accessible, see the Amazon RDS Developer Guide.
確認・対応方法
内容を見るに、このようなエラーメッセージが表示されるのは他の原因である場合もありそうな気がします。
私が行った内容は以下の通り。
エラーメッセージに「Publicly Accessible」が含まれていることからRDS公開設定のような部分があると予想され、少し検索すると、「パブリックアクセシビリティ」に関する設定があることが分かりました。
初期設定を行う際にちゃんと調べるべきでしたね。
DBインスタンスの設定から
スクロールしていき、「ネットワーク & セキュリティ」の部分をさがします。
その中にパブリックアクセシビリティに関する設定がありますのでこれを「はい」にすることで、インターネット経由での接続が可能となり、EclipseやMYSQLクライアントなどでの接続が可能となるのでしょう。
参考:VPC の DB インスタンスの使用 - Amazon Relational Database Service
これで解決し、Eclipseから接続を試みようとすると、接続情報を求められる画面が表示されるようになりました。
但し、これをはいにする場合、インターネットからの接続可能になるということなので、特にセキュリティグループの設定で接続元を絞っていない場合は扱いに注意した方がいいかもしれません。
EclipseからRDSに接続しようとするとエラーが発生する②
事象
上記の対応を行い、接続情報(パスワード)を入力するとさらにエラーが発生しました。
ほんとに素人がやると設定もれとか多発しますね。。。これでもオンプレよりはだいぶ楽なのかな?
エラー①
Amazon RDS DB: testdb - Asia Pacific (Tokyo) へ接続できませんでした。
Amazon RDS DB: testdb - Asia Pacific (Tokyo) への SQL モデル接続 接続の作成中にエラーが発生しました。(エラー: Unknown database 'null')
Unknown database 'null'
Amazon RDS DB: testdb - Asia Pacific (Tokyo) への JDBC 接続 接続の作成中にエラーが発生しました。(エラー: Unknown database 'null')
Unknown database 'null'
エラー②
Unable to connect to the database. Make sure your password is correct and make sure you can access your database through your network and any firewalls you may be connecting through.
確認・対応方法
(エラー: Unknown database 'null')
この部分がポイントですかね。nullってデータベースがないと言われているようです。
なんのこっちゃと思いましたが作成を見直してなんとなく理解。
DB名が設定されていない??
新規作成用の画面を確認してみると、「データベース名を指定しないと、Amazon RDS はデータベースを作成しません。」と書かれています。
最初に作成したときは確かに追加設定部分は飛ばして作成してしまったんですよね。。
インスタンスは作成するけど実態のDBが作成されず空っぽの状態というイメージになるんでしょうか?
ここの設定って必須にしてくれていいんじゃないの?設定しない利用方法もあるんだろうか?
そして問題は一度作成したインスタンスにDB名を追加?変更する方法が分からないということ。
編集の項目にもでてないし。。。ちょっと調べてみてもいまいちわかりませんでした。
なので私は泣く泣くインスタンスを再作成することにしました。
※もしかしたらほんとは後から指定する方法はあるのかもしれません。
初期設定の確認ってホント大事なんですね。気軽に適当に作りすぎてる。
DB名を入力して再作成後、無事に接続ができ「データソース・エクスプローラ」が表示できました。
エラー②については、最初に入力したパスワードに誤りがあったのか、データベースがない状態でログインしようとすると必ず表示されるのかはちょっと不明ですね。
とりあえず再作成した後は表示されなくなりました。
Eclipseから操作系SQLが実行できない
事象
・Eclipse IDE for Enterprise Java Developers.
・MYSQL8.0.15(AWSのRDS上)
上記のようにエラー対応を実施していざSQLを実行する!というときに以下のようなエラーが発生しました。
Could not retrieve transation read-only status server
MYSQLサーバが読み取りモードになっているっぽい?
確認・対応方法
まずは確認。ではselect文は実行できるのか?以下は普通に実行できました。
select current_date
SQLでいろいろ調べようとするもののうまくいかず。
そもそもSQLが操作ができないのだからサーバ側の設定を変える必要があるのでは?と思いパラメータグループ等も編集してみましたが有効な方法は見つかりませんでした。
エラーメッセージで検索したところバージョンに着目している記事がありました。
確かに実行時に少し気になっていたんですが、無視していた部分ですね。
結果的に原因はここだったようです。RDSのバージョンが8でAWS toolkitのバージョンが5なのでバージョンが合っていない状態で利用しようとしていました。
EclipseのAWS toolkitでは現在で「5.1」までしか選択できないようでEclipse側でバージョンを合わせることができず、泣く泣くインスタンスを再々作成しました。
MYSQLのバージョンは5の最新である「5.7」を選択して再作成することにしました。
まずは「5.7」用のパラメータグループの再作成。
そして「5.7」のRDSインスタンスを再作成。
新しく作成したインスタンスに対して当該SQLを実行。
今度はうまくいきました!!!
というわけで内部的な詳細原因までは分かりませんが、RDSインスタンスとAWS toolkitで指定したMYSQLのバージョン違いが原因だったようです。
もしかしたら別の対応方法もあるのかもしれませんが、現状ではEclipseからRDSのMYSQLにSQL実行したい場合、RDSインスタンスのバージョンを「5.x」にするしかないのかもしれません。