【AWS】プライベートサブネット3分クッキング（ハンズオン）

# はじめに

先日、プライベートサブネットとパブリックサブネットの違いをまとめた記事を書きました。

[【AWS】パブリックサブネットとプライベートサブネットの違いとは](https://qiita.com/hesma2/items/29db7ccb8678a84d267a)

じゃあ実際、どう作んのよって話を今回紹介したいと思います。
せっかくなのでハンズオン形式で、画像と合わせて説明していきます。

また今回作成するプライベートサブネットには、NATゲートウェイをアタッチします。
NATゲートウェイをアタッチせずともプライベートサブネットと呼べるのですが、せっかくなので作っていこうと思います。

# レシピ

私が思いつく限りでは、3通りあると思います。

1. マネジメントコンソールで作成
2. `awscli`(コマンド)で作成
3. `CloudFormation`で作成

今回は1のレシピで解説していきます。

# 前提条件

- AWSのアカウントを持っている


## 1. サブネット作成

AWSマネジメントコンソールにアクセスします。
サービス一覧から`VPC`を選びます。

`VPC`のページには、`VPC`だけでなくネットワーク関連のものがずらっと左のメニューに並んでいます。
この中から**「サブネット」**を選択します。

<img width="100" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/3e5dd2fd-3075-72c8-2b10-8e5efea712be.png">


**「サブネット」**を選択したらサブネットの設定画面に遷移します。
そこで**「サブネットの作成」**を選択しましょう。

サブネット設定画面では以下の4項目を設定します。

- サブネットの名前タグ
- 所属させるVPC
- 所属させるAZ（アベイラビリティゾーン）
- IPv4 CIDR ブロック（Classless Inter-Domain Routing）

<img width="720" alt="スクリーンショット 2020-03-01 21.40.29.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/273685f9-797b-23ba-d5d5-7890471ff5ff.png">


#### CIDRブロックの設定方法について
サブネットのCIDRブロックは、以下の条件のものを設定する必要があります。

1. VPCのCIDRブロックに内包されるブロック
1. VPC内で既に使用されていないブロック

`1. VPCのCIDRブロックに内包されるブロック`を満たすためには、
VPCの`xxx.xxx.xxx.xxx/yy`の`yy`(サブネットマスク)の数字より大きい`zz`(サブネットマスク)にする必要があります。
例えばVPCが`172.31.0.0/16`の場合、
サブネットは`172.31.0.0/20`を設定します。
（`172.31.0.0/18`や`172.31.0.0/24`）でも良いと思います。

`2. VPC内で既に使用されていないブロック`を満たすためには、
やり方が正しいのかわかりませんが、とにかく入れてみて作れるか試せば良いと思います。
既に使われていれば下の画像のように表示されるので、数字を少し変えて再度作成する流れになります。

<img width="720" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/6e7227e4-5e16-7399-3761-64b1e09cc2a9.png">

私の場合、`172.31.0.0/20`からスタートして、
`172.31.16.0/20` `172.31.32.0/20` `172.31.48.0/20`もダメで、
`172.31.64.0/20`に落ち着きました。他のサブネットで使用されてました。

## 2. NATゲートウェイ作成

次にNATゲートウェイを作成します。
ルートテーブルと同様に左のメニューから遷移できます。

- NATゲートウェイを設置するサブネット（パブリックサブネットを選択します）
- NATゲートウェイに割り当てるElastic IP（固定IP）

NATゲートウェイは、先ほど作成したプライベートサブネットではなく、デフォルトなどで作成されているパブリックサブネットに設置しましょう。
Elastic IPは**「新しいEIPの作成」**ボタンで一発で作成してくれます。
上記２つの設定が終わったら**「NATゲートウェイの作成」**を実行します。

<img width="720" alt="スクリーンショット 2020-03-01 21.42.20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/00e88dfe-a647-66f1-baa1-2fd44b32f81b.png">

作成後の画面から**「ルートテーブルの編集」**を選択して次のステップに進みます。

<img width="720" alt="スクリーンショット 2020-03-01 21.44.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/197c4e40-6cbf-4d33-3a7e-6b4cff78b186.png">



## 3. ルートテーブルの作成

次にプライベートサブネット用のルートテーブルを作成します。
VPCダッシュボードの左のメニューからでも遷移できます。

- ルートテーブルの名前
- 所属させるVPC

を設定したら作成します。

<img width="720" alt="スクリーンショット 2020-03-01 21.47.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/88e725ad-7ae3-8110-bc5b-caab8f49b48c.png">

作成後の画面から、作成したルートテーブルの詳細に飛びましょう。

<img width="720" alt="スクリーンショット 2020-03-01 21.48.28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/f1e203b6-4ac8-2256-af94-7dfadca86546.png">


作成したルートテーブルを選択した状態で、
画面下に表示される詳細情報の**「ルート」タブ** > **「ルートの編集」**を選択します。

<img width="720" alt="スクリーンショット 2020-03-01 21.50.34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/b6791829-ac42-8910-d15b-925a3d9479dd.png">

**「ルートの追加」**を選択して、ルートを一つ作成します。

- 送信先（`0.0.0.0/0`）
- ターゲット（NATゲートウェイ→作成したNATゲートウェイを選択）


全ての通信をNATゲートウェイに流す設定をしています。
NATゲートウェイの選択ではIDから選択しなければなりません。。（面倒）
設定が終わったら**「ルートの保存」**を実行します。

<img width="720" alt="スクリーンショット 2020-03-01 21.54.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/3577f9c0-4bff-7275-a601-46c9d1e04d63.png">


## 4. サブネットにルートテーブルを関連付ける

最後に、プライベートサブネットにルートテーブルを関連付けます。
サブネットを作成したままだと、デフォルトのルートテーブルが関連付けられているため、手動で関連付けしてあげる必要があります。
そのままルートテーブルの詳細情報から**「サブネットの関連付け」** > **「サブネットの関連付けの編集」**を選択します。

<img width="720" alt="スクリーンショット 2020-03-01 21.55.54.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/058d7057-995a-1c4a-b2b3-3efe3a037416.png">


初期ではどのサブネットも関連付けされていないと思うので、ここでプライベートサブネットを選択して**「保存」**を実行します。
（プライベートサブネットの名前で検索をかけています。

<img width="720" alt="スクリーンショット 2020-03-01 21.57.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533841/2b31c426-18d5-23fc-12e7-eb5aa022e77c.png">


これで、プライベートサブネットの作成が完了しました。




# 参考

- [VPC CIDRについてちょっと調べた](https://qiita.com/daikissdd/items/101679f19de246f22df4)
- [インターネット用語1分解説～CIDRとは～ ](https://www.nic.ad.jp/ja/basics/terms/cidr.html)