【AWSの基礎!】VPC、サブネット、ルートテーブルを理解する!

今回はこのような質問をいただきました。

VPCとかサブネットとかよく聞くけどこれって何なの?
インフラ構築する際に一番最初に作ることになるのがVPCです。
結構重要な部分ではあるのですが、「最初に作って終わり」ということも多いので触る機会が少ないんですよね。
そこで今回はこちらの質問について解説していきます!
概要
VPCは仮想のプライベートネットワーク空間。
サブネットはVPCの中に構築するネットワーク空間。
ルートテーブルは通信ルートの定義。
これらはAWS上でインフラを構築する際に最初に用意することになります。
全体イメージ
全体のイメージとしてはこんな感じです。
ルートテーブルが含まれていないけど、ルートテーブルはサブネットに関連付けるものだと思ってください。

VPC
VPCは仮想のプライベートネットワーク空間のことです。
言い換えるとクラウド上に作られた閉鎖的なネットワーク空間のことですね。
これ以上の説明が難しい…
VPCを作成しようとすると以下のような画面が表示されます。

IPv4 CIDR ブロック
こちらはネットワークの広さのことです。
プライベートIPアドレスを指定するので、以下の範囲内で指定します。
- 10.0.0.0 – 10.255.255.255 (10.0.0.0/8)
- 172.16.0.0 – 172.31.255.255 (172.16.0.0/12)
- 192.168.0.0 – 192.168.255.255 (192.168.0.0/16)
/の後ろの数値はサブネットマスクと呼ばれて、数値が小さいほどネットワークが広く、大きいほど狭いです。(最大32)
IPv6 CIDR ブロック
IPv6を利用するかどうか。
今の所、IPv4だけで困ったことはないです。
テナンシー
デフォルトと専有が選択できます。
専有にするとハードウェアを物理的に確保します。
専有するメリットとしてはオンプレで使用していたライセンスを持ち込める、セキュリティの向上が挙げられます。
基本的にはデフォルトで良さそうですね。
サブネット
サブネットはVPCの中に構築するネットワーク空間のことです。
VPCで大きく確保したネットワーク空間を用途ごとに分割するために使います。
一般的にはパブリック用とプライベート用にサブネットを分割します。
サブネットを作成しようとすると以下のような画面が表示されます。

アベイラビリティーゾーン
AWS公式では以下のように説明されていました。
アベイラビリティゾーン (AZ) とは、1 つの AWS リージョン内でそれぞれ切り離され、冗長的な電力源、ネットワーク、そして接続機能を備えている 1 つ以上のデータセンターのことです。
リージョンは東京とかオレゴンとかバージニア北部とか、データセンターのある地域のことです。
この地域内で複数のデータセンターを区別するためにアベイラビリティゾーン (AZ) が存在します。
例えば、東京リージョン(ap-northeast-1)には以下の3つが存在します。
- ap-northeast-1a
- ap-northeast-1c
- ap-northeast-1d
ap-northeast-1aは品川、ap-northeast-1cは新宿、ap-northeast-1dは上野にありますみたいなイメージ。(実際はどこにあるかわかりません!)
AZを分ける理由としてはデータセンターの物理的な障害を回避するためです。
ap-northeast-1aのデータセンターにすべて構築してサーバーの冗長化を行っても地震や火災などでap-northeast-1aのデータセンターそのものが倒壊してしまった場合、冗長化の意味がありません。
データセンターごとのシステム障害なんかもあるのでとりあえず複数のAZ上に構築するべきです。
そのため、基本的にはサブネットを作るときは少なくとも4つ(パブリック・プライベート×マルチAZ)は作ることになると思います。
IPv4 CIDR ブロック
VPCのCIDRと同じ。
VPCで指定したCIDRの中にどのくらいの広さのネットワーク空間を作るか指定します。
ルートテーブル
ルートテーブルは通信ルートの定義となります。
サブネットに関連付けます。
サブネットに関連付けられているルートテーブルにグローバルインターネットへのルートがあれば、そのサブネットはパブリックサブネットということになります。
ルートテーブルを作成するときの設定はVPCを選択だけです。
その解説は不要だと思うのでルートの編集画面を見てみます。
プライベートサブネット用のルートテーブル
CIDRに172.31.0.0/16を指定したVPCでルートテーブルを作成すると、編集画面はこのようになっています。

この状態だと172.31.0.0/16に対する送受信はlocal(VPC内)に流してくださいという意味になります。
内部の通信のみ許可されている状態なので、プライベート用のサブネットにはこのようなルートテーブルを関連付けます。
パブリックサブネット用のルートテーブル
今度はインターネットゲートウェイ(グローバルインターネットへのルート)を追加してみました。

インターネットは0.0.0.0/0と覚えておいてください。
ターゲットはインターネットゲートウェイ(IGW)を指定します。
インターネットゲートウェイはVPCとインターネットとの通信を可能にするものです。
名前を決めるだけで作れます。
パブリック用のサブネットにはこのようなルートテーブルを関連付けます。
あとがき
完全に理解しようと思うと最初はCIDRが意味わからなくて悩むかも。
私も何もわからず触っていた時期がありました。
CIDRを理解できれば全部理解できるはず!
参考
https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az/
https://dev.classmethod.jp/articles/vpc-cidr/
https://www.ryucom.co.jp/blog/aws/898#toc_id_1_3