EC2を踏み台にしてRDSに繋げようとして少し手間取ったので。
HeidiSQL→EC2→RDSのイメージです。他のDBクライアントでも参考になると思います。
ポートフォワード
まずSSM Session Managerでポート転送できるようにします。
やり方は SSM Session Managerを使ってポートフォワードする などを参考にしてください。
私は上記サイトの例の通りEC2インスタンスの22番ポートをローカルの10022番にポートフォワードする設定で行いました。
(注意点)
上記サイトの例の通りのコマンドだとLinuxでは動作するようですがWindowsのコマンドラインやPowershellだと以下のようなエラーが出てしまうため、JSON部分をエスケープする必要があります。
(ちなみに、Windowsターミナルだとエスケープする必要がなかったので、まずはどちらかで試してみてエラーが出たらエスケープしてみてください)
Error parsing parameter '--parameters': Invalid JSON: Expecting property name enclosed in double quotes:
以下のコマンドを
$ aws ssm start-session --target i-0123456789ABCDEFG --document-name AWS-StartPortForwardingSession --parameters '{"portNumber":["22"],"localPortNumber":["10022"]}'
こんな感じにエスケープする
$ aws ssm start-session --target i-0123456789ABCDEFG --document-name AWS-StartPortForwardingSession --parameters '{\"portNumber\":[\"22\"],\"localPortNumber\":[\"10022\"]}'
HeidiSQLの設定
設定項目は以下のようになります。
設定タブ
- ネットワーク種別:MySQL(SSH tunnel)
- ホスト名/IP:AWS RDSのホスト名
- ユーザー:DBユーザー名
- パスワード:DBパスワード
- ポート:DBのポート番号
SSHトンネルタブ
- SSH executable:plinkを選択します。無い場合は Download PuTTY: latest release からplink.exeをダウンロードしてHeidiSQLがインストールされているフォルダに保存します。
- SSH host+port:ポート転送しているので上記で設定したポート番号にします(ここでは10022)。
- ユーザー名:EC2のユーザー名
- パスワード:SSHのパスワードが設定されている場合は入力します。無い場合は空でOKです。
- SSH timeout:接続に結構時間がかかるので40にしておきます。
- Private key file:SSH鍵ファイルを指定します。pemだと失敗するためppkに変換する必要があります。Download PuTTY: latest release からputtygen.exeをダウンロードして変換します。
Loadボタンを押してpemファイルを選択し、Generateを押すと変換されるのでSave private keyボタンを押してppkとして保存します。
以上の設定が済んだらHeidiSQLの接続ボタンを押せば接続が開始されます。
接続が開始されるとポートフォワードを走らせているコンソールにはConnection accepted for session [xxxx-0123456789abc]のようなメッセージが表示されるはずです。
環境によるかもしれませんが、接続が完了するまで結構時間がかかるので気長に待ちましょう(私の環境では接続完了するまで40秒程度かかりました)。一度接続されてしまえば直接接続しているよりは多少もっさりしている感じはあるものの操作自体はほぼストレス無くできます。