AWSでのMySQLインスタンスの作成

ちょっと番外編ですが、AWSでテスト用のMySQLインスタンスを作る方法です

#1.EC2インスタンスを作っておきます
- MySQLへアクセスするアプリを稼働させるEC２インスタンスを作っておきます
- EC2インスタンス画面で、セキュリティグループのIDを確認しておきます
- MySQLが未インストールであれば、

```sudo yum -y install mysql``` 

でMySQLを導入しておきます

#2. ユーザーとグループの作成
- [Amazon RDS のセットアップ](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_SettingUp.html)を参照し、データベース・アクセス用のIAMユーザーを作成します
- AWSコンソール左上の「サービス」→「セキュリティ、アイデンティティ、コンプライアンス」」から「IAM」を選択し、IAMダッシュボードを開きます
- 画面左側のメニューから「ユーザー」を選択し、「ユーザーを追加」ボタンを押します

<img width="1311" alt="スクリーンショット 2017-10-24 14.49.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/f1ae684f-4467-d24e-e536-7bf2c51c0930.png">

- 「アクセスの種類」で「AWSマネジメントコンソールへのアクセス」をチェックします。「コンソールのパスワード」で「カスタムパスワード」を選択し、パスワードを指定します
- 初回ログイン時にパスワードを変更させるには「パスワードのリセットが必要」をチェックしておきます

- 「次のステップ：アクセス権限」を押下します

<img width="706" alt="スクリーンショット 2017-10-24 14.51.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/b2cd47f8-ef4f-c30b-ae80-f8daa3b4c13c.png">

- 「グループの作成」を押下し、「ポリシータイプ」プルダウンメニューを開き、　「ジョブ機能」から「Administrative Access」を選択します
- 「グループを作成」を押下し、グループを作成します
- 作成したグループに作成したユーザーを登録します

#3. VPC
- ２０１３年３月以降に作成されたAWSアカウント（この記事を読んでいらっしゃるからにはそうだと思いますが）では、デフォルトのVPCが使用可能なので、特に新たに作成する必要はありません

#4. VPCセキュリティグループの作成
- [Amazon RDS のセットアップ](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_SettingUp.html)を参照し、VPCセキュリティグループを作成します
- AWSコンソール左上の「サービス」→「ネットワーング＆コンテンツ配信」の「VPC」を選択し、VPCダッシュボードを開きます
- 『セキュリティグループ」を選択し、「セキュリティグループの作成」ボタンを押下して作成画面を開きます

<img width="826" alt="スクリーンショット 2017-10-24 15.31.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/2e88d2c3-06c7-98d6-123a-a106b4b50044.png">


- セキュリティグループ名、説明などを入力し、「はい、作成する」を押下します
- 「インバウンドのルール」指定画面では、ポート範囲に3306、ソースに上記＃１のEC2インスタンスのセキュリティグループのIDを入力します
- 「作成」を押して作成します

#5. MySQLインスタンスの作成
- [MySQL DB インスタンスを作成して MySQL DB インスタンス上のデータベースに接続する](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html)を参照します
- AWSコンソール左上の「サービス」→「データベース」の「RDS」を選択し、RDSダッシュボードを開きます
- 「DBインスタンスの起動」を押下します
<img width="859" alt="スクリーンショット 2017-10-24 15.07.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/91f814f1-f662-ce54-6ecf-2281db37704a.png">
- 「Select Engine」でMySQLを選択します

<img width="962" alt="スクリーンショット 2017-10-24 15.09.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/7e1b0d8e-56bd-216e-6294-3bc94459b5b5.png">

- 稼働環境として「開発／テスト」を選択します

<img width="1007" alt="スクリーンショット 2017-10-24 15.10.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/d6c44421-e257-1a22-be4d-c3ea5d414b2e.png">

- 「ライセンスモデル」は「General Public License」が選択されていることを確認します
- 「インスタンスの仕様」で、DBインスタンスは「db.t2.micro」を選択します
- 「マルチAZ配置」「ストレージタイプ」などは設定されているデフォルト値のままで構いません
- 適宜「DBインスタンス識別子」などを指定します
- 「ユーザー」には「root」を指定しておきます

<img width="1092" alt="スクリーンショット 2017-10-24 15.10.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/125842/8d685003-f675-437e-fcf0-cc32a12d8e0d.png">

- 「次のステップ」を押します
- 「ネットワーク＆セキュリティ」の設定では、「VPC」は「デフォルト」が選択されていることを確認し、「サブネットグループ」も「default」が選択されていることを確認します
- 「パブリックアクセス可能」を「はい」に設定することでクライアントのコマンドからのアクセスが可能になります
- 「VPCセキュリティグループ」は前項で準備したセキュリティグループを指定します
- 「データベース名」をしていします
- それ以外の項目はデフォルト値で構いません
- 「DBインスタンスの作成」を押下するとDBインスタンスの作成が始まります。そのまま待ちます

#6. アクセス確認
- EC2インスタンスからのアクセスを確認します
- 前項のRDSインスタンス作成画面にて、新たに作成したMySQLインスタンスが稼働し始めると「ステータス」が緑字の「利用可能」に変わります
- 画面に表示されているエンドポイント（長い文字列）をコピーし、EC2のコンソール画面から下記のコマンドでMySQLへログインします

```:MySQLへのログイン
mysql -u root -p -h （エンドポイント)

```

ログインできると下記のような結果が返されます

```:MySQLへログイン成功
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 29
Server version: 5.6.37-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

```

#7. テーブル作成
- 表を作ってアクセスしてみます
- 下記のようなコマンドで表を作成します。各項目をつなぐ","と末尾の";"を忘れないようにします

```sql:表作成コマンド
create table table01 (
    id int,
    c1 varchar(100),
    c2 varchar(100),
    i1 int,
    i2 int
);
```

- 下記のようなコマンドでデータを登録（insert）します。末尾の";"を忘れないようにします

```sql:データの登録
insert into table01 (id, c1, c2) values (1, "Hyper Text Transfer Protocol", "HTTP");
```

- 下記のようなコマンドで登録したデータを閲覧（select）します

```sql:データの閲覧
select * from table01;
```

- 実行結果

```
mysql> use db01;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

mysql> create table table01 (
    ->     id int,
    ->     c1 varchar(100),
    ->     c2 varchar(100),
    ->     i1 int,
    ->     i2 int
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into table01 (id, c1, c2) values (1, "Hyper Text Transfer Protocol", "HTTP");
Query OK, 1 row affected (0.01 sec)

mysql> select * from table01;
+------+------------------------------+------+------+------+
| id   | c1                           | c2   | i1   | i2   |
+------+------------------------------+------+------+------+
|    1 | Hyper Text Transfer Protocol | HTTP | NULL | NULL |
+------+------------------------------+------+------+------+
1 row in set (0.00 sec)

mysql> exit
Bye
```


# 参考
- [Amazon RDS のセットアップ](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_SettingUp.html)
- [MySQL DB インスタンスを作成して MySQL DB インスタンス上のデータベースに接続する](http://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.html)