自分がメンテナンスしている AWS RDS の MySQL インスタンスは private subnet 内には配置されている。そのため自分のローカルなど外部からはネットワークレベルで接続できないようになっている。しかし稀に接続したくなることがある。昔だと SSH Port Forwarding を使用していたけど今はどうやるのかなと調べたのが今回の記事です。
どうやったのか
AWS の Session Manager を使用しました。
事前準備
- まずは公式ドキュメントを参考にしながら EC2 インスタンスに接続できるようにしておく
- RDS の Security Group で EC2 インスタンスからの接続を許可する
- AWS CLI と Session Manager plugin をローカルにインストールする
実行
下記コマンドを実行する
aws ssm start-session \ --target [EC2 のインスタンスID] \ --document-name AWS-StartPortForwardingSessionToRemoteHost \ --parameters '{"host":["[RDS endpoint]"], "portNumber": ["3306"], "localPortNumber": ["3306"]}'
うまく実行されれば Waiting for connections...
となるので後は mysql command や任意の MySQL Client を使ってホストが localhost
, port が 3306 を使用して接続するだけでいける
まとめ
Session Manager 便利