AWSのEC2＋RDSの構築

## 最初からの構築
最初の状態から構築はなかったので、今回会社の構築内容をまとめてみました。個人的にGCPの方を経験したかったですが貴重な経験ではあると思います。

### 前提条件
- AWSアカウントの取得
- Mac環境

### 構成図
一応、本番で利用するサーバーとして構成しようかと思います。サーバーの障害耐性や冗長化、負荷分散、オートスケーリングなどは入れてない、なるべくコストが掛からない構成です（バンバン入れたいけど）。
![Web App Reference Architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/fbf859ea-77a4-3914-9fe2-4fb7da09a68f.png)
図のRDSのSlaveの方は実際入れてないです。RDSの設定でサブネットグルプが必要ですが、そこで複数のアベイラビリティーゾーンが必要なので作るしかないです。実際余裕があればSlaveSlaveとして利用するようです。
> DBサーバーはMulti-AZ構成という物理的に離れたデータセンターにホットスタンバイ用のサーバーをもう一つ建てることで、障害対応やバックアップなどの対応が可能

アベイラビリティーゾーンとVPCの構造は実際はVPCの中にアベイラビリティーゾーンが入る形ですかね。

ウェブサーバーのサブネットは「public subnet」はネットからの接続するために「Elastic IP」によってグローバルIPを付与します。

## VPC環境の構築
「Start VPC Wizard」を始めると詳細な設定をしなくても良いらしいですが、今回は一つ一つ設定を行いましょう！！

### VPCの作成
1. 左メニューから「VPC」を選択し、「VPCの作成」という青いボタンをクリック
2. 今回作成のネットワーク全体を表す「CIDR」を「192.168.0.0/16]と設定
3. 「作成」の青いボタンをクリック
4. あとで見分けがつくようにタグに適当な名前をつける

*[VPC作成画面]*
<img width="1280" alt="スクリーンショット 2019-10-10 11.17.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/11ae789e-de41-b85f-26c9-507c2cd14752.png">
*[VPCのタグの記入]*
<img width="1279" alt="スクリーンショット 2019-10-10 11.22.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/766bab68-8495-5cf0-c1f5-aeb2a3c4148e.png">

### サブネットの作成
EC2 インスタンス（Webサーバー）用と RDS インスタンス（MySQL）用、RDS Multi-AZ 構成用とで計3つ作成します。
1. 左メニューから「サブネット」を選択し、「サブネットの作成」という青いボタンをクリック
2. VPCは先ほど作成した物を指定
3. アベイラビリティーゾーンは「ap-northeast-1a」に設定
4. CIDRは「192.168.0.0/24」に設定
5. あとで見分けがつくようにタグに適当な名前をつける

<img width="1279" alt="スクリーンショット 2019-10-10 11.24.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/3d6c6bfc-63bc-738f-df79-ebe5492a405f.png">
<img width="1280" alt="スクリーンショット 2019-10-10 11.27.44.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/88e3d814-57f7-1aa0-4efd-45050e1035ec.png">
各サブネットの作成内容は以下になります。

| Name | VPC | アベイラビリティーゾーン | IPv4 CIDR |
|------|-----|-----|----|
| public subnet: web | example-vpc | ap-northeast-1a | 192.168.0.0/24 |
| private subnet: DB | example-vpc | ap-northeast-1a | 192.168.1.0/24 |
| private subnet: DB(Slave) | example-vpc | ap-northeast-1c | 192.168.2.0/24 |
3つ目のサブネットは、RDS の Multi-AZ 構成で利用するものなので、**2つ目のサブネットとは異なるアベイラビリティーゾーンを指定します**。本エントリーの構成では RDS を単一 AZ 構成で構築しますので、このサブネットは今回は利用しません。

### インターネットゲートウェイ
インターネットゲートウェイはVPC内のサーバがインターネットと接続するための出入口です。
1. 左メニューから「インターネットゲートウェイ」を選択し、「インターネットゲートウェイの作成」という青いボタンをクリック
2. あとで見分けがつくように「名前タグ」に適当な名前をつける
3. 「作成」ボタンをクリック
<img width="1279" alt="スクリーンショット 2019-10-10 11.32.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/399c2ad4-641b-81a9-658d-a8b68e4018b5.png">
<img width="1280" alt="スクリーンショット 2019-10-10 11.33.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/d4161f49-7f04-d051-18b3-a5d0f533e898.png">
<img width="1279" alt="スクリーンショット 2019-10-10 11.33.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/eabdcceb-0635-550f-0e42-205894447ea1.png">
次に作成したインターネットゲートウェイをVPCと紐付けます。
1. 「アクション」メニューの「VPCにアタッチ」を選択
2. 「VPCにアタッチ」画面で、先ほど作成したVPCを選択
3. 「アタッチ」ボタンをクリック
<img width="1279" alt="スクリーンショット 2019-10-10 11.33.47.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/940b92b1-bdf4-f19a-73f5-7eba98dac48d.png">
<img width="1280" alt="スクリーンショット 2019-10-10 11.34.12.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/69dcbe62-b059-b411-5243-18fcebc716a3.png">
<img width="1278" alt="スクリーンショット 2019-10-10 11.34.38.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/27668e16-d28d-6d64-f94c-52dcfc875086.png">
### ルートテーブルの確認＆作成
各サブネットに対して仮想的に配置されるルーターのルーティングテーブルのようなものです。左メニューからサブネットを選択し、作成したサブネット一覧を見てみましょう。自動作成された Route Table がデフォルトで割り当てられているのがわかります（下の図ではrtb-******c41となっています）
<img width="1247" alt="スクリーンショット 2019-10-10 11.39.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/162d684f-e8a1-0f4e-320e-e441b9897c55.png">
ルートテーブルは、「Public subnet」に関してはインターネット（外界）への出口（Internet Gateway）が必要であり、「Private subnet」に関しては不要となります。したがって、自動生成された ルートテーブルは「Private subnet」用として使います。
#### ルートテーブルの作成
1. 左メニューから「ルートテーブル」を選択し、「ルートテーブルの作成」という青いボタンをクリック
2. VPCに先ほど作成した物を指定
3. 「作成」ボタンをクリック
<img width="1280" alt="スクリーンショット 2019-10-10 11.43.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/86435703-0157-d2cf-b3f7-90138e755c4e.png">
<img width="1279" alt="スクリーンショット 2019-10-10 11.43.40.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/345c8ce4-6242-3a4e-bcd5-c41e467ae73b.png">
次に今作成したルートテーブルを「Public subnet」に設定します。
1. 一覧から今作成したルートテーブルを選択し、画面下部の「ルート」タブを開いて、「ルートの編集」ボタンをクリック
2. 「送信先」に「0.0.0.0/0」と入力
3. 「ターゲット」に「Internet Gateway」を選択
4. 表示されるインターネットゲートウェイの中で、先ほど作成したインターネットゲートウェイを選択
5. 「ルートの保存」ボタンをクリック
<img width="1279" alt="スクリーンショット 2019-10-10 11.47.11.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/6a379ef3-fdb2-3557-6a43-2dc7567a5961.png">
<img width="1280" alt="スクリーンショット 2019-10-10 11.47.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/0e233c89-681e-0f70-4c20-23583700b735.png">
最後に今作成したルートテーブルを先ほど作成した「public subnet」に設定します。
1. 左メニューから「サブネット」を選択し、サブネット一覧から「public subnet」を選択
2. 下部の「ルートテーブル」のタブを開いて「ルートテーブルの関連付けの編集」という青いボタンをクリック
3. 「ルートテーブルの関連付けの編集」の「ルートテーブルID」から作成したルートテーブルを選択して一覧に追加されたのを確認
4. 「保存」ボタンをクリック
<img width="1280" alt="スクリーンショット 2019-10-10 11.48.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/0816fda6-fb01-4e55-6d91-bb7cb1f92210.png">
<img width="1279" alt="スクリーンショット 2019-10-10 11.49.06.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/bffbc846-f322-a2ae-9e80-9c808c48a35d.png">
<img width="1279" alt="スクリーンショット 2019-10-10 11.50.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/f0ac778b-b11f-e67b-3270-f30c974fec7c.png">

### セキュリティグループの作成
セキュリティグループは用途に合わせて複数作成します。今回は2つ作成します。

- ウェブサーバー用のセキュリティグループ
- DB用のセキュリティグループ：ウェブサーバー用のセキュリティグループからの接続（3306）

左メニューから「セキュリティグループ」を選択します。既にセキュリティグループが一個ありますが、それはおいて新しく作成します。
<img width="1280" alt="スクリーンショット 2019-10-10 11.54.31.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/4debda81-e2aa-dd02-78db-bf5025b3a91a.png">
入力したら「作成」ボタンをクリックします（説明は日本語だとダメでした。）。
1. 作成されたセキュリティグループに名前を適当に記入
2. 下部にある「インバウンドルール」タブを選択し、「編集」ボタンをクリック
3. 「インバウンドのルールの編集」画面で適当なルールを入れて「ルールを保存」をクリック
<img width="1279" alt="スクリーンショット 2019-10-10 11.58.51.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/20930e62-956c-e272-c163-d1dafb7ace8a.png">
DB用のセキュリティグループは以下のようにソースに**ウェブサーバー用のセキュリティグループID**を記入します。
<img width="1280" alt="スクリーンショット 2019-10-10 12.04.14.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/464e0f5a-594c-30cd-8228-713395b19b04.png">
### DBのサブネットグループ：RDSからVPCを利用するための設定
RDS管理コンソールを開きます。
1. 左メニューから「サブネットグループ」を選択
2. 「DBサブネットグループの作成」のオレンジ色のボタンをクリック
3. 「名前」と「説明」に適当に入力
4. 「VPC」に先ほど作成したものを指定
5. 「アベイラビリティーゾーン」と「サブネットID」（private subnet: DB）を選択して「サブネットを追加します」をクリック
6. 先と違う「アベイラビリティーゾーン」を選択し、「サブネットID」（public subnet: DB(Slave)）を選択して「サブネットを追加します」をクリック
7. 「作成」ボタンをクリック
![スクリーンショット 2019-10-10 12.39.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/489182/dd66748b-d40c-f0aa-71f3-fb07b5ef2301.png)

|アベイラビリティーゾーン|サブネットID|CIDRブロック|
|------|-----|-----|
|ap-northeast-1a|private subnet: DB|192.168.1.0/24|
|ap-northeast-1c|private subnet: DB(Slave)|192.168.2.0/24|

## EC2、RDSの構築
以下の設定は省略します。以下のところだけ設定すれば大丈夫だと思います。

- EC２の「ステップ３：インスタンスの詳細設定」で「public subne」を「ステップ６：セキュリティグループの設定」でウェブサーバー用のものを設定
- RDSは先ほど作成したサブネットグループが設定