EC2とRDSでWeb環境構築するよ！（第４回：RDS編）

EC2とRDSのWeb環境構築の第４回目です。
第３回：Route53編はこちら
https://qiita.com/kikurage2030/items/46154965781b49b93e0d

## サービスの全体象
作りたいサービスの概要はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/00cd9bdd-7272-b7c8-213d-616e17591a30.png)

EC2にWebサーバを立ててPHPのプログラムがMySQLにアクセスしてテーブルの情報を表示する画面を作ります。
いわゆる一般的なWebシステムの構成でWebサーバはPublicサブネットに公開し、DBサーバはPrivateサブネットで冗長構成としてEC2のみのアクセスを許可する制御とします。また独自ドメインを取得してDNSでの名前解決も行えるようにします。

このシリーズで取り組む内容は
第１回：VPC・サブネット周りの作業
第２回：EC2の構築
第３回：Route53の登録　
<font color=red>第４回：RDSの構築　ここ！</font>
第５回：Web環境の構築
を予定しています。今回は第４回：RDS編となります。

<br>

## RDS構築作業概要
今回はEC2上のアプリが接続するためのDBサーバ（RDS）を構築します。RDS構築にあたってはEC2と同様にセキュリティグループの作成が必要となります。
またRDS独自の可用性要件としてマルチAZ対応を前提とした構成を組みます。その後必要なDBパラメータの設定を行いこれらの作業のテンプレートをRDSのインスタンスにアタッチしてあげる作業を行います。

順序としては
1.セキュリティグループの作成
2.サブネットグループの作成
3.パラメータグループの作成
4.オプショングループの作成
5.RDSインスタンスの作成
6.RDSへの接続確認
の順番で実施。

## 1.RDS用のセキュリティグループを作成する
RDSへの接続を制御するためにセキュリティグループ（ファイアウォール）を設定します。
RDS（MySQL）に対してのインバウンドアクセスのみを許可する設定を行います。

「EC2」→「セキュリティグループ」→「セキュリティグループの作成」をクリック。

・セキュリティグループ名：launch-wizard-4
・VPC：my-vpc-01
・タイプ：MYSQL/Aurora
・ソース：EC2のセキュリティグループを指定（launch-wizard-3）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/f91a248f-95fe-d3ea-fbe2-d7a6c6ebdcaf.png)
アクセスを許可するソースはWebサーバのIPでもセキュリティグループ指定でもどちらでもOKです。今後の拡張性を考えるとセキュリティグループの方が望ましいかもしれません。
<br>

## 2.RDSサブネットグループの作成
DBのサブネットグループを作成します。RDSは冗長化を考慮した設計とするのでマルチAZ環境を組むためにサブネットグループ（複数のサブネットのチーミング作業）が必要となります。(第一回で作成したRDS用のサブネットを選択してグループを作成します。)

「RDS」→「サブネットグループ」をクリック

・名前：aws-db-subnet-group
・VPC：my-vpc-01
・アベイラビリティゾーン：ap-northeast-1a,  ap-northeas-1c を選択
・サブネット：10.0.20.0/24,  10.0.21.0/24
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/1c85438c-2340-77dc-5453-4a752a8afb0c.png)

サブネットグループが作成されるのでこの中にRDSインスタンスを構築していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/a7632eea-5b84-657b-f9a5-7b559e269bf6.png)


## 3.パラメータグループの作成
DBの初期パラメータを作成します。このパラメータグループで対象のRDMS製品を指定したり、その製品固有のパラメータ値（いわゆるDBのブロックサイズやバッファープールサイズなど）を設定してきます。設定したパラメータは後で作成するRDSのインスタンスにアタッチして使うことになります。

「RDS」→「パラメータグループ」をクリック

