Posted at

DockerコンテナからEC2へSSHポートフォワードしてRDSに接続する

More than 1 year has passed since last update.


やりたいこと

ローカルのDockerコンテナから、AWSのEC2インスタンスへSSHポートフォワードで接続して、

RDSインスタンスで起動中のMySQLへ接続する。


はじめに


  • AWS上でEC2インスタンスへSSH接続する際の pemファイル をダウンロードしておく


Docker環境の構築


  • ダウンロードした pemファイル を 以下で作成する Dockerfileと同じディレクトリ に配置する

  • まずは適当にDockerfileを作成する

FROM ubuntu:18.04

RUN apt-get update -qq && apt-get install -y openssh-client mysql-client

ENV PEM_NAME 'ec2_test.pem'
ENV RDS_ENDPOINT 'hogehoge.fugafuga.ap-northeast-1.rds.amazonaws.com'
ENV EC2_USER 'ec2-user'
ENV EC2_HOST 'hogehoge.ap-northeast-1.compute.amazonaws.com'
ENV DATABASE_USER 'test-user'
ENV DATABASE_PASSWORD 'password'

COPY ${PEM_NAME} /tmp
COPY run.sh /tmp

CMD ["bash", "/tmp/run.sh"]


  • CMD内に書くと長くなり可読性が下がる気がしたので、SSH接続用のShellを作成


    • 作成したShellも同様に Dockerfileと同じディレクトリ に配置




run.sh

#!/bin/bash

ssh -4 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null \
-f -N -L 3307:${RDS_ENDPOINT}:3306 \
-i /tmp/${PEM_NAME} ${EC2_USER}@${EC2_HOST}

mysql -h 127.0.0.1 -u ${DATABASE_USER} -P 3307 -p${DATABASE_PASSWORD}



Dockerイメージ作成と起動


  • 以下コマンドでDockerイメージを作成

docker build -t rds-test:0.1 .


  • いよいよDocker起動

docker run -it rds-test:0.1

これで mysqlのコンソール が起動すればOKです。