📑
[SSM] リモートホストへのポートフォワード機能を用いてローカルから踏み台経由で RDS に接続する
背景
今まで Dump の取得時など Session Manager を用いてローカルPCから直接 RDS に接続する際は、以下の流れで接続していました。
- ローカルPCと踏み台サーバ間をセッションマネージャーポートフォワード
- 踏み台サーバから RDS 間をソケット通信リレー
- MySQL コマンドで接続
この場合接続前に一旦踏み台サーバに接続して socat コマンドを実行する必要があり、少し面倒だったのですが、Session Manager のリモートホストへのポートフォワード機能を使えばより簡単に接続できたので手順を書いてみたいと思います。
前提
Session Manager に関しては以下を参照してください。
事前準備
AWS CLI
と Session Manager Plugin
をインストールします。
手順は以下の公式ドキュメントを参照してください。
踏み台サーバや RDS は既に構築してあるものとし、ここでの手順は省きます。
手順
手順としてはすごく簡単で、「AWS-StartPortForwardingSessionToRemoteHost」と言う名前の SSM ドキュメントを用いてコマンドを1つ叩くだけです。
bastion_instance_id と rds_endpoint に関しては適宜環境に合わせて書き換えてください。
aws ssm start-session \
--target {bastion_instance_id} \
--document-name AWS-StartPortForwardingSessionToRemoteHost \
--parameters '{"host":["{rds_endpoint}"],"portNumber":["3306"], "localPortNumber":["3306"]}'
Starting session with SessionId: xxxxxxxxxxxxxxxxx
Port 3306 opened for sessionId xxxxxxxxxxxxxxxxx.
Waiting for connections...
公式のドキュメントは以下を参照してください。
あとはこの状態で別タブなりを開いて、localhost の 3306 ポート宛に接続すれば RDS にログインできます。
mysql -h 127.0.0.1 -P 3306 -u **** -p "DB"
もっと早くこの機能のリリースに気づいていればと思いました。。
今後はこの機能を用いて、自動で DB の Dump を取得する処理などを書いてみたいなと思います。
Discussion