【JAWS-UG関西女子会】#2 ELB+EC2+RDSでECサイトをつくろう　～RDS作成編～


<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-65307172-1', 'auto');
  ga('send', 'pageview');

</script>

#はじめに
この記事はJAWS-UG関西女子会「はじめて女子応援企画！事例から学ぶもくもく＆もぐもぐ会」で
 ~~もぐもぐ~~ [^1] もくもくする際のテキストとなります。
[^1]: 節子！それは懇親会や！！


#本記事での目標

* EC2でWEBサーバーを構築すること
* RDSでデータベースサーバを構築すること
* EC2インスタンスへEC-CUBEインストール及び疎通確認
* ELBでWEBサーバーの負荷分散をすること

以下のような構成となります。
![ELB000301.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/bfbe37b4-4139-c507-2771-acf45bebd268.jpeg)

#EC2でWEBサーバーを構築すること
[こちらを参照して下さい](http://qiita.com/naotinn74/private/fd1fcf19c8689de417c8)


#RDSでデータベースサーバを構築すること
###RDSでデータベースサーバを構築するまでのながれ

5. RDS用セキュリティグループの設定
6. サブネットグループの設定
7. パラメタグループの設定
6. RDSインスタンスの起動
6. RDSインスタンスへの疎通確認

#RDSの用語について
<dl>
  <dt>RDS：</dt>
  <dd>Relational Database Serviceの略</br>
<dd>利用できるDBエンジンはMySQL、PostgreSQL、SQL Server、Oracle、AWS独自のAurora</br>
<dd>ミドルウェア・ハードウェア部分はAWSで管理・運用するため利用者はハードウェアやバックアップ等の運用管理面を気にせずにデータベースを利用することができる</dd><br>
  <dt>Multi-AZ：</dt>
  <dd>データベースサーバーを別々のAvailability Zoneに配置し、フェールオーバーするようにすること</br>
　<dd>片側のAvailability Zone全体に障害が起きた場合でももう一つのAvailability ZoneがActiveとなるためサービスの継続が可能となる</dd><br>
</dl>

#構築手順
##1.サブネットグループの設定
今回はMulti-AZ構成でRDSインスタンスを作成します。
Multi-AZ構成にする際にRDSインスタンスを配置するサブネットをあらかじめ決める必要があります。
その設定をするのがサブネットグループとなります。

<p>　</p>
1.1.RDSメニューへ移動します。
![RDS0001.png](https://qiita-image-store.s3.amazonaws.com/0/85659/6ffbfa5b-868a-01b4-43fe-a79c866e2d2c.png)

<p>　</p>
1.2.左メニューで「Subnet Groups」をクリックします。
![RDS0002.png](https://qiita-image-store.s3.amazonaws.com/0/85659/a0676c3d-06b7-d8c9-1732-824fa1e900e7.png)

<p>　</p>
1.3.「Create DB Subnet Group」ボタンをクリックします。
![RDS0003.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7030fdbf-58af-c6af-9cab-47e83935c512.png)

<p>　</p>
1.4.NameとDiscriptionを入力します。
![RDS0004.png](https://qiita-image-store.s3.amazonaws.com/0/85659/e59c1821-73b9-d0cb-7924-4c5d75f55b21.png)

<p>　</p>
1.5.配置するサブネットがあるVPCを選択します。
デフォルトVPCのIDをドロップダウンリストから選択します。
![RDS0005.png](https://qiita-image-store.s3.amazonaws.com/0/85659/4ffda5e8-0183-046f-0ab2-9c39cd832a5a.png)

<p>　</p>
1.6.配置するサブネットがあるAvailability Zoneをドロップダウンリストから選択します。
[ap-northeast-1a」を選びます。
![RDS0006.png](https://qiita-image-store.s3.amazonaws.com/0/85659/f584c91b-0083-88d2-bb27-f7fce81d6d1d.png)

<p>　</p>
1.7.配置するサブネットを選びます。
![RDS0007.png](https://qiita-image-store.s3.amazonaws.com/0/85659/9142dd46-7c97-5815-7681-325d97c383c1.png)

<p>　</p>
1.8.サブネットを選んだあとに「Add」ボタンをクリックします。
![RDS0008.png](https://qiita-image-store.s3.amazonaws.com/0/85659/16768ae6-6fcb-35f4-5976-98b18b9ea5af.png)

<p>　</p>
1.9.選択したサブネットが表示されます。
![RDS0009.png](https://qiita-image-store.s3.amazonaws.com/0/85659/b78441e4-da95-9386-075e-b979628ab96c.png)

<p>　</p>
1.10.今度はもうひとつのAvailability Zoneを選択します。
「ap-northeast-1c」を選択します。
![RDS0010.png](https://qiita-image-store.s3.amazonaws.com/0/85659/787484f2-8779-932a-3763-f7a2fc8fbc5e.png)

<p>　</p>
1.11.配置するサブネットを選びます。
![RDS0011.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7d84f42e-f41a-fb46-ec59-2660da21c560.png)

<p>　</p>
1.12.サブネットを選んだあとに「Add」ボタンをクリックします。
![RDS0012.png](https://qiita-image-store.s3.amazonaws.com/0/85659/d6e7d1d8-d2cb-fc1f-d90e-4b3ffd6c2e4c.png)

<p>　</p>
1.13.選択したサブネットが2つ表示されていることを確認し「Create」ボタンをクリックします。
![RDS0013.png](https://qiita-image-store.s3.amazonaws.com/0/85659/cf029725-2274-62ea-3786-5dfa65001c05.png)

<p>　</p>
1.14.サブネットグループが作成されました。
![RDS0014.png](https://qiita-image-store.s3.amazonaws.com/0/85659/a456b863-79cb-3f9c-0599-8705136473c2.png)


##2.パラメタグループの設定
DBのパラメータを設定するパラメタグループを作成します。
パラメタグループで設定されたパラメタは割り当てたRDS全てに適用されるため、別システム用のRDSなどでパラメタ設定が異なる場合は別のパラメタグループを作成して割り当てるほうが良いです。

2.1.左メニューで「Parameter Groups」をクリックします。
![RDS0015.png](https://qiita-image-store.s3.amazonaws.com/0/85659/e5284531-a3d8-92fd-29ea-b702aea05d6e.png)

<p>　</p>
2.2.「Create Parameter Group」をクリックします。
![RDS0016.png](https://qiita-image-store.s3.amazonaws.com/0/85659/d2757835-8e6a-3835-5c07-199fc7e5e851.png)

<p>　</p>
2.3.DBの種類、バージョンを選択します。
今回はPostgresqlの9.3を使用するため「postgres9.3」を選択します。
![sec000251.png](https://qiita-image-store.s3.amazonaws.com/0/85659/586aceae-35bd-12e2-dd22-52733d032a3f.png)


<p>　</p>
2.4.「Group Name」と「Description」を入力し「Create」ボタンをクリックします。
![sec000252.png](https://qiita-image-store.s3.amazonaws.com/0/85659/fa93de05-6ca5-c72d-6b0a-15d4b1e0b60b.png)


<p>　</p>
2.5.パラメタグループが作成されました。
![sec000253.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7ab62d68-f40d-e70e-0efd-dcf6a8d4129b.png)




##3.RDSインスタンスの起動
ここからRDSインスタンスの起動をします。

3.1.左メニューで「Instances」をクリックします。
![RDS0020.png](https://qiita-image-store.s3.amazonaws.com/0/85659/b120b833-eb6c-b9b2-05f3-e8047fe3c3bd.png)

<p>　</p>
3.2.「Launch DB Instance」ボタンをクリックします。
![RDS0021.png](https://qiita-image-store.s3.amazonaws.com/0/85659/6b5557f3-4f82-f6d3-5661-4ccd905dbe52.png)

<p>　</p>
3.3.今回はPostgresqlを作成するので「PostgreSQL」をクリックします。
![RDS0022.png](https://qiita-image-store.s3.amazonaws.com/0/85659/51572303-5857-96ba-a8f2-dc7dff4deb76.png)

<p>　</p>
3.4.右側に「Select」ボタンが表示されるので、ボタンをクリックします。
![RDS0023.png](https://qiita-image-store.s3.amazonaws.com/0/85659/f70e37f5-aa8e-cd0e-b0a8-44eb6fb46cc5.png)

<p>　</p>
3.5.「Yes」をにチェックを入れ「Next Step」ボタンをクリックします。
![RDS0024.png](https://qiita-image-store.s3.amazonaws.com/0/85659/5af5b53b-786b-2d2d-4179-b96fa2684830.png)

<p>　</p>
3.6.DB Engine Versionは9.3.5を選択します。
![sec000254.png](https://qiita-image-store.s3.amazonaws.com/0/85659/3ccb1b38-46fc-23ff-d159-f21526b49258.png)

<p>　</p>
3.7.DB Instance Classは「db.t2.small」を選択します。
![sec000256.png](https://qiita-image-store.s3.amazonaws.com/0/85659/3870789a-c047-494a-5da6-ace2b547bb94.png)


<p>　</p>
3.8.Multi-AZ Deploymentでは「Yes」を選択します。
![sec000257.png](https://qiita-image-store.s3.amazonaws.com/0/85659/cfcb8a3a-5620-ed35-ccfb-c2eb649b8733.png)


<p>　</p>
3.9.Storage Type、Allocated Storageを画像のように設定します。
※General purpose(SSD)では1GBあたりIOPSが3割り当てられ、IOクレジットの数により
3000IOPSまでバーストすることができますが、容量が小さい場合はバーストできる時間が短くなります。
バーストしきったあとはIOPSが著しく下がるため、パフォーマンスに影響が出ることがあります。
このため、ある程度の容量を設定することで十分なIOPSを確保します。
![sec000255.png](https://qiita-image-store.s3.amazonaws.com/0/85659/771c1113-caeb-71b2-af65-e4bbd92f3854.png)

<p>　</p>
3.10.Settingsの内容を画像のように設定し「Next Step」ボタンをクリックします。
※DB Instance IdentifierはRDSインスタンス名となり、DB名とは異なります。
![sec000258.png](https://qiita-image-store.s3.amazonaws.com/0/85659/29607bd6-2fea-d221-d6d5-efc2da80c522.png)

<p>　</p>
3.11.Subnet Groupでは先ほど作成したサブネットグループを選択します。
![RDS0029.png](https://qiita-image-store.s3.amazonaws.com/0/85659/edc5f4cf-c9b3-248f-26b4-98c140b83ff4.png)

<p>　</p>
3.12.Publicly Accessibleを「No」にします。
「Yes」にしているとインターネットからRDSへの直接アクセスが可能となるためNOにします。
![RDS0030.png](https://qiita-image-store.s3.amazonaws.com/0/85659/3b2ebbd9-a506-2102-f232-15c735a818f7.png)

<p>　</p>
3.13.VPC Security Groupでははじめに作成したRDS用のセキュリティグループを選択します。
![RDS0031.png](https://qiita-image-store.s3.amazonaws.com/0/85659/847cb00e-9d17-cb92-2a91-640e1a306f52.png)

<p>　</p>
3.14.Database Nameを入力します。
RDSインスタンス名とごっちゃになることが多いため、同じにしておくと混乱せずにすみます。
なお、Database nameにはハイフンが使えません。(アンダーバーなら使えます)
そしてDB Parameter Groupでは先ほど作成したパラメタグループを選択します。
![RDS0032.png](https://qiita-image-store.s3.amazonaws.com/0/85659/ae0ce7f7-2d7f-2c1c-3842-a895acf4a318.png)

<p>　</p>
3.15.バックアップ設定ではDBデータのバックアップ設定を行います。
バックアップの際に再起動がかかり、フェールオーバーするといっても1分程度の瞬間的な接続断は発生するので
バックアップの時間を指定します。
Backup Windowで「Selected Window」を選択します。
![RDS0034.png](https://qiita-image-store.s3.amazonaws.com/0/85659/07f871b9-2055-664b-1796-0a0dff4e4ca4.png)

<p>　</p>
3.16.Start Timeを18時(日本時間AM3:00)にします。
時刻はUTC(協定世界時。イギリスあたりの時間)となり日本時間はUTC+9時間となります。
なるべくアクセスが少ないと見込める時間帯を選びましょう。
この設定ではDurasionを0.5hoursとしているためバックアップの開始は18:00～18:30(UTC)の間に開始されます。
![RDS0035.png](https://qiita-image-store.s3.amazonaws.com/0/85659/03254aee-3a66-8018-37c9-dd1fc3f4a742.png)

<p>　</p>
3.17.メンテナンスの設定をします。
RDS作成後、インスタンスタイプの変更などを行う際に設定を即時反映させなかった場合に
ここでの設定をした時間帯に設定変更が実施されます。
Auto Minor Version Updateは「No」を選択します。
![RDS0036.png](https://qiita-image-store.s3.amazonaws.com/0/85659/7330f273-6856-088f-dbb1-a6e67d82984c.png)

<p>　</p>
3.18.Maintenance Windowではこちらも「Selected Window」を選択します。
![RDS0037.png](https://qiita-image-store.s3.amazonaws.com/0/85659/b211160d-3de8-6e80-86b2-c0d05f56eb82.png)

<p>　</p>
3.19.Start Timeは19時にします。
バックアップの時刻と連続とならないように設定し「Launch DB Instance」ボタンをクリックします。
![RDS0038.png](https://qiita-image-store.s3.amazonaws.com/0/85659/b04b9072-7222-da10-e905-6dcfda08e9b4.png)

<p>　</p>
3.20.RDSの作成が開始されます。
「View Your DB Instances」ボタンをクリックします。
![RDS0039.png](https://qiita-image-store.s3.amazonaws.com/0/85659/20bbc90c-6a65-db28-4864-4e0cf53669f3.png)

<p>　</p>
3.21.Stasusが「Creating」等の表記になっているかと思います。
![RDS0040.png](https://qiita-image-store.s3.amazonaws.com/0/85659/54434a60-2284-594f-ceba-725504f4c2c9.png)

<p>　</p>
3.22.Engine名の左の三角印をクリックすると直近で発生したイベントのログを見ることができます。
![RDS0049.png](https://qiita-image-store.s3.amazonaws.com/0/85659/c56fa249-1c69-09b0-fb31-7842287feb03.png)

<p>　</p>
3.23.Stasus「Available」となったら作成完了です。
![RDS0050.png](https://qiita-image-store.s3.amazonaws.com/0/85659/cf31218e-ba4f-f256-1c80-70b50b531faa.png)

<p>　</p>
3.24.虫眼鏡マークをクリックするとインスタンスの詳細を見れます。
![RDS0051.png](https://qiita-image-store.s3.amazonaws.com/0/85659/521a7beb-bc72-7bf8-4905-4c793f66bab2.png)

<p>　</p>
3.25.「Endpoint」に表示されているアドレスが接続先となります。
「Availability Zone」で表示されているAZが、ノードが現在アクティブとなっているAZとなります。
![RDS0052.png](https://qiita-image-store.s3.amazonaws.com/0/85659/3c9bb339-03cc-baae-910c-fadd4540d478.png)

<p>　</p>
3.26.Secondary Zoneで表示されているAZがスレーブとなっているノードが配置されているAZとなります。
![RDS0053.png](https://qiita-image-store.s3.amazonaws.com/0/85659/aedeb4f3-1270-b4b8-30cf-db20d1d0d71b.png)



##4.RDS用セキュリティグループの設定
RDSに対する通信許可設定をします。
WEBサーバーからのDB接続を許可します。
EC2作成編ではEC2メニューで設定する方法をご紹介しましたが、VPCメニューからも設定が可能です。
今回はVPCメニューからの設定方法をご紹介します。

4.1.VPCメニューへ移動します。
![RDS0041.png](https://qiita-image-store.s3.amazonaws.com/0/85659/376e00d1-32e3-53db-0240-1df0d5c8b9a6.png)

<p>　</p>
4.2.左メニューで「Security Groups」をクリックします。
![RDS0042.png](https://qiita-image-store.s3.amazonaws.com/0/85659/9e2ce610-b4cb-9ebf-26ef-f246a7cb7a6c.png)

<p>　</p>
4.3.RDS用のセキュリティグループ選択し「Inbound Rules」タブをクリックします。
![RDS0043.png](https://qiita-image-store.s3.amazonaws.com/0/85659/5ce9f79b-d579-74c8-54ee-c0fe996877de.png)

<p>　</p>
4.4.「Edit」ボタンをクリックします。
![RDS0044.png](https://qiita-image-store.s3.amazonaws.com/0/85659/9d38e0a1-8de5-3a29-dce0-4dc7d771af22.png)

<p>　</p>
4.5.Typeで「PostgreSQL(5432)」を選択します。
![RDS0045.png](https://qiita-image-store.s3.amazonaws.com/0/85659/0a758e27-fede-41d0-d647-cba270c8e727.png)

<p>　</p>
4.6.Sourceでセキュリティグループ名をある程度入れると下に候補が出てきます。
WEBサーバーからの接続許可となるため、WEBサーバー用のセキュリティグループ名を選択します。
![sec000250.png](https://qiita-image-store.s3.amazonaws.com/0/85659/ab6b4277-59cf-3983-d97b-da944f13e53b.png)

<p>　</p>
4.7.「Save」ボタンをクリックします。
![RDS0047.png](https://qiita-image-store.s3.amazonaws.com/0/85659/aef0931c-a894-e8a2-917a-18f4dff4a53a.png)

<p>　</p>
4.8.通信許可設定が完了しました。
![RDS0048.JPG](https://qiita-image-store.s3.amazonaws.com/0/85659/04acabf8-763c-730f-59ff-d891bb2325d3.jpeg)

##5.パラメタグループの設定
パラメタグループでDBのパラメタ設定を行います。
今回はDBのタイムゾーンを変更します。

<p>　</p>
5.1.RDSメニューでParameter Groupsをクリックし、今回作成したパラメタグループを選択して「Edit Parameters
ボタンをクリックします。
![RDS-goods0001.png](https://qiita-image-store.s3.amazonaws.com/0/85659/ae40c581-222d-c3c7-b01e-7223ccc455a4.png)

<p>　</p>
5.2.画面でCtl+Fで検索窓を出し「timezone」を検索します。
デフォルトでは「UTC」と設定されています。
![RDS-goods0002.png](https://qiita-image-store.s3.amazonaws.com/0/85659/d54979bb-8a98-6899-5937-0abb31d64c56.png)

<p>　</p>
5.3.UTCを「Asia/Tokyo」に変更します。
![RDS-goods0003.png](https://qiita-image-store.s3.amazonaws.com/0/85659/e585a3a7-aadc-2ccf-f9a9-0857910a3ea2.png)

<p>　</p>
5.4.「Save Change」ボタンをクリックします。
![RDS-goods0004.png](https://qiita-image-store.s3.amazonaws.com/0/85659/195c161d-5c21-38fe-7455-d7385778c7f8.png)



##5.RDSインスタンスへの疎通確認
EC2インスタンスにログインして以下のコマンドを実行します。

```
# sudo su - root
# yum -y install postgresql93　←postgresqlのクライアントをインストールします
…
Complete!

# psql -h <エンドポイントアドレス（:5432は抜いて下さい)> -U <ユーザ名> -d <DB名>

Password for user <ユーザ名>:　パスワードを入れましょう
psql (9.3.9, server 9.4.1)
WARNING: psql major version 9.3, server major version 9.4.
         Some psql features might not work.
SSL connection (cipher: DHE-RSA-AES256-GCM-SHA384, bits: 256)
Type "help" for help.

<DB名>=>　←このようなプロンプトが表示されればOK
<DB名>=>　\q　←切断します

```