・グループ名：AWS-MYSQL-PARAMG
・Engine Type：Aurora MySQL
・パラメータグループファミリー：aurora-mysql8.0
・タイプ：DB Parameter Group
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/b51bc0a1-c42a-24a4-a25b-a6016b17a3b6.png)
<br>
具体的なMySQLでのパラメータ値をセットしていきます。（今回は規定値のまま）
※タイプ適用：Static（再起動後反映）、Dynamic（即時反映）です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/f742c63a-a07e-a595-7967-4d36cc3e3c9c.png)


## 4.オプショングループの作成
製品ごとに用意されている追加のプラグインなどの機能を使うかを選択します。

「RDS」→「オプショングループ」をクリック
・名前：AWS-MYSQL-OPTG
・エンジン：mysql
・メージャーバージョン：8.0
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/6dafed13-7ecd-0149-550e-0c888c5752c3.png)

ここまでで下準備は完了です。


## 5.RDSインスタンスの作成
ここでRDSのインスタンスを作成して、前章までで作成したDBサブネットグループやパラメータグループ、オプショングループなどをアタッチしてあげます。（少々長いよ。）

「RDS」→「データベースの作成」クリック

・MySQLを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/ac8a31bb-c37e-706b-4c78-f36c204ebe8f.png)

<br>

・エンジンバージョン：MySQL 8.0.34
・テンプレート：開発/テスト（本番を選ぶと高くなるの）
・可用性と耐久性：マルチAZ DBインスタンス

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/19dcd837-1695-1644-dbfe-abab909e75db.png)
<br>
・DBインスタンス識別子：AWS-MYSQL-DB　（MySQLのインスタンス名です、クライアントからの接続識別子）
・マスターユーザー：admin
・認証管理：セルフマネージド（自身でパスワード管理する場合選択）
・マスターパスワード：個別に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/55f02aab-c5f8-1764-95d2-1732e1a67d65.png)

<br>
インスタンスクラスとストレージはお金がかからない最小構成を選択します。（スクショの通り）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/15996118-34f3-6750-dd89-9450d4628543.png)

<br>

・コンピューティングリソース：EC2コンピューティングリソースに接続しない
・VPC：my-vpc-01（RDSがぶら下がるVPCを選択）
・DBサブネットグループ：aws-db-subnet-group（先ほど作成したサブネットグループ）
・パブリックアクセス：なし
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/2054464b-c74a-2a4e-0d58-da45030c0b46.png)
<br>

・セキュリティグループ：launch-wizard-4 （前章で作成したセキュリティグループ）
・アベイラビリティゾーン：ap-northeast-1a（RDSの動作するAZを選択）
・認証機関：デフォルトを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/14e006a2-4c8d-f362-d4ba-d0c715936fe6.png)
<br>

・最初のデータベース名：MYSQLDB
・DBパラメータグループ；前章で作成したパラメータグループを指定
・オプショングループ：前章で作成したオプショングループを指定
・バックアップ：自動バックアップ有効・保持期間7日（セキュリティ要件に応じて柔軟に決める）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/6fc2d902-7beb-69b4-4946-6fb15146098b.png)
<br>

最終的な月次の予定コストが表示されるので問題なければ「データベースの作成」クリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/9edcbf87-23a5-8fe3-12eb-7d68a45985e1.png)

<br>

DBが作成できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/5eab78cd-b0ae-def6-e778-97069746c69d.png)

## 6.RDSへの接続確認
ここでEC2からRDSへの接続確認を実施します。MySQLのクライアントからRDSの接続情報を入力してDBに接続が可能か確認します。

EC2(第２回で作成済)にログインして、リポジトリにMySQLを追加してMySQLのクライアントをインストールします。以下コマンドのみ記載。

$sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023
$sudo dnf -y install mysql-community-client

<br>
インストールが完了したら作成したRDSのエンドポイントに対してMYSQLのユーザー（admin）で接続します。

$mysql -h aws-mysql-db.ctg84chzcg8w.ap-northeast-1.rds.amazonaws.com -u admin -p

接続できました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/10e71953-88b4-a5fb-0a73-79b621e51f15.png)

以上でRDSの作成は完了です。
次回は最終回でPHPプログラムからの接続を確認するよ！