[AWS]DBサーバーの構築方法

**2020年2月1日現在の内容です。**

構築するDB
<img width="1139" alt="スクリーンショット 2020-02-01 17.42.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/c4b5fecc-8bf6-baa4-3725-7db90fbda19a.png">

## 用語説明
### RDS(Relational Database Service)
AWSクラウド上のフルマネージドリレーショナルデータベースのサービス

- 構築・運用の手間を軽減できる
- AWSエンジニアがデータベース設計のベストプラクティスを適用している

　　　　　↓

**コア機能の開発に注力できる**

|オンプレミス|On EC2|RDS|
|:-:|:-:|:-:|
|アプリ最適化|アプリ最適化|アプリ最適化|
|スケーリング|スケーリング|~~スケーリング~~|
|バックアップ|バックアップ|~~バックアップ~~|
|アップデート|アップデート|~~アップデート~~|
|OSインストール|~~OSインストール~~|~~OSインストール~~|
|物理サーバー設置|~~物理サーバー設置~~|~~物理サーバー設置~~|

- 利用可能エンジン
    - MySQL
    - PostgreSQL
    - Oracle
    - Microsoft SQL Server
    - Amazon Aurora
    - MariaDB
- 各種設定グループ
    - DBパラメータグループ：DB設定値を制御
    - DBオプショングループ：RDSへの機能追加を制御
    - DBサブネットグループ：RDSを起動させるサブネットを制御

特徴

- 高い可用性
    - マルチAZ(複数のアベイラビリティゾーンに配置)を簡単に構築
        - あるアベイラビリティゾーンで障害が発生しても、別のアベイラビリティゾーンのDBを利用できる
- パフォーマンスの向上
    - リードレプリカ(マスターDBを複製した読み込み専用DB)を簡単に構築
        - DBを参照する時はリードレプリカ、DBを更新する時はマスターに分けることで負荷を分散できる
- 運用負荷の軽減
    - 自動的なバックアップ
        - 1日1回バックアップを自動取得(スナップショット)
        - スナップショットを元にDBインスタンスを作成(リストア)
    - 自動的なソフトウェアメンテナンス
        - メンテナンスウインドウで指定した曜日・時間帯にアップデートを自動実施
    - 監視
        - 各種メトリクス(監視対象のデータ)を60秒間隔で取得・確認可能

## プライベートサブネットの作成
AWSコンソールからVPCを検索し、クリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.06.22.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/f376080e-6d1a-f831-f7f2-1ac59c50f10b.png">

サイドバーから「サブネット」をクリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.08.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/ce00a616-ded6-5cfc-9e6e-aa234e35fa90.png">

現在プライベートサブネットはアベイラビリティゾーン「1a」のみ存在することを確認
<img width="1680" alt="スクリーンショット 2020-01-26 21.11.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/af2bd72d-cfab-2129-6e3c-37da04c992b9.png">

「サブネットの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.12.56.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/d86c7223-2a22-e34d-5978-033ad30b5856.png">

以下の通り入力し、「作成」をクリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.15.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/9a3ee36a-92e1-87c3-45ac-3bb722499871.png">

サブネットが作成されていることを確認
<img width="1680" alt="スクリーンショット 2020-01-26 21.18.03.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/f8a4d61d-4f5a-f137-3883-7b04aa08f88c.png">

## RDSの作成準備
### セキュリティグループの作成(EC2)
AWSコンソールからEC2を検索し、クリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.26.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/928feb11-8121-bd52-6a3f-d38b082dec6f.png">

サイドバーから「セキュリティグループ」をクリック
<img width="1680" alt="スクリーンショット 2020-01-26 21.27.35.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/dbe8662f-5a40-c713-e381-e060266a9469.png">

「セキュリティグループの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-01-26 23.06.58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/9804375f-0492-ee62-6706-fab964752571.png">

任意のグループ名、説明、作成したVPCを入力
<img width="1680" alt="スクリーンショット 2020-01-26 23.10.36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/f385a517-9084-f970-94b9-160ab176d5a7.png">

「ルールの追加」　→　以下の画像の通り入力し、「作成」をクリック
タイプはMySQLの構築のため「MYSQL/Aurora」、ソースはEC2インスタンスのグループIDを指定
<img width="1680" alt="スクリーンショット 2020-01-26 23.14.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/42b971f5-26f3-dc12-6192-08ac2e6c78f1.png">

作成したセキュリティグループのインバウンドから設定内容を確認
<img width="1680" alt="スクリーンショット 2020-01-26 23.25.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/9cd93b53-7cf8-43bc-ceaf-007966fb139c.png">

### DBサブネットグループの作成
サービスから「RDS」を検索
<img width="1680" alt="スクリーンショット 2020-02-01 14.03.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/a8907dc8-9fb6-ac6b-7155-07ef1851047a.png">

サイドバーの「サブネットグループ」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.05.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/59049e14-6552-68c1-d718-bc020bf29667.png">

「DBサブネットグループの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.08.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/c90d27a3-3a48-526b-3291-f8e22cb655f2.png">

任意の名前・設定、作成したVPCを選択
<img width="1680" alt="スクリーンショット 2020-02-01 14.12.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/8d488f42-9f49-edde-af7f-5c3c3ce0f5dc.png">

作成した2つのプライベートサブネットを追加し、「作成」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.16.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/7c745fc6-4290-a4b4-01a2-5fde8ceb5929.png">

