EC2からRDSに接続してmySQLを操作。EC2踏み台サーバー構築メモ

EC2からRDSに接続してmySQLを操作したいと思いましたので、構築までの流れを備忘録として残したいと思います。EC2は通常のWebサーバーではなく、mySQLを操作する一時的なサーバー(踏み台サーバー)として立ち上げます。

keyboard

photo by Mr. Alex Garcia - Double Cliche on flickr

Ads

目次

構成図

構成図はこんな感じになりました。次項で詳細を解説したいと思います。

RDSに接続するEC2踏み台サーバー
RDSに接続するEC2踏み台サーバー ©

ネットワーク

まずはVPCとサブネットについてまとめたいと思います。VPCは以下のようにしました。

名前 CIDR
myVPC 10.0.0.0/16

サブネットは以下のようにしました。

名前 CIDR 用途
PublicSubnet-a 10.0.0.0/24 踏み台サーバーのサブネット
PrivateSubnet-a 10.0.100.0/24 RDSのサブネット
PrivateSubnet-c 10.0.101.0/24 RDSのサブネット(構成図には無いが、RDSで必要)

インターネットゲートウェイは、WebサーバーやLambdaを使う事を想定してmyVPCをアタッチしておきます。また、ルートテーブルの設定では、以下のようにゲートウェイからインターネットへの接続、そしてゲートウェイからPublicSubnet-aへの通信を許可しておきます。

送信先 ターゲット
10.0.0.0/16 local
0.0.0.0/0 igw-xxxxx

セキュリティ

セキュリティグループは以下のように設定しました。まず、踏み台サーバーは外部からのアクセスについてはSSHを許可。踏み台サーバーからはすべてのアクセスを許可します。

EC2のセキュリティグループ
ネームタグ

WebSecurityGroupという名前にしました。

インバウンドルール
タイププロトコルポート範囲送信元
SSH(22)TCP(6)220.0.0.0/0
アウトバンドルール
タイププロトコルポート範囲送信元
すべてのトラフィックすべてすべて0.0.0.0/0

続いて、RDSは、VPC内からアクセスされる3306ポートの通信のみ許可します。これにより、外部アクセスを防ぎます。RDSからの通信はすべて許可します。

RDSのセキュリティグループ
ネームタグ

MySQLSecurityGroupという名前にしました。

インバウンドルール
タイププロトコルポート範囲送信元
MySQL/Aurora(3306)TCP(6)330610.0.0.0/16
アウトバンドルール
タイププロトコルポート範囲送信元
すべてのトラフィックすべてすべて0.0.0.0/0

EC2、RDSインスタンスの立ち上げ

ネットワークとセキュリティグループの設定が済んだので、続いてEC2とRDSのインスタンスを立ち上げます。まずはEC2については以下の設定で立ち上げます。なお、立ち上げる際に鍵の保存を確認されるので、必ず保存しておいてください。

設定項目 内容
ネットワーク myVPC
サブネット PublicSubnet-a
自動割り当てパブリック IP 有効化
セキュリティグループ SSHSecurityGroup

RDSインスタンスは以下の設定で立ち上げます。サブネットグループは前述で作成したサブネットPrivateSubnet-aPrivateSubnet-cを追加しておきます。サブネットグループはAWSコンソール > RDS > サブネットグループで作成できます。

設定項目 内容
エンジン mySQL
マルチAZ配置 いいえ
DB インスタンス識別子 testDB(任意)
マスターユーザの名前 yourName(任意)
マスターパスワード yourPassword(任意)
VPC myVPC
サブネットグループ datastore-subnet-group
パブリックアクセス可能 いいえ
VPCセキュリティグループ MySQLSecurityGroup
データベースの名前 testDB(任意)
データベースのポート 3306

EC2の踏み台サーバーに入る

インスタンスが立ち上がったら、次はEC2にSSHコマンドで入ってみます。

bash
1
$ ssh -i AWS_Key.pem ec2-user@12.345.67.78

