LoginSignup
5
4

More than 3 years have passed since last update.

ローカルPCのDocker環境からAWS RDSに接続する

Last updated at Posted at 2020-09-20

概要

  • ローカルPCのDocker環境からRDSに接続する方法のメモ
  • Dockerの開発では、DBのコンテナイメージを作成する場合が多いと思われるが、何かしらの理由でAWSのRDSを直接使用したい場合の方法

前提

  • VPC環境を構築し、PrivateサブネットにEC2インスタンスおよび、Railsアプリケーションが接続する用のRDSを作成済
    • Nat gateway もしくは Endpointにより サービス 「com.amazonaws.us-east-1.ssm 」に接続が可能なこと
  • EC2インスタンスにssm-agentがインストールされている
  • EC2インスタンスへは踏み台サーバ等使用せずにSSMにて接続を行う

ローカルPC環境

  • Docker for mac

参考

SSMの設定

  • ssh config ファイルにSSM接続用の設定を追記する
config
Host EC2サーバのインスタンスID]
    User [ECインスタンス接続ユーザ]
    Port 22
    ServerAliveInterval 300
    IdentityFile ~/.ssh/id_rsa
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  • ssm ssmによるssh接続確認
$ ssh [EC2サーバのインスタンスID]

ポートフォワーディングによるRDSへの接続

  • aws profileの設定
    • ポートフォワーディングによるトンネル作成時に必要
$ aws configure --profile=ssm-test
  • ssh-configに以下を設定
# SSH over Session Manager
host i-* mi-*
   ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p' --profile=ssm-test"
  • トンネルの作成
ssh -i ~/.ssh/id_rsa [ECインスタンス接続ユーザ]@[EC2サーバのインスタンスID] -L 13306:[RDSのエンドポイント]:3306
  • rdsへの接続確認を実行
mysql -u [DB接続ユーザ] -h 127.0.0.1 -P 13306 -p

Rails設定

database.ymlの設定

  • ポート番号にRDSへのポートフォワーディング時に指定しポート番号(13306)を指定する
  • hostに「docker.for.mac.localhost」を指定する
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: [RDS接続ユーザ]
  password: [RDS接続パスワード]
  host: docker.for.mac.localhost
  port: 13306

以上の設定を行うことで、Dockerコンテナで起動するRailsアプリケーションから、RDSへの接続が可能になる。
SSM接続および、ポートフォワーディングに使用に際し、SGおよび、NACLのポート番号(22、13306)の解放等は特に不要。

5
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4