RDSはEC2からしか接続できない設定になっているため、ローカル環境からRDSに接続したい場合は少し作業が必要です。
今回は、ローカル環境のDockerコンテナで動いているLaravelアプリから踏み台(EC2)経由でRDSに接続してみた方法を紹介します。
$ docker --version
Docker version 20.10.2, build 2291f61
$ docker-compose --version
docker-compose version 1.27.4, build 40524192
まず、SSHトンネルを作成します
ssh -N -L 3333:[RDS endpoint]:[RDS port] -i [踏み台の秘密鍵] -p 22 [EC2のユーザー]@[EC2踏み台のIPアドレス]
今回は3333のポート番号をRDSと設定します。
作成したら、コマンドで確認します。
ローカルマシーンのターミナルで下記のコマンドを実行して確認します。
mysql -h 127.0.0.1 -u [USER NAME] -p -D [DATABASE NAME] -P 3333
Dockerコンテナに入って下記のコマンドを実行して確認します。
注意点としては、hostがhost.docker.internalであることです。
mysql -h host.docker.internal -u [USER NAME] -p -D [DATABASE NAME] -P 3333
次に、Laravelアプリの.envファイルを修正します。
DB_HOST=host.docker.internal
DB_PORT=3333
DB_DATABASE=[DATABASE NAME]
DB_USERNAME=[USER NAME]
DB_PASSWORD=[PASSWAORD]
最後、Laravel アプリで確認します。
これでやりたいことをできるようになりました。
ご紹介は以上です。