AWS初心者は必ず読むべき！必見！AWSの基本⑤RDSを使ったDBサーバー構築

# この記事を読む前に

https://qiita.com/Hashimoto-Noriaki/items/5d2093f41bab397d6bcb


# 記事の中でやること
***プライベートサブネットにDBサーバーを設置***していきます。
そして***アベイラビリティゾーンに新しく作りプライベートサブネット***を作っていきます。
DBの冗長化ができるように***複数のアベイラビリティゾーン***を使うためです。
障害などが起きた時の対応のためです。

# RDSとは
***フルマネージド(運用管理から何までやってくれる)***に対応した***リレーショナルデータベースのサービス***です。
構築や運用の手間が軽減し、データベース設計のベストプラクティスを適用できます。


### RDSの特徴
1. ***何か障害があっても簡単にサービスが停止せず、マルチAZを簡単に構築できます。***
2.***リードレプリカを簡単に構築でき、パフォーマンスを向上***できる
3. ***運用不可の軽減***

運用不可の軽減を細かく見ていきます。

①***自動バックアップ***　　　　　　
1日に1回バックアップを自動取得(```スナップショット```)し、これを元にDBインスタンスを作成(```リストア```)

②***自動でソフトウェアメンテナンス***
メンテナンスウィンドウで指定した曜日・時間帯にアップデートを自動実施できる

③***監視***
各種メトリクスを60秒間隔で取得、確認可能


### 利用可能なエンジン
下の記事を見てみると

https://www.bold.ne.jp/engineer-club/aws-rds

以下のエンジンが使えるみたいです。(2022年時点で)

⚫︎Oracle
⚫︎MySQL
⚫︎MariaDB
⚫︎SQLServer
⚫︎PostgreSQL
⚫︎Amazon Aurora


## 設定グループ
⚫︎```DBパラメーターグループ```　　　DB設定値を制御

⚫︎```DBオプショングループ```　　　　RDSへの機能追加を制御

⚫︎```DBサブネットグループ```　　　　RDSを起動させるサブネットを制御


# プライベートサブネット作成
まずはVPCの画面から２つ目のプライベートサブネットを作成してます。(１つ目は作ってあること前提)
aws-infra-vpc-subnet-private1-ap-northeast-1aがプライベートサブネットでこれを使っていきます。
このサブネットを選択すると右側にスクロールをすると、
アベイラビリティゾーンのap-northeast-1aがあります。これとは別のアベイラビリティゾーンに
プライベートサブネットを作成していきます。

![スクリーンショット 2022-09-08 17.16.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/7d93b4df-f261-4f82-d0ff-54becd754ca0.png)

***サブネット作成をクリック***して新しくサブネットを作成していきます。

![スクリーンショット 2022-09-08 17.24.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/063ddefa-9a37-ad5e-84cd-bfd379145d69.png)

設定ができたらサブネットを作成します。
![スクリーンショット 2022-09-08 17.26.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/84609b5c-81d4-b145-5ab0-da3505eed9e6.png)


プライベートサブネットが新しくできました。
![スクリーンショット 2022-09-08 17.33.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/003a2d93-0827-6a5d-103f-8ba5fbc69702.png)

***IPv4 CIDRも今回設定した10.0.21.0/24になっていれば大丈夫***です。


# RDS設置
RDSを作成していきます。

## RDSの作成準備
使用するデータベースはここではMySQLです。
まずは必要なとこからしかアクセスできないようにしていきます。
ここではWordPressからデータベースへ接続していくようにしていきます。
WebサーバーからRDSへMySQLでのみ接続できるようにしていきます。

### セキュリティグループの作成(EC2)
EC2のDB(データベース用)のセキュリティグループを作成していきます。
EC2の中から***セキュリティグループに入ってセキュリティグループの作成***をクリックします。

![スクリーンショット 2022-09-08 17.44.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/2839d94c-d27f-e437-cf0f-acac039be376.png)

セキュリティグループ作成していきます。セキュリティグループ名はRDS向けに作成します。
VPCは連結させたいVPC名です。
![スクリーンショット 2022-09-08 17.52.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/67c3cb41-2540-1771-7771-f397a47cb24d.png)

