【AWS】VPCを作成

# はじめに

Amazon VPC (Virtual Private Cloud)の略で、AWS上に自身のプライベートネットワークを作成できます。
このネットワーク上にEC2やRDSといったAWSサービスを作成しシステムを構築できます。

プライベートなNW空間になりますが、インターネットゲートウェイを作成しインターネットと接続したり、Direct Connectという機能を利用して社内のイントラと接続することも可能です。
### 前提
VPC作成前にリージョンとアベイラビリティゾーン(AZ)について簡単に触れておきます。
AWSはリージョンとAZという単位に分割して管理されています。
### リージョン
AWSの各サービスが提供されている世界各地の地域のことです。
例えば、日本はアジアパシフィック(東京)というリージョンに含まれています。他にもバージニア北部、オハイオといったリージョンが存在、リージョン間は完全に分離されており耐障害性を保っています。
### アベイラビリティゾーン(AZ)
AZとは、各リージョンに存在するデータセンターです。 各リージョンには複数のアベイラビリティゾーンが存在し、それぞれにサブネットやEC2といったサービスを配置することで冗長性を保つことができます。

### 今回作成するVPCの最終構成
今回はアジアパシフィック(東京)リージョンに以下のようなVPCを作成します。
インターネットと通信ができるパブリックサブネット、インターネットとの通信ができず、VPC内のみの通信が可能なプライベートサブネットを、各AZ内に作成します。
![VPC-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/396faa65-f954-2e1a-f251-e2e8f79413b5.png)


# VPCの作成

VPCを作成していきます。
サービスからVPCを選択後、「VPCを作成」をクリック
![VPC-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/651cce12-3de8-94d9-1a59-6a36eb90fe80.png)
VPCの設定
IPv4 CIDR ブロックでプライベートIPアドレスの範囲を指定します。
CIDRブロックサイズは/16～/28のサイズを指定可能で、
スラッシュの後の数字が小さいほど、割り振る IP アドレスの数が増えます。(/16だと65,536 個分、/28だと11個分)
IPv4 CIDR ブロックは本来、必要なIPアドレスを見積もりした上で設計しますが、今回は以下の通り設定します。

```
名前タグ： rails_test
IPv4 CIDR ブロック： 10.0.0.0/16
```
![VPC-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/c6038b91-4b1b-0911-9cff-f2a7b7e6197b.png)
VPCが作成できました。
![VPC-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/933f616f-100c-531b-ef2e-6b868ecc4e27.png)


# サブネットの設定

