[AWS]EC2からプライベートサブネットのRDSへ接続する
はじめに
今回はパブリックサブネットのEC2からプライベートサブネットのRDSへ接続する方法についてご紹介します.
この記事を読んでいただければVPCの作成からRDSへの接続までできるようになっています.RDSへの接続方法だけ知りたい方は「接続する」というところからお読みください.
イメージは以下の図のようになります.
AWS構成のイメージ
準備
VPC、サブネットの作成
まず、VPCやサブネットなどを作成していきます.
VPC、サブネットとは
VPC
VPCとは、Virtual Private Cloudの略でAWSアカウント内に構築できる仮想ネットワークのことです.VPCの中で今回使用するEC2やRDSなどが動作します.
サブネット
サブネットとはVPCによって作られたCIDRブロックを分割したネットワーク群のことです.サブネットには、後ほど出てくるパブリックサブネットやプライベートサブネットがあります.このような設定をすることで外部からのアクセスの制御が可能になります.
手順は以下になります.
- VPCの作成
- 作成するリソースでVPC、サブネットなどを選択
- 名前の設定をする
- アベイラビリティーゾーン(AZ)は2にする
- DNSホスト名を無効化
設定画面
下部のVPCを作成というボタンを押せば画像の右側のような構成でVPCやサブネットなどが自動的に生成されます.
今回は簡単のためこのような方法でVPCやサブネットを作成していますが、実際に使う場合はそれぞれ必要な設定を行い作成してください.
セキュリティグループの作成
EC2のセキュリティグループの作成
手順は以下です.
- セキュリティグループの作成
- 名前、説明の設定
- VPCは先ほど作成したものを選択
VPCの選択 - インバウンドルールを画像のように設定する
インバウンドルールの設定
RDSのセキュリティグループの作成
手順はEC2のセキュリティグループとほとんど同じで、以下のようになります.
- セキュリティグループの作成
- 名前、説明の設定
- VPCは先ほど作成したものを選択
VPCの選択 - インバウンドルールを画像のように設定する
インバウンドルールの設定
DBサブネットグループの作成
次に、DBサブネットグループを作成します.手順は以下です.
- DBサブネットグループの作成
- 名前、説明の設定
- VPCは先ほど作成したものを選択
VPCの選択 - AZを選択
VPC作成時に使われた2つを選択する - サブネットの選択
作成されたサブネット(プライベート2、パブリック2)のうち、プライベートサブネットを選択する.
AZ、サブネットの選択
なお、VPC->サブネットから下の画像のようにどのサブネットがプライベートかを確認することができます.
作成されたサブネットの一覧
EC2インスタンスの作成
EC2のインスタンスを作成します.手順は以下です.
- インスタンスを起動
- OSイメージはAmazon Linux 2を選択(無料枠)
- キーペアを作成
キーペアの作成 - ネットワーク設定の編集
VPCは先ほど作成したものを選択
サブネットはパブリックサブネットを選択
パブリックIPの自動割り当ては有効化
既存のセキュリティーグループを選択する -> 先ほど作成したEC2用のセキュリティグループを選択
ネットワークの設定
RDSの作成
手順は以下です.
- データベースの作成
- データベースはMySQLを選択(無料枠を使用)
- DBインスタンス識別子、マスターユーザー名、パスワードを設定
設定 - 接続の設定
VPCは今回作成したものを設定
サブネットグループ、セキュリティグループはRDS用に作成したものを設定
AZを設定
接続の設定
なお、触れていない部分はデフォルトのままで問題ありません.
接続する
まず、EC2インスタンスに接続します.インスタンスを選択し、「接続」というボタンを押します.
EC2への接続方法
遷移先に接続方法が書いてあるので先ほど作成したkeyを使って接続してください.
接続できたら以下のようになると思います.
$ ssh -i .ssh/zenn-test.pem ec2-user@(ec2インスタンスのパブリックIP)
__| __|_ )
_| ( / Amazon Linux 2 AMI
___|\___|___|
https://aws.amazon.com/amazon-linux-2/
2 package(s) needed for security, out of 6 available
Run "sudo yum update" to apply all updates.
[ec2-user@ip-10-0-10-120 ~]$
また、今回はDockerを使用し、GitHubリポジトリのプロジェクトをデプロイするので以下の手順で必要なものをインストールしてください.
- まず、ymuのアップデートを行う
[ec2-user@ip-10-0-10-120 ~]$ sudo yum update
- gitのインストール
[ec2-user@ip-10-0-10-120 ~]$ sudo yum install git
- Docker関連の設定
[ec2-user@ip-10-0-10-120 ~]$ sudo yum install docker
[ec2-user@ip-10-0-10-120 chat-app]$ sudo service docker start
Redirecting to /bin/systemctl start docker.service
[ec2-user@ip-10-0-10-120 chat-app]$ sudo usermod -a -G docker ec2-user
- docker-composeのインストール
[ec2-user@ip-10-0-10-120 ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
[ec2-user@ip-10-0-10-120 ~]$ sudo chmod +x /usr/local/bin/docker-compose
[ec2-user@ip-10-0-10-120 ~]$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- MySQLのインストール
[ec2-user@ip-10-0-10-120 ~]$ sudo yum install mysql
次に、GitHubのリポジトリをクローンします.
このリポジトリはDjangoで作成しており、MySQLを使用するように設定してあります.今回はDjangoでMySQLを使用する方法などについて紹介はしません.
最後に、EC2内のDjangoプロジェクトからRDSへ接続する設定です.
まず、Djangoでの設定は以下のようになっています.
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': os.environ.get('MYSQL_USER'),
'PASSWORD': os.environ.get('MYSQL_PASSWORD'),
'HOST': os.environ.get('MYSQL_HOST'),
'PORT': 3306,
}
}
次に、EC2内のプロジェクトに以下のような.env
ファイルを追加します.
MYSQL_USER=admin
MYSQL_PASSWORD=xxxxx <- DB作成時に設定したパスワード
MYSQL_HOST=xxxxx <- DBのエンドポイント
SECRET_KEY=xxxxx
DBのエンドポイントは以下のように確認できます.
DBのエンドポイント
次に、MySQLにデータベースを作成します.
まず、以下のようにしてMySQLにログインします.
[ec2-user@ip-10-0-10-120 ~]$ mysql -u admin -p -h xxxxx <- DBのエンドポイント
ログインできたら以下のようにデータベースを作成します.
MySQL [(none)]> create database test;
後は、Djangoプロジェクトを立ち上げるだけでEC2からRDSに接続することができます.
まとめ
以上がEC2からRDSに接続する方法でした.
手順を簡略化しているところもありますので実際に使用する際はそれぞれの設定が必要かとは思いますが、参考になれば幸いです.
少し長くなってしまいましたが、最後までご覧いただきありがとうございました!
Discussion