ソースは今回設定したaws-infra-security-group-ec2にします。
画像の下にあるセキュリティグループ作成のボタンを押します。
![スクリーンショット 2022-09-08 18.44.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/fcad3419-23d8-6853-fa48-5f0e5222123f.png)

こうして***RDS用のセキュリティグループ***の作成ができました。
![スクリーンショット 2022-09-08 18.54.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/55b5120e-6863-4453-cde0-4f5a6d0db7ed.png)


![スクリーンショット 2022-09-08 19.05.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/1cfa7709-b2a8-49f7-3c28-b6916e6130a0.png)

### DBサブネットグループの作成
RDSと検索してRDSのダッシュボードにいきます。
RDSのサブネットグループを開きます。そしてDBサブネットグループを作成していきます。
![スクリーンショット 2022-09-09 10.51.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/1c3161cd-f326-bfd7-8af1-12a32e9d4ce2.png)

名前の追加やVPCを選びます。
![スクリーンショット 2022-09-09 10.53.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/2ee24645-369a-2a3a-c377-0801fc7e302e.png)

サブネット追加してプラベートサブネット1aと1cを選びます。
これで作成していきます。
![スクリーンショット 2022-09-09 11.11.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/4f305f60-3447-d6d6-158a-e8a62f715e1f.png)

サブネットグループが作成されました。
![スクリーンショット 2022-09-09 11.13.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d47d218f-cccb-5acc-38d9-5562f6e8826b.png)

### DBパラメータグループの作成
RDSのパラメーターグループの作成を行なっていきます。

![スクリーンショット 2022-09-09 11.20.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/b8072df2-d343-f294-789e-1551b9c9d8db.png)

編集も可能になっています。
![スクリーンショット 2022-09-09 11.22.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/062ab0c2-6dca-22a0-1f9b-b758f30fdacb.png)

編集する時はパラメーターの一覧が出てきます。
特に注目した方がいいのは***変更可能***、***適用タイプ***です。
適用タイプは```static```と```dynamic```で別れていきます。

```static```は***RDSインスタンスの起動後に反映***され、
```dynamic```は***RDSインスタンスに動的に反映されるのか***を表しています。

### DBオプショングループの作成
RDSのオプショングループに入ってグループを作成していきます。
名前はパラメーターグループで決めたものです。
![スクリーンショット 2022-09-09 11.39.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/ed849ad2-ad88-b2a9-8d00-bbdbd9afac32.png)

RDSのオプショングループが作成されました。
![スクリーンショット 2022-09-09 11.41.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5e6732e5-7d3d-da88-782b-d002946c17a9.png)

## RDS作成
環境ができたのでRDSを作成していきます。

#### DBエンジン
***RDSのデータベースを選択してデータベースの作成***をクリックします。

![スクリーンショット 2022-09-09 11.53.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d199b53b-0462-a1f1-b5e9-8399d54b50ef.png)

MySQLは最新バージョンにします。テンプレートはお金がかからずに本番に近い状態にするとなると
***開発/テスト***がいいみたいです。

![スクリーンショット 2022-09-09 11.55.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/de989887-b585-0f63-5e3c-83e217fae754.png)

スタンバイインスタンスを作成すると料金がかかるので作成は不要です。
![スクリーンショット 2022-09-09 12.18.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/3828cd1c-d825-9a39-ad00-522ea1d7b339.png)


設定をしていきます。画像を参考にしてみてください。
![スクリーンショット 2022-09-09 12.09.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d81f8363-54ba-cb12-076d-4b21f6c80f2e.png)

本番だと標準クラスですが、学習なら安めのバースト可能が良さそうです。
![スクリーンショット 2022-09-09 12.15.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5b081c75-cc53-02f2-f793-cc82b2924309.png)

ストレージですが、タイプは汎用で、割り当て２０、
スケーリングは学習だけなら不要なので有効にはしないです。
![スクリーンショット 2022-09-09 12.16.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/f2a8b09f-8e50-b019-4bdf-7ebf1a5e9353.png)