サブネットは簡単にいうとVPCを細かく区切ったネットワーク空間です。
先ほど作成したVPCの中にサブネットを構築していきます。
サブネットマスク(16bit ~ 28bit）で割り当て空間の設定や、
配置するAZを指定します。

左ペインのサブネットを選択後、「サブネット作成」ボタンをクリック。
![VPC-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/cbe548d9-93da-b047-0e72-23023dd842cf.png)
VPC IDで作成したVPCを選択
![VPC-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/3a801334-5680-45fd-1179-fdfa7b26731f.png)

下の図は以下の設定をしたものです。

```
サブネット名： Public-subnet-a
アベイラビリティーゾーン： ap-northeast-1a
IPv4 CIDR ブロック： 10.0.1.0/24
```

![VPC-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/e7725628-9dac-cae0-612d-877eb46ef6e9.png)

同様の手順で他3つのサブネットも作成します。

```
サブネット名： Public-subnet-c
アベイラビリティーゾーン： ap-northeast-1c
IPv4 CIDR ブロック： 10.0.2.0/24
```

```
サブネット名： Private-subnet-a
アベイラビリティーゾーン： ap-northeast-1a
IPv4 CIDR ブロック： 10.0.11.0/24
```

```
サブネット名： Private-subnet-c
アベイラビリティーゾーン： ap-northeast-1c
IPv4 CIDR ブロック： 10.0.12.0/24
```

サブネットの作成は完了です。
![VPC-22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/c0fcc980-3501-2203-302c-071461b9606d.png)

# インターネットゲートウェイの作成
VPCを作成しましたが、このままではインターネットに接続できません。
インターネットにはインターネットゲートウェイ(IGW)を経由して通信する必要があります。
まずはIGWを作成します。

左ペインのインターネットゲートウェイを選択後、「インターネットゲートウェイの作成」をクリック
![VPC-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/961d11f5-4f78-5346-47ec-f807803555da.png)
以下の通り設定

```
名前タグ：igw-rails-test
```

![VPC-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/b8c855b4-bba4-79bc-68d6-fdba90bba6d5.png)
作成直後はデタッチ状態のため、先ほど作成したVPCにアタッチを行います。
作成したインターネットゲートウェイの「アクション」よりVPCにアタッチをクリック
![VPC-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/fb7472d1-3b4b-71f6-e5a9-64abc22a02b5.png)
使用可能なVPCで作成したVPCを選択
![VPC-5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/0f1cadf9-17ac-636a-ad76-5afc1a2c668d.png)
IGWの作成、アタッチは完了です。
![VPC-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/0881df87-b82c-5798-3efc-d0d141c24d77.png)

# ルートテーブルの設定

ルートテーブルとは通信経路を決めたルートと呼ばれるルールを定義されたテーブル情報のことです。
IGWをアタッチしましたが、まだインターネットと通信することはできません。ルートテーブルにIGWへのルートを追加しインターネット接続できるようにします。

左ペインのルートテーブルを選択、「ルートテーブルの作成」をクリック

![VPC-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/635570dd-3164-ab48-9a56-0ae4dd50b36e.png)
下の図は以下の設定をしたものです。

```
名前タグ： Public-Route-Table
VPC： （作成したVPCを指定）
```

![VPC-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/71f32cba-6d9e-7daa-8e74-2917a87881d5.png)
### ルートの編集
ルートテーブル作成後、ルートタブの「ルートの編集」をクリック

![VPC-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/4e7e6d80-83ba-f196-cbc4-ba624cef8d55.png)
IGWへのルートテーブルを追加します。

```
送信先: 0.0.0.0/0
ターゲット: (アタッチしたIGW)
```


![VPC-7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/c6a11c1a-01b0-fda8-8af3-f4eac4e825e1.png)

※送信先の0.0.0.0/0は全てのアドレスとマッチするという意味です。全ての送信先に対してIGWを経由するという設定になります。
またルートテーブルにはlocalというテーブルがはじめから関連づけられています。これはVPC内のIPアドレスに対してのルート情報です。
先ほど、全ての送信先に対してIGWを経由と書きましたが、
ルートテーブルは最長プレフィックス一致（定義された最も具体的なルートが優先）が適用されるため、送信先がVPC内のIPアドレスの場合はlocal、それ以外はIGWを経由して通信することになります。

### サブネットの関連付け
作成したルートテーブルにサブネットを割り当てします。
サブネットの関連付けタブを選択後、「サブネットの関連付けの編集」ボタンをクリック

![VPC-17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/2322a27d-3fb9-1803-ea69-8167901f5a26.png)
下の図は以下の設定をしたものです。

```
サブネットID： Public-subnet-a、Public-subnet-c
```

![VPC-18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/ecb8c413-747e-8148-362b-37ffd0b36b63.png)

ここで設定したサブネットが、パブリックサブネット(インターネットへのアクセスが可能)になります。

省略していますが、ターゲットがlocalのみ(IGWのルート情報がない)のルートテーブルを作成し、関連付けしたサブネットがプライベートサブネットとなります。

### 完成
![VPC-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1004560/2404abb5-8841-d0a4-f8f2-b660ca7377e6.png)

# 最後に
今回は一般的なVPC作成について投稿しました。
作成したパブリックサブネットにEC2、プライベートサブネットにRDS等を配置しWebアプリケーションを構築することができます。
VPCには他にもネットワークACLで通信を制御したり等、さまざまな機能があるため、どんどん活用していきたいです。