はじめに
先日、プライベートサブネットとパブリックサブネットの違いをまとめた記事を書きました。
【AWS】パブリックサブネットとプライベートサブネットの違いとは
じゃあ実際、どう作んのよって話を今回紹介したいと思います。
せっかくなのでハンズオン形式で、画像と合わせて説明していきます。
また今回作成するプライベートサブネットには、NATゲートウェイをアタッチします。
NATゲートウェイをアタッチせずともプライベートサブネットと呼べるのですが、せっかくなので作っていこうと思います。
レシピ
私が思いつく限りでは、3通りあると思います。
- マネジメントコンソールで作成
-
awscli
(コマンド)で作成 -
CloudFormation
で作成
今回は1のレシピで解説していきます。
前提条件
- AWSのアカウントを持っている
1. サブネット作成
AWSマネジメントコンソールにアクセスします。
サービス一覧からVPC
を選びます。
VPC
のページには、VPC
だけでなくネットワーク関連のものがずらっと左のメニューに並んでいます。
この中から**「サブネット」**を選択します。

**「サブネット」を選択したらサブネットの設定画面に遷移します。
そこで「サブネットの作成」**を選択しましょう。
サブネット設定画面では以下の4項目を設定します。
- サブネットの名前タグ
- 所属させるVPC
- 所属させるAZ(アベイラビリティゾーン)
- IPv4 CIDR ブロック(Classless Inter-Domain Routing)

CIDRブロックの設定方法について
サブネットのCIDRブロックは、以下の条件のものを設定する必要があります。
- VPCのCIDRブロックに内包されるブロック
- 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内で既に使用されていないブロック
を満たすためには、
やり方が正しいのかわかりませんが、とにかく入れてみて作れるか試せば良いと思います。
既に使われていれば下の画像のように表示されるので、数字を少し変えて再度作成する流れになります。

私の場合、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の作成」ボタンで一発で作成してくれます。
上記2つの設定が終わったら「NATゲートウェイの作成」**を実行します。

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

3. ルートテーブルの作成
次にプライベートサブネット用のルートテーブルを作成します。
VPCダッシュボードの左のメニューからでも遷移できます。
- ルートテーブルの名前
- 所属させるVPC
を設定したら作成します。

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

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

**「ルートの追加」**を選択して、ルートを一つ作成します。
- 送信先(
0.0.0.0/0
) - ターゲット(NATゲートウェイ→作成したNATゲートウェイを選択)
全ての通信をNATゲートウェイに流す設定をしています。
NATゲートウェイの選択ではIDから選択しなければなりません。。(面倒)
設定が終わったら**「ルートの保存」**を実行します。

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

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

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