-iオプションでEC2を立ち上げる際にダウンロードした鍵ファイルを指定します。続いてホスト先にEC2のアドレスを指定するのですが、こちらはec2-user@に続く、パブリックDNSかパブリックIPを指定します。DNSやIPはAWSコンソール > EC2 > インスタンスから確認する事ができます。EC2に入ると以下の様な表示がでます。

bash
1
2
3
4
5
6
7
8
9
$ ssh -i AWS_Key.pem ec2-user@12.345.67.78
Last login: Tue Aug 30 01:12:34 2016 from abcd1234.hoge.ne.jp

__| __|_ )
_| ( / Amazon Linux AMI
___|\___|___|

https://aws.amazon.com/amazon-linux-ami/2016.03-release-notes/
[ec2-user@ip-10-0-0-4 ~]$

RDSのmySQLに接続する

EC2に入る事ができたら、そのまま引き続きRDSのmySQLに接続してみます。まずはEC2のyumパッケージの更新と、mysqlをインストールしておきましょう。

bash
1
2
[ec2-user@ip-10-0-0-4 ~]$ sudo yum update
[ec2-user@ip-10-0-0-4 ~]$ sudo yum install mysql

EC2にmysqlがインストールされたら、RDSに接続してみます。AWSコンソール > RDS > インスタンスからRDSインスタンスのエンドポイントを確認しておいてください。

bash
1
2
[ec2-user@ip-10-0-0-4 ~]$ mysql -h testDB.hoge12345.ap-northeast-1.rds.amazonaws.com -P 3306 -u yourName -p
Password : yourPassword

mysqlコマンドのオプションは以下の内容を設定します。

mysqlのオプション 内容
-h RDSのエンドポイント
-P データベースのポート(※)
-u マスターユーザの名前(※)
-p マスターパスワード(※)

※の項目は、RDSインスタンスを立ち上げる際に設定した内容を確認して下さい。

SQL操作

mySQLは久方ぶりに触っていないので、ここでSQLのよく使う構文をまとめてみたいと思います。

説明 SQL
DB一覧 SHOW DATABASE;
DB使用 USE [DB名];
DB作成 CREATE DATABASE [DB名];
DB削除 DROP DATABASE [DB名];
テーブル一覧 SHOW TABLES;
テーブル作成 CREATE TABLE `[テーブル名]` column1 [データ型] [その他オプション], … ;
テーブル削除 DROP TABLE `[テーブル名]`;
データ挿入 INSERT INTO `[テーブル名]`(`カラム名`, … ) VALUES (`値`, … );
データ取得 SELECT * FROM `[テーブル名]`;
データ更新 UPDATE [テーブル名] SET [COLUMN名] = ‘新しい値’;
データ削除 DELETE FROM [テーブル名] WHERE [条件];
データ全削除 DELETE FROM [テーブル名];
警告表示 SHOW WARNINGS;

SQLは以下を参考にさせて頂きました。

Qiita
データベースを扱う基本SQL一覧

Select文の検索条件

またSelect文のwhereやlimit句による検索条件は以下のような使い方です。

sql
1
2
3
select `カラム名1`, `カラム名2` from `テーブル名` where カラム名 = '完全一致';
select `カラム名1`, `カラム名2` from `テーブル名` where カラム名 like '後方一致%';
select `カラム名1`, `カラム名2` from `テーブル名` where カラム名 like '%前後一致%' limit 1;

Yukun’s Blog
MySQL: データ検索クエリの基本 – SELECT文、WHERE句、LIKE、IN、BETWEENキーワード

mySQLの文字化け対策

mySQLでSQL操作を行っていると、日本語などのマルチバイト文字が文字化けを起こします。これについては以下の記事を参考にしながら、AWSコンソール > RDS > パラメータグループとコマンドから設定を行いました。

xykのブログ
RDS(MySQL)の文字コードとタイムゾーンの設定

まとめ

EC2の踏み台サーバーにSSHで接続し、さらにEC2からRDSのmySQLに接続することができました。

Ads
Ads