接続は下の画像を参考にしてください。
![スクリーンショット 2022-09-09 12.25.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/40aba73f-76ed-4b55-f6ba-28b7f20fa5a3.png)

![スクリーンショット 2022-09-09 12.41.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/40b71a46-d652-1332-f67e-5fdb7a4095d9.png)


画像にはないですがデータベースのポートは3306です。

データベース名は後で作成します。
パラメーターグループやオプショングループは先ほど設定したものです。
![スクリーンショット 2022-09-09 12.47.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/5bb1d4b2-eecf-8bc7-9dd6-47c7faabf3ef.png)

画像にはないですがバックアップの保存期間は30日くらいあると良さそうです。

![スクリーンショット 2022-09-09 12.53.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/d1a2d130-9b97-8e2b-6f96-b573ca9ec0bc.png)

学習なら有効にはしなくてもいいかと思います。
![スクリーンショット 2022-09-09 12.53.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/561bcbe3-cd64-2da1-a8a9-078e9184ae18.png)

![スクリーンショット 2022-09-09 12.54.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/871f4f3a-8ff5-7da4-32e3-01dcf63717b5.png)

削除保護は学習だけなら有効にしなくてもいいかと思います。
![スクリーンショット 2022-09-09 12.56.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/9977eea1-d41c-da04-d1f8-90c95466d623.png)

上の設定なら料金はここまでかからないと思います。データベースの作成をしていきます。
![スクリーンショット 2022-09-09 12.57.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/21697f60-3209-da09-4300-a22fd18e19b8.png)

これで作成することができました。作成したものをクリックをして
VPC、サブネット、セキュリティグループなどは合っているか確認してみてください。
![スクリーンショット 2022-09-09 12.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/eb18583d-b4d0-c25a-1bda-885db613dfb1.png)

RDSは使わない時は停止をアクションから停止をしておきましょう。
本番環境なら停止はしない方がいいみたいです。



## WebサーバーからRDSに接続
### WebサーバーにMySQLをインストール
EC2のダッシュボードにいきます。
接続に使うインスタンスを選択してSSH接続をします。

![スクリーンショット 2022-09-09 13.14.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/8f49c424-9243-3548-1949-d2bef8480300.png)

```
Downloads % chmod 400 AWS-infra-ec2.pem
Downloads % ssh -i "AWS-infra-ec2.pem" ec2-user@ec2-54-250-137-54.ap-northeast-1.compute.amazonaws.com
Last login: Thu Sep  8 06:55:04 2022 from softbank060068066230.bbtec.net

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

https://aws.amazon.com/amazon-linux-2/
```
***mysqlをインストール***します。
```
[ec2-user@ip-10-0-7-161 ~]$ sudo yum -y install mysql 
#省略
インストール:
  mariadb.x86_64 1:5.5.68-1.amzn2 

完了しました!
```

### WebサーバーからRDSへmysqlコマンドで接続
RDSの画面にいきデータベースを選択します。
今回接続したいデータベースを選択して```エンドポイントをコピー```します。

![スクリーンショット 2022-09-09 13.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1748789/099c1353-b34d-dcc6-2ce1-21734bbff7c1.png)

```
[ec2-user@ip-10-0-7-161 ~]$ mysql -h aws-infra-web.cssrje6zwv8w.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 14
Server version: 8.0.28 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)]> 
```
```-h```でエンドポイントを指定
```-u```でログインするユーザー名を指定
マスターユーザーで接続するので先ほど決めた```root```を選択
```-p```でパスワード入力です。

⚫︎補足
エラーになった場合はこのパターンが多いみたいです。
1. データベースが利用可能になっていないパターン
2. セキュリティグループが間違っている
3. ユーザー名かパスワードが間違っている 



# 資料

https://www.udemy.com/course/aws-and-infra/?aEightID=s00000016735001&AID=190908007224&a8=PlQKLlknX1zBDBaq.wzJncu_p1fqzQucJwA5k1yg05hnX1QlC1QHRJzHrD0GZGuAv56JgVQTvlQKjs00000016735001