やりたいこと
ローカルの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と同じディレクトリ
に配置
- 作成したShellも同様に
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です。