DBサブネットグループが作成されていることを確認
<img width="1680" alt="スクリーンショット 2020-02-01 14.18.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/c0c628e6-3b6f-010e-89b4-3ccf8088de57.png">

### DBパラメータグループの作成
サイドバーの「パラメータグループ」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.22.16.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/9636b778-6894-3f25-5510-6a52a97c3d84.png">

「パラメータグループの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.24.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/bb9f5d14-7480-02dd-4110-0723fbba73d8.png">

以下の通り設定し、「作成」をクリック
パラメータグループファミリー：対象のDBを指定
グループ名・説明：任意の名前
<img width="1680" alt="スクリーンショット 2020-02-01 14.26.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/efb8e3f3-5cb6-9877-1578-6dcf6744de23.png">

パラメータグループが作成されていることを確認
<img width="1680" alt="スクリーンショット 2020-02-01 14.32.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/cd95e476-63ad-b341-2335-ce2e75e5505c.png">

パラメータを編集する際は、対象のパラメータグループをチェックし、パラメータグループアクション　→　編集をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.36.13.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/58061460-ed92-31ef-c09d-a078b9d4b859.png">

編集したい項目の値を変更し、「変更の保存」をクリックすることで変更できる
「変更可能」のtrue/falseで変更可能な項目を判別できる
「適用タイプ」がdynamicはRDSインスタンスが起動中でも反映され、staticはRDSインスタンスが起動されるまで反映されない
<img width="1680" alt="スクリーンショット 2020-02-01 14.38.45.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/326955e8-d105-af2a-53d0-3e456de0674f.png">

### DBオプショングループの作成
サイドバーの「オプショングループ」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.47.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/9895a8b9-f912-4132-e702-740274cfb7cd.png">

「グループの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 14.50.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/1fc3a71c-5a77-500c-f859-746d7e9484b1.png">

以下の通り設定し、「作成」をクリック
名前・説明：任意の名前
エンジン：対象のDB
メジャーエンジンのバージョン：DBのバージョン
<img width="1680" alt="スクリーンショット 2020-02-01 15.02.32.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/c4d5fd68-ae7a-7696-4e7c-2ae102134764.png">

デフォルトと自分が作成したグループの2つが作成されていることを確認
**基本的にオプショングループを編集する際は自分の作成したグループを指定する**
<img width="1680" alt="スクリーンショット 2020-02-01 15.05.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/3b841329-2ac2-2dea-4d00-90c2fc7b6d50.png">

## RDSの作成
サイドバーの「データベース」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 15.20.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/ee31c743-a0bf-ca4b-3889-555b9e58cc72.png">

「データベースの作成」をクリック
<img width="1680" alt="スクリーンショット 2020-02-01 16.01.59.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/4d2b1843-2159-f894-221a-a36e6d95c73e.png">

以下の通り設定し、「作成」をクリック
VPC,サブネットグループ,セキュリティグループ,DBパラメータグループ,オプショングループは作成したものを選択
<img width="1680" alt="スクリーンショット 2020-02-01 16.16.15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/d4af7e8f-4b0e-9d55-ced7-b474d74f5cc9.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.17.33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/332b12f3-668d-f074-5d3c-7fdd27f65c1d.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.19.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/e97b2570-d0a9-dbfa-850b-527ec45e2d08.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.20.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/a32d74bf-9c2f-7158-f6f5-3a8886869905.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.23.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/c2cafff4-d794-f929-ce41-6772f887830e.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.28.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/e7aa60b1-cca7-bd64-f272-1f8eb0ee2829.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.30.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/dfdfc1d0-83db-359a-c78e-5a76e7f96c8d.png">
<img width="1680" alt="スクリーンショット 2020-02-01 16.32.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/8b89371d-3db3-5371-8e5a-035a80422525.png">

DBインスタンスが作成中になっていることを確認
<img width="1680" alt="スクリーンショット 2020-02-01 16.37.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/1717ef6e-7347-573e-1216-cc640f3b7334.png">

DBインスタンスを停止させる場合は、アクション　→　停止をクリック
**本番環境のDBインスタンスは停止させないこと　→　停止に時間がかかる・AWSのRDSインスタンスのリソースが余っていなかった場合、しばらく起動できないため**
<img width="1680" alt="スクリーンショット 2020-02-01 16.51.05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/d9ed1c6b-357a-709c-5cfb-52cdcfc0a5ef.png">

## WebサーバーからRDSへ接続
ターミナルからEC2へSSHログイン
<img width="1680" alt="スクリーンショット 2020-02-01 17.03.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/282b0821-3c13-7601-d13b-9ed281f62f1d.png">
`ssh -i test-ssh-key.pem ec2-user@18.179.167.73`

MySQLのインストール
`sudo yum -y install mysql`

RDSインスタンスのエンドポイントを確認
<img width="1680" alt="スクリーンショット 2020-02-01 17.08.08.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/397642/4dfedbbc-0d4a-c974-4def-80168e5867c8.png">

DBへログインできることを確認

```
[ec2-user@ip-10-0-10-10 ~]$ mysql -h test-web.czelx3q0xopr.ap-northeast-1.rds.amazonaws.com -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 8.0.16 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MySQL [(none)]>
```


## 参考
[AWS：ゼロから実践するAmazon Web Services。手を動かしながらインフラの基礎を習得](https://www.udemy.com/course/aws-and-infra/)