マルチAZにしてみた - Amazon RDS

本手順において、VPC1、サブネット2を作成済のものとする。

---


##1.サブネットグループ##

DBインスタンスをどのサブネットで起動しますか？と言うのを指定するグループです。

「サブネットグループ」から「サブネットグループの作成」
![スクリーンショット 2019-02-19 18.53.20.png](https://qiita-image-store.s3.amazonaws.com/0/280929/4a07c192-1b1b-dcd5-d78c-4e8eeb8ba0bf.png)

以下の通り入力し「作成」

|項目|説明|
|----------|-----|
|名前・説明|demo-subnet-group|
|VPC|作成済のVPC|
|アベイラビリティーゾーン|作成済のサブネットのAZ|

![スクリーンショット 2019-02-19 19.06.11.png](https://qiita-image-store.s3.amazonaws.com/0/280929/c400c2e4-d176-d454-e1b8-5bda0e51d942.png)
![スクリーンショット 2019-02-19 19.11.45.png](https://qiita-image-store.s3.amazonaws.com/0/280929/c22abf1c-190c-369a-0b15-a3c5943078df.png)

ちなみに2つ以上のAZを指定しない場合、以下のようにエラーになります。
![スクリーンショット 2019-02-19 19.11.53.png](https://qiita-image-store.s3.amazonaws.com/0/280929/660cceac-fad5-5230-7936-ac40aedcac92.png)



##2.パラメータグループ##

パラメータグループを使って、GUIからMYSQLなどの設定値をいじっていくことになります。（SSHはできない。）

「パラメータグループ」から「パラメータグループの作成」
![スクリーンショット 2019-02-19 19.16.23.png](https://qiita-image-store.s3.amazonaws.com/0/280929/7efea76e-ea40-341b-c0ef-e36ec74c4011.png)

以下の通り入力し「作成」。

|項目|説明|
|---|---|
|パラメータグループファミリー|mysql5.7|
|グループ名・説明|demo-parameter-group|

![スクリーンショット 2019-02-19 19.22.01.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0578a886-7d74-4f9a-c5f5-cc98c9f35362.png)



##3.データベースの作成##

「データベース」から「データベースの作成」
![スクリーンショット 2019-02-19 19.24.30.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0b739461-8da4-01a6-ca6f-a895f436a296.png)

**ステップ 1　エンジンの選択**
「MYSQL」
![スクリーンショット 2019-02-19 19.24.41.png](https://qiita-image-store.s3.amazonaws.com/0/280929/8496b3df-7895-6c3b-27a9-0ca5d7789bc7.png)

**ステップ 2　ユースケースを選択します**
「開発/テスト - MySQL」
![スクリーンショット 2019-02-19 19.27.55.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ff32a3ec-a0ba-8830-6ba8-2f6e8ad9bd54.png)

**ステップ 3　DB 詳細の指定**
今回は以下の通り設定しました。

|項目|説明|
|---|---|
|ラインセンスモデル|General Pubric Licence|
|DB エンジンのバージョン| MYSQL5.7.23|
|DB インスタンスのクラス|db.t2.micro 1vCPU,1GiB RAM|
|マルチ AZ 配置|***別のゾーンにレプリカを作成します***|
|ストレージタイプ|汎用(SSD)|
|ストレージ割り当て|20GiB|
|DB インスタンス識別子|demo-db|
|マスターユーザの名前|root|
|マスターユーザのパスワード|任意|

![スクリーンショット 2019-02-19 19.35.55.png](https://qiita-image-store.s3.amazonaws.com/0/280929/dd93a199-080d-3b7d-6d25-cbfbdeeb4b0d.png)
![スクリーンショット 2019-02-19 19.36.10.png](https://qiita-image-store.s3.amazonaws.com/0/280929/53cb69da-c1f3-a155-8102-b2d8c2adf878.png)
![スクリーンショット 2019-02-19 19.38.06.png](https://qiita-image-store.s3.amazonaws.com/0/280929/ee652432-d0b4-522c-21c6-09968ac6a9f4.png)


**ステップ 4 [詳細設定] の設定**
今回は以下の通り設定しました。

|項目|説明|
|---|---|
|ネットワーク & セキュリティ|作成済のVPC|
|サブネットグループ|【1.サブネットグループ で作成したもの】|
|パブリックアクセシビリティ|いいえ<br>パブリック IP アドレスを持たせて外から繋ぎに行くようにするかの設定です。|
|アベイラビリティーゾーン|指定なし<br>マルチAZ構成の作成のため|
|VPC セキュリティグループ|新規で VPC セキュリティグループ を作成|
|データベースの名前|空白<br>MYSQLコマンドで後で作成するものとします。|
|ポート|3306|
|DB パラメータグループ|【2.パラメータグループ で作成したもの】|
|オプショングループ|default.mysql-5.7|
|IAM DB 認証|無効化|
|バックアップの保存期間|2日間|
|バックアップウィンドウ|ウィンドウの選択で適当な日時を指定|
|拡張モニタリング|拡張モニタリングを無効にする|
|ログのエクスポート|チェックなし|
|メンテナンス|指定なし|

![スクリーンショット 2019-02-19 19.45.53.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0c4eca31-f0d1-c1f4-2ec8-388be8aee9b1.png)
![スクリーンショット 2019-02-19 19.51.46.png](https://qiita-image-store.s3.amazonaws.com/0/280929/c3b9ab75-aba9-8b49-48aa-0069e0005ae8.png)
![スクリーンショット 2019-02-19 19.52.02.png](https://qiita-image-store.s3.amazonaws.com/0/280929/eab09a6d-fe46-3d04-9e32-a06aabdb9431.png)
![スクリーンショット 2019-02-19 19.53.47.png](https://qiita-image-store.s3.amazonaws.com/0/280929/88b23f51-24df-041c-699d-85efdf939540.png)
![スクリーンショット 2019-02-19 19.53.56.png](https://qiita-image-store.s3.amazonaws.com/0/280929/0d6959a7-b526-7221-fe48-5c3cb2d06326.png)
![スクリーンショット 2019-02-19 19.56.07.png](https://qiita-image-store.s3.amazonaws.com/0/280929/a46a9169-ce50-9700-6237-955b7e6fa77b.png)



##4.EC2からMYSQLのエンドポイントをRDSのものにする##
構築済みのwebサーバーから、sshでRDSに接続してみます。

```
# EC2インスタンスへssh接続

$ ssh -i test.pem ec2-user@グローバルIP
```

```
# RDSのmysqlへ接続

$ mysql -h rds_endpoint -u root -p
```

```
# データベース作成

create database simple_blog;
use simple_blog;

# テーブル作成＆データ挿入

create table posts (id int not null primary key, title varchar(100), detail varchar(1000), image varchar(1000));

insert into posts values (1, "XXXX-RDS", "XXXXXXXXXX", "./img/img1.jpeg");
insert into posts values (2, "YYYY-RDS", "YYYYYYYYYY", "./img/img2.jpeg");
```

```
# EC2インスタンスのindex.phpのエンドポイントをRDSのものにする。

$ sudo vim /var/www/html/index.php

<?php
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
?>
```

これでマスター側がフェールオーバーしたとき、自動的にフェールオーバー先のIPアドレスにDNSが解釈されますので、アプリケーションのコードを変えずとも、フェールオーバー先のDBをみることができます。