[AWS]データベースサーバーの作成

# データベースサーバーとは?
データを一つの場所に集約して、保管・管理するだけでなくSQLといった言語を使って、データの抽出・参照などもできる「箱」のようなシステムです。

データサーバーを利用することで大量のデータを様々な形式で保管することが可能です。データの管理と参照を行うのに、DBMSと呼ばれるソフトウェアを利用されます。DBMSはデータの保存場所、データの形式を考えることなく目的のデータを抽出、加工、利用が可能となっています。

## リレーショナルデータベース(RDS)とは?
属性を列、組を行とする表（テーブル）の形でデータを格納するデータベースです。

AWSには、Amazon RDSと呼ばれるマネージドサービスが用意されています。AWS利用者はDBインストールやOSそのものの管理、及び障害発生時の対応処理を全てAWS側がサポートするため、簡単にデータベース構築が可能です。

# RDS(MySQL)の作成
AWSには様々なRDSが用意されていますが、今回はMySQLを使用します。データベースの設定としては主に４つで、パラメータグループ、オプショングループ、サブネットグループ、データベースの作成をしていきます。

## ①パラメーターグループの作成
パラメーターグループは、MySQLを用意するデータベースの設定を行うための領域です。ここでは、データベースの性能や機能の追加を行うことができます。

| パラメータグループファミリー |　タイプ　|　グループ名　|　説明　|
| :---: | :---: | :---: | :---: |
| mysql8.0 | DB Parameter Group | sample-db-pg | 任意の説明 | 

![パラメータグループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/04640b15-a333-fd92-327b-87773336e56b.png)


## ②オプショングループの作成
RDS固有の設定および、データベースの監視に関する設定を行います。

| グループ名 |　説明　|　エンジン　|　メージャーバージョン　|
| :---: | :---: | :---: | :---: |
| sample-db-og | 任意の説明 | mysql | 8.0 | 

![オプショングループ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/f54a984e-90d5-0a34-780c-c0fd183530d6.png)

## ③サブネットグループの作成
データベースサーバーを複数のAZ間に分散管理するのに使われる設定です。データベースインスタンスがVPC内のサブネットを定義することで、IPアドレスの範囲を指定することができます。

| グループ名 |　説明　|　VPC　|　AZ　| サブネット |
| :---: | :---: | :---: | :---: | :---: |
| sample-db-subnet | 任意の説明 | sample-vpc | 1a, 1c | sample-subnet-private(01, 02) | 

![サブネットグループ①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/33000412-c9e5-ba7b-5985-bd31ef5c8842.png)


![サブネットグループ②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/3d2505f6-5ae3-2729-cc39-2cff69d161bc.png)


## ④ データベースの作成

今回はDB作成にあたって、MySQLを使用していきます。
![DB①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/ff2cfaed-bdcb-e2bb-2843-b5b278a76a5c.png)

テンプレートは学習用のため、無料枠を選択します。AWSで可用性と耐久性を上げるために、マルチAZ構成を行うのが一般的です。つまり、常に稼働しておくDBと何かの原因で故障した場合に、すぐに予備のに切り替えることのできるDBの二つを作成します。今回は無料枠を選択したため、「単一DBインタンス」がすでに選択されますが、マルチAZ構成を行いたい場合は、他の選択肢を選択します。
![DB②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/1a926061-fde5-38c1-3507-ddba9dde2dd7.png)

DBインスタンス識別子は"sample-db"とし、マスターユーザー名は"admin"としました。マスターパスワードは、DBインスタンスに接続するのに使うパスワードのため、忘れずにする必要があります。
![DB③.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/458e5afc-dfb9-bb26-b9e3-a292f03a3e51.png)

無料枠を選択したため、デフォルトでdb.t3.microが選択されていますが、このまま使用します。
![DB④.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/6ee142e4-80d2-cd99-4abe-ce4b83a12d64.png)

VPCは作成した"sample-vpc"を選択して、セキュリティグループ"default"を選択します。
![DB⑤.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/08063419-e706-2533-44c4-4bb9897f65ca.png)

![DB⑥.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/48ab0212-e58d-cc12-52b4-c643059a9ae4.png)

![DB⑦.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/1ac430f8-4f44-fe41-6938-4545ff6d50ae.png)

データベース認証では、パスワード認証を選択します。データベース認証を行うときにマスターユーザーで接続できます。
![DB⑧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/716e9ce4-a7ea-0bf7-bc6d-cbf1ca556092.png)

追加の設定では、以前作成した、DBパラメーターグループとオプショングループを選択します。
![DB⑨.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/790379/d7f8980b-4f5e-a0f3-315b-81c5c07de227.png)

# 動作確認
まずは、SSH通信で"web01"に接続を行います。

```
$ ssh web01
```
Amazon Linnux2には、MySQLが含まれていないためまずはインストールし、データベースに接続できるかを確認していきます。
```
$ sudo yum -y install mysql (MySQLインストール)
```

データベースをインストールしたら、AWSコンソール画面に戻って、RDSのダッシュボードからデータベースの中にある"sample-db"をクリックします。そにあるインスタンス詳細画面から、「接続とセキュリティ」タブにあるエンドポイントをコピーして、以下のコマンドを実行するとデータベースサーバーに接続できます。

```
$ mysqladmin ping -u admin -p -h XXXXXXXXXXXXXX
```
「mysql is alive」が表示されていれば、データベースに接続できています。

# 参考
AWSではじめるインフラ構築入門 翔泳社出版

https://www.idcf.jp/words/database.html