RDSでMySQLデータベースを作るための覚書

# はじめに
AWSのRDSにMySQLのデータベースを作ります。[こちら](https://qiita.com/talomina/items/79277eda3dec13fa8be2#vpc%E3%81%AE%E4%BD%9C%E6%88%90)で作成したEC2から接続できるようにします。

# 全体概要
下記のツリーのようにオブジェクトを作っていきます。「AAA」は任意の名前に読み替えしてください。

* VPC AAAvpc01 10.0.0.0/16 [**こちら**](https://qiita.com/talomina/items/79277eda3dec13fa8be2#vpc%E3%81%AE%E4%BD%9C%E6%88%90)で作ったものを使います。
* EC2 RDSに適用するためのセキュリティグループを作ります。
    * セキュリティグループ AAASGRDS01
        * MYSQL/Aurora 3306/TCP from 0.0.0.0/0
* RDS
    * DBサブネットグループ AAADBSUB01
    * MySQLデータベース aaamysql01

# MySQLデータベースの作成
先にセキュリティグループとDBサブネットを作ってからRDSを作成します。
## セキュリティグループの作成
* **EC2**のセキュリティグループ新規作成画面を開きます。セキュリティグループの名前と説明を入れてVPCはRDSの置き場所を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/c3d25f92-0f0e-310c-22b1-e5154b2ca243.png)
* セキュリティグループのインバウンドルールを追加します。タイプはMYSQL/Auroraでソースを0.0.0.0/0とします。アウトバウンドはそのままでセキュリティグループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/b4bad288-16ed-430b-cd92-71dc43226b44.png)
* セキュリティグループが完成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/8a3cf0f6-4bec-e7d2-ae42-4d9a12404663.png)

## DBサブネットグループの作成
* **RDS**のサブネットグループメニューからDBサブネットグループの作成画面を開きます。名前と説明を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/ae2fda9f-91c7-249d-cf0b-04aa6ccc78ed.png)
* VPCに対象のVPCを入力して、このVPCに関連するすべてのサブネットを追加します。作成ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/b58a755d-6dc9-34e8-434a-60b047a42b71.png)
* DBサブネットグループが完成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/f12c339f-950f-d1f9-8a11-eb3644cd78e0.png)

## データベースを作成する
* **RDB**のデータベース作成画面を開きます。エンジンのタイプでMySQLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/15bb2061-3fc5-651c-d01a-615f983bf6bb.png)
* テンプレートで無料利用枠を選びます。DBインスタンス識別子でデータベース名を入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/7fec1374-779d-2605-0137-ccd09daa335c.png)
* 認証情報としてマスターユーザー名とパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/35fbe7d5-7871-6f16-6880-ccdf665a7983.png)
* VPCは対象のVPC、先ほど作ったDBサブネットグループを選択します。パブリックアクセスは**なし**にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/419875f4-8fae-3b46-bfe5-084b40288c95.png)
* セキュリティグループは既存で先ほど作成したもの、アベイラビリティゾーンはどれか一つを選択してデータベースの作成を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/452ae470-5058-a307-6e66-6a361cae9a82.png)
* データベースの作成が正常に始まりました。これは10分ほど時間がかかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940466/c4b37659-7348-6ffa-d593-ff2adee6786b.png)

# MySQLクライアントの作成
* [既存のEC2サーバ](https://qiita.com/talomina/items/79277eda3dec13fa8be2#ec2%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B3%E3%81%A4%E3%81%AE%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E3%81%AB%E3%81%9D%E3%82%8C%E3%81%9E%E3%82%8C%E4%B8%80%E3%81%A4%E3%81%9A%E3%81%A4%E4%BD%9C%E3%82%8A%E3%81%BE%E3%81%99)から接続テストを行うにあたり、[こちら](https://qiita.com/tamorieeeen/items/d9b2af588f1dfd43120d)を参考にMySQLクライアントをインストールしました。

```
$  sudo yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
$  yum info mysql
$  sudo yum-config-manager --disable mysql57-community
$  sudo yum-config-manager --enable mysql80-community
$  sudo yum install -y mysql-community-client
$  mysql --version
```

# 接続テスト
下記のように接続テストを行います。HOSTNAMEは作成したデータベースの接続とセキュリティの設定にあるエンドポイント(例:aaamysql01.c3xhaaxcxwwl.ap-northeast-1.rds.amazonaws.com)を入力します。

```
$ mysql -h HOSTNAME -P 3306 -u admin -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.20 Source distribution

Copyright (c) 2000, 2020, 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>
```
EC2から接続ができました！

# おわりに
* データベースのセキュリティグループでインバウンドのソースを無制限にしていますが、RDSのパブリックアクセスを「なし」にしたので、VPC内からのみ接続可能になります。パブリックアクセスをありにするとインターネットからデータベース接続が可能になると思います。
* データベースのテンプレートとして無料枠を利用して作成しましたが、本番環境を選ぶとマルチAZにより可用性を高めることができると思います。

# 参考文献
* https://tsukasa-blog.com/programming/django-ec2-apache/
* https://qiita.com/na0AaooQ/items/7c69a88c80f1efb4cad3
*  https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/CHAP_MySQL.html
*  https://qiita.com/ponsuke0531/items/3ae69a9d477809c00917
*  https://qiita.com/suzuki_y/items/3261ffa9b67410803443