EC2とRDSでWeb環境構築するよ！（第１回：VPC編）

AWSは部分的にこれまでもちょこちょこ仕事で弄ってきたけど体系的にメジャーサービスを構築したことがなかったのでEC2やRDSを使ったWeb画面（PHP）を構築してみたのでメモ。

## サービスの全体象
作りたいサービスの概要はこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/00cd9bdd-7272-b7c8-213d-616e17591a30.png)

EC2にWebサーバを立ててPHPのプログラムがMySQLにアクセスしてテーブルの情報を表示する画面を作ります。
いわゆる一般的なWebシステムの構成でWebサーバはPublicサブネットに公開し、DBサーバはPrivateサブネットで冗長構成としてEC2のみのアクセスを許可する制御とします。また独自ドメインを取得してDNSでの名前解決も行えるようにします。

このシリーズで取り組む内容は
第１回：VPC・サブネット周りの作業
第２回：EC2の構築
第３回：Route53の登録
第４回：RDSの構築
第５回：Web環境の構築
を予定しています。今回は第一回：VPC編となります。
<br>

## VPC・サブネット周りの作業概要
まずはNW周りの作業概要について。
WebサーバとDBサーバがぶら下がるNW環境（VPC）をまず作ります。
外部公開するWebサーバとアクセスを絞りたいDBサーバではアクセスレベルが異なるため、サブネットワークを別々に分けてアクセス制御を実施します。
またパブリックサブネットワークではアウトバウント向けのルーティング情報が必要となるので専用のルーター（デフォルトゲートウェイ）とどのIP向けのアクセスをデフォルトゲートウェイに問い合わせるかのルーティングテーブルを作成する必要があります。

順序としては
1.EC2インスタンスの作成
2.サブネットワークの作成
3.インターネットゲートウェイの作成
4.ルーティングテーブルの作成・紐づけ
の順番で実施。


## 1.VPCを作成する
EC2とRDSを置くためのVPC（NW環境）を作成します。
VPCはシステム全体の仮想NWの位置づけでVPCの中にさらに個別のシステムごとにサブネットワークを構築していきます。サブネットワークはAZ（アベイラビリティゾーンを選んで作成できます。）

「VPC」→「お使いのVPC」→「VPCを作成」クリック
（デフォルトですでにVPCが作成されているがこれは使わない。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/0f394d34-8fb7-f424-23b1-d914f67d4cab.png)
<br>

VPCの名前とIPv4 CIDR形式（確保するNWアドレスのスコープ）を入力。
※テナシーはVPCが物理HWを占有の有無の設定（基本いらいらないのでデフォルト選択）
・VPC名：my-vpc-01
・IPv4 CIDR形式：10.0.0.0/16
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/6cda44b4-e2e5-c984-b4cc-a88e940052d3.png)
<br>
VPCできた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/8f1bbe0b-199b-4a8a-7937-664dd54ad0b1.png)


## 2.サブネットワークを作る
ここではWebサーバ（EC2）とDBサーバ（RDS）を配置するパブリックサブネットとプライベートサブネットを作成する。

まずはEC2を置くサブネットワークを作成する。
「VPC」→「サブネット」→「サブネット作成」をクリック
・サブネットワークを作るVPC：my-vpic-01（先ほど作成したVPCを選択）
・サブネット名：my-pubsub-1a（Webサーバを置く外部公開用サブネット名）
・AZ：ap-northeast-1aを選択。（Tokyoリージョンは1a～1cまである）
・IPv4CIDR形式（サブネットワークのスコープ）：10.0.10.0/24
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/8ce399c4-3130-58d6-9f5f-c0e1a110f0e1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/ae44ef88-8e4a-4bf5-7e4e-a06660f3ce03.png)
<br>
続けてDBサーバを置くサブネットワークも併せて作成する。
DBサーバは冗長構成を作ることを想定しているためサブネットワークは２つ作成します。

・名前：my-prvsub-1a
・AZ：ap-northeast-1a
・IPv4CIDR形式：10.0.20.0/24

・名前：my-prvsub-1c
・AZ：ap-northeast-1c
・IPv4CIDR形式：10.0.21.0/24



サブネットワークができるとこんな感じになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/61d8771d-94db-6f80-2862-352b79bf3ab3.png)


## 3.インターネットゲートウェイの作成
VPCとインターネットをつなぐためグローバルIP解決用のルータ（インターネットゲートウェイ）を用意してVPCにアタッチしてあげる。

「VPC」→「インターネットゲートウェイ」→「インターネットゲートウェイ作成」クリック

名前：my-internet-gw
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/f583207f-76ba-1efa-9a4c-6f7f66ee4b9c.png)
<br>
作成したインターネットゲートウェイ選択し、VPCにアタッチをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/a3b9f9ae-5c2c-78fe-50a2-9b4bf047aeda.png)

先ほど作成したVPCを選択するればインターネットゲートウェイがVPCにアタッチできる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/f4e74d69-4738-923d-8e2c-fe2052e9ff99.png)

## 4.ルーティングの設定
パブリックのサブネットに対してルーティングを設定してあげる。
実現したいルーティングとしては
①宛先がVPCのNW内（10.0.0.0/16）ならローカル（VPC内）ルーティング
②それ以外（0.0.0.0/16）ならインターネットゲートウェイにルーティング


「VPC」→「ルートテーブル」→「ルートテーブル」を作成
・ルートテーブル名：my-pubroute-talbe-01
・VPC：my-vpc-01
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/8ceff9c3-ab1e-45bb-4a5c-eccbfeb9d78b.png)
<br>
既にローカルルーティングは設定されているので追加でデフォルトゲートウェイのルートを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/c5691a21-c360-4cd4-47f4-6ecc2a52e186.png)
<br>
0.0.0.0/0（それ以外のルート）にインタネットゲートウェイを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/aad090b2-2103-3345-d003-78cede2c2155.png)
<br>
ルートテーブルが以下で作成される。VPC内の宛先IP（10.0.0.0/16）ならターゲットがlocal、それ以外（0.0.0.0/0）はインターネットゲートウェイにアウトバウント処理を投げる設定となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/8ebec9fd-d92d-2c9c-f83c-6fb6c56811ba.png)
<br>
あとは作成したルートテーブルの情報をパブリックサブネットに紐づけてあげる。
作成したルートテーブルを選択して「サブネットの関連付け編集」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/8bf36c32-418e-b3f9-938b-0ae3a86a0b4e.png)
<br>
外部公開向けサブネット my-pubsub-1aを選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/80b76c75-e9f8-7788-3a94-4c3fc08c1103.png)
<br>
ルーティングテーブルにmy-pubsub-1aのサブネットが紐づけられる。
※プライベートサブネット my-prvsub-1aはルーティングテーブルを紐づけない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3785085/a678c30c-73d2-577f-8553-0818d63fe55f.png)
<br>
以上でVPC・サブネットワークを作成しインターネットゲートウェイとルーティングの情報をAWSで設定できた。
その他注意点としてはVPC設計する際はIPアドレスのスコープは大き目に確保したほうがよさそう /16 ぐらいが推奨。またWebサーバを冗長構成にする際はサブネット分割して別々のAZに配置するなどの構成が望ましい。
 
次はこのパブリックサブネットにEC2を作るよ!