0から始めるAWS入門④：RDS編

# 前回まで
[0から始めるAWS入門：概要](http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde)
[0から始めるAWS入門①：VPC編](http://qiita.com/hiroshik1985/items/9de2dd02c9c2f6911f3b)
[0から始めるAWS入門②：EC2編](http://qiita.com/hiroshik1985/items/f078a6a017d092a541cf)
[0から始めるAWS入門③：ELB編](http://qiita.com/hiroshik1985/items/ffda3f2bdb71599783a3)

# 概要
AWSのデータベースサービスRDSの作成を行っていく。
初回の概要に記述したように、MySQL、Oracle、Microsoft SQL Server、PostgreSQLと選択できる。今回はMySQLで構築していく。

# 下準備
コンソールの[Database]カテゴリからRDSを選択。

## DB用サブネットの登録
VPC編で作成したサブネットをRDSで使える用に予め登録しておく必要がある。
[Subnet Groups]を選択後、[Create DB Subnet Group]をクリック。

[Name]は、識別子なので分かりやすい名前を入力する。続いて[Description]に説明を入力後、[VPC ID]でVPC編で作成したVPCを選択する。

その後、[add all the subnets]ボタンをクリックすればVPC内のサブネット全てがDB用のサブネットとしても登録される。

![4-0_subnet.png](https://qiita-image-store.s3.amazonaws.com/0/34930/dcd2f391-71bb-8cec-d2fc-747d406a4a4b.png)

ちなみに、複数のAZにまたがるサブネットを持たないVPCを選択することはできないので注意。

## DBのパラメータグループの作成
RDSでは、各DBのパラメーターの設定（mysqlならmy.cnfの内容）をテンプレートとして登録しておける。今回は日本語を扱う上で最低限必要な文字コードの設定をしておく。

[Parameter Groups]を選択後、[Create DB Parameter Group]をクリック。
各項目を設定していく。

|項目|内容|値|
|:---|:---|:---|
|DB Parameter Group Family|どのデータベース向けの設定か|要件に合わせて設定|
|DB Parameter Group Name|パラメータグループ名|適当に(今回は日本語向けなのでjapansese)|
|DB Parameter Group Description|パラメータグループ説明|適当に|

![4-0-4_parameter.png](https://qiita-image-store.s3.amazonaws.com/0/34930/6f7db71d-3388-c5a3-1b1a-4467db8e268c.png)

今作成したグループを選択後、[Edit Parameters]をクリック。
そうすると設定できるパラメーターの一覧と選択肢がでてくる。
以下の項目を設定していく。

|項目|値|
|:---|:---|
|character_set_client|utf8|
|character_set_connection |utf8 |
|character_set_database   |utf8|
|character_set_server     |utf8|
|character_set_system  |utf8|

![4-0-7_paramters.png](https://qiita-image-store.s3.amazonaws.com/0/34930/59a43bf2-d331-6de2-2236-c9c81a2a8f05.png)

## DB用セキュリティグループの作成
EC2のセキュリティーグループを作成したように、DB用のセキュリティグループも作成する。
コンソールより[VPC]を選択。[Security]カテゴリの[Security Group]を選択する。
上部[Create Security Group]クリックでセキュリティーグループを作成するモーダルが表示される。各項目に下記の値を設定していく。

|項目|値|
|:----|:----|:----|
|Name tag|識別子に使うので分かりやすい名前|
|Group name|上記と同様|
|Description|適当な説明文|
|VPC|VPC編で作成したVPCを選択|

![4-0-1_security_group.png](https://qiita-image-store.s3.amazonaws.com/0/34930/dc278285-cb04-4c1a-be92-7cbad48430f1.png)

続いて実際にポリシーを設定していく。
今作成したセキュリティーグループを選択後、[Inbound Rules]タブを選択。
[Edit]ボタンをクリックして編集する。

今回はVPC内からのみDBへのアクセスを許可するようなポリシーとする。

|Type|Protocol|Port Range|Source|
|:---|:---|:---|:---|
|Mysql|TCP|3306|10.0.0.0/16|

# RDSの作成![4-0-3_sg_rules_fix.png](https://qiita-image-store.s3.amazonaws.com/0/34930/36ba9650-50cd-ba22-aa5d-3943419d10bc.png)

再度、コンソールの[Database]カテゴリからRDSを選択。[Get Started Now]ボタンから作成を始める。

## エンジンの選択
Mysqlを選択する。

![4-1_engine.png](https://qiita-image-store.s3.amazonaws.com/0/34930/f0bc2264-d870-f3db-9297-3d5fe59520cb.png)

## プロダクション環境か？
次に、このDBをプロダクション（本番）環境として使うかを聞かれます。今回は、学習目的として[No]を選択します。また[No]を選択することにより、無料枠の１つの条件となります。

![4-2_production.png](https://qiita-image-store.s3.amazonaws.com/0/34930/a3a42ae7-b0bb-c64b-6bba-515273107559.png)

では、今回選択しなかったプロダクション環境の場合何が変わるのか？
まず、ストレージが[Provisioned IOPS Storage]となります。これはEC2編で説明したとおり、一定のIOPSを保証した大規模DB向けのストレージです。
もう一点、[Multi-AZ Deployment]が有効になります。これがRDSの特徴とも言えます。

### Multi-AZ Deployment
Multi-AZ Deploymentを選択すると、ホストしているAZとは別のAZに同期・物理レプリケーションを自動で作成してくれます。
また、マスターが死んだとしても、2,3分でフェイルオーバーを行ってくれます。
ただし、リードレプリカ用途では使えないため、別途設定する必要があります。

## DB設定
各DBの設定項目を入力していきます。

|項目|内容|値|
|:---|:---|:---|
|License Model|ライセンス|general-public-license|
|DB Engine Version|DBバージョン|要件に合わせて選択|
|DB Instance Class|インスタンスのクラス（スペック）|無料枠適用のためdb.t1.micro|
|Multi-AZ Deployment|Multi-AZ Deploymentを適用するか|No|
|Storage Type|ストレージタイプ|General Purpose (SSD)|
|Allocated Storage|何GBストレージに割り当てるか|要件に合わせて設定（20GBまで無料）|
|DB Instance Identifier|DB識別子|分かりやすいDBの識別子を設定|
|Master Username|マスターユーザー名|適当なマスター（ルート）ユーザー名|
|Master Password|マスターユーザーパスワード|適当なマスター（ルート）パスワード|
|Confirm Password|パスワード再入力|パスワード再入力|


![4-3_specify.png](https://qiita-image-store.s3.amazonaws.com/0/34930/b3063374-eafd-9cc7-75aa-ae593f012d59.png)

## DB詳細設定
次に詳細設定をしていく。

|項目|内容|値|
|:---|:---|:---|
|VPC|どのVPCに配置するか|VPC編で作成したVPCを選択|
|Subnet Group|サブネット|下準備で登録したサブネット|
|Public Accessible|インターネット経由で接続可能にするか|No|
|Availabillity Zone|配置先AZ|ap-northeast-1a|
|VPC Security Group|セキュリティーグループ|下準備で作成したセキュリティーグループ|
|Database Name|デフォルトで作成するデータベース名|要件にあわせて設定|
|Database Port|データベースポート|3306(変更するならセキュリティグループも要変更)|
|Parameter Group|mysqlの設定|下準備で作成した日本語パラメータグループ|


![4-5-1configure.png](https://qiita-image-store.s3.amazonaws.com/0/34930/36cde7cf-73e0-23e3-a1f1-085b0b9a2988.png)

|項目|内容|値|
|:---|:---|:---|
|Backup Retention Period|何日バックアップを維持するか|1(0を指定した場合、バックアップ無効)|
|Backup Window|毎日何時にバックアップを取るか|No Preference(指定したい場合は任意で)|
|Auto Minor Verion Upgrade|マイナーバージョンアップを自動で行うか|Yes|
|Maintenance Window|バージョンアップのメンテナンスを何曜日の何時に行うか|No Preference(指定したい場合は任意)|

注意しなければいけないのは、[Auto Minor Verion Upgrade]をYesにした場合、Multi-AZ構成を選択してなければ、当然バージョンアップ中はDBは停止してアクセスできない。

![4-5-3_configure.png](https://qiita-image-store.s3.amazonaws.com/0/34930/7adc7408-1f52-4134-381a-6e525d39d44b.png)

## 作成！
[Launch DB Instance]で作成完了。
実際にインスタンスが立ち上がるまで、少し時間がかかるので正座してコンソールを眺めておく。

# リードレプリカ
最後に、[0から始めるAWS入門：概要](http://qiita.com/hiroshik1985/items/6433d5de97ac55fedfde)の図で示したリードレプリカをAZ-Cに作っておく。アプリ等で、参照専用用途に使う想定。

## リードレプリカの作成

インスタンスリストから対象のRDSインスタンスを右クリック。[Create Read Replica]を選択。

![4-6-1_create_read_replica.png](https://qiita-image-store.s3.amazonaws.com/0/34930/ff2cdd3d-e027-d6eb-4396-93efa46cdb6c.png "4-6-1_create_read_replica.png")

続いて、設定。[DB Instance Identifier]に適当な名前、[Availabillity Zone]にAZ-Cを選択して[Create Read Replica]をクリックして作成完了まで少々まつ。

![4-6-4_configure.png](https://qiita-image-store.s3.amazonaws.com/0/34930/837e62b3-b407-d1d2-91fb-948f2773e123.png "4-6-4_configure.png")