EC2からRDSに接続してmySQLを操作。EC2踏み台サーバー構築メモ
EC2からRDSに接続してmySQLを操作したいと思いましたので、構築までの流れを備忘録として残したいと思います。EC2は通常のWebサーバーではなく、mySQLを操作する一時的なサーバー(踏み台サーバー)として立ち上げます。
photo by Mr. Alex Garcia - Double Cliche on flickr
目次
構成図
構成図はこんな感じになりました。次項で詳細を解説したいと思います。
ネットワーク
まずは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) | 22 | 0.0.0.0/0 |
アウトバンドルール
タイプ | プロトコル | ポート範囲 | 送信元 |
---|---|---|---|
すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
続いて、RDSは、VPC内からアクセスされる3306ポートの通信のみ許可します。これにより、外部アクセスを防ぎます。RDSからの通信はすべて許可します。
RDSのセキュリティグループ
ネームタグ
MySQLSecurityGroup
という名前にしました。
インバウンドルール
タイプ | プロトコル | ポート範囲 | 送信元 |
---|---|---|---|
MySQL/Aurora(3306) | TCP(6) | 3306 | 10.0.0.0/16 |
アウトバンドルール
タイプ | プロトコル | ポート範囲 | 送信元 |
---|---|---|---|
すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
EC2、RDSインスタンスの立ち上げ
ネットワークとセキュリティグループの設定が済んだので、続いてEC2とRDSのインスタンスを立ち上げます。まずはEC2については以下の設定で立ち上げます。なお、立ち上げる際に鍵の保存を確認されるので、必ず保存しておいてください。
設定項目 | 内容 |
---|---|
ネットワーク | myVPC |
サブネット | PublicSubnet-a |
自動割り当てパブリック IP | 有効化 |
セキュリティグループ | SSHSecurityGroup |
RDSインスタンスは以下の設定で立ち上げます。サブネットグループは前述で作成したサブネットPrivateSubnet-a
とPrivateSubnet-c
を追加しておきます。サブネットグループはAWSコンソール > RDS > サブネットグループ
で作成できます。
設定項目 | 内容 |
---|---|
エンジン | mySQL |
マルチAZ配置 | いいえ |
DB インスタンス識別子 | testDB(任意) |
マスターユーザの名前 | yourName(任意) |
マスターパスワード | yourPassword(任意) |
VPC | myVPC |
サブネットグループ | datastore-subnet-group |
パブリックアクセス可能 | いいえ |
VPCセキュリティグループ | MySQLSecurityGroup |
データベースの名前 | testDB(任意) |
データベースのポート | 3306 |
EC2の踏み台サーバーに入る
インスタンスが立ち上がったら、次はEC2にSSH
コマンドで入ってみます。
1 | $ ssh -i AWS_Key.pem ec2-user@12.345.67.78 |
-i
オプションでEC2を立ち上げる際にダウンロードした鍵ファイルを指定します。続いてホスト先にEC2のアドレスを指定するのですが、こちらはec2-user@
に続く、パブリックDNSかパブリックIPを指定します。DNSやIPはAWSコンソール > EC2 > インスタンスから確認する事ができます。EC2に入ると以下の様な表示がでます。
1 | $ ssh -i AWS_Key.pem ec2-user@12.345.67.78 |
RDSのmySQLに接続する
EC2に入る事ができたら、そのまま引き続きRDSのmySQLに接続してみます。まずはEC2のyum
パッケージの更新と、mysql
をインストールしておきましょう。
1 | [ec2-user@ip-10-0-0-4 ~]$ sudo yum update |
EC2にmysql
がインストールされたら、RDSに接続してみます。AWSコンソール > RDS > インスタンス
からRDSインスタンスのエンドポイントを確認しておいてください。
1 | [ec2-user@ip-10-0-0-4 ~]$ mysql -h testDB.hoge12345.ap-northeast-1.rds.amazonaws.com -P 3306 -u yourName -p |
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句による検索条件は以下のような使い方です。
1 | select `カラム名1`, `カラム名2` from `テーブル名` where カラム名 = '完全一致'; |
Yukun’s Blog
MySQL: データ検索クエリの基本 – SELECT文、WHERE句、LIKE、IN、BETWEENキーワード
mySQLの文字化け対策
mySQLでSQL操作を行っていると、日本語などのマルチバイト文字が文字化けを起こします。これについては以下の記事を参考にしながら、AWSコンソール > RDS > パラメータグループ
とコマンドから設定を行いました。
xykのブログ
RDS(MySQL)の文字コードとタイムゾーンの設定
まとめ
EC2の踏み台サーバーにSSHで接続し、さらにEC2からRDSのmySQLに接続することができました。