Amazon VPC周りの基礎知識を学習してみた

# はじめに
[前回](https://qiita.com/e-takazawa/items/869b6edd3a915b98590e)から2年振りの記事投稿になります。
当時はiOS/Androidアプリ開発のマネジメントを担当していたのですが、今はAWS上で全て構築されているWebサイト開発のマネジメントを担当しています。
ここ数年で得た知識があまり役に立たない中で悪戦苦闘しながら仕事していて現在に到るのですが、

「マネジメントする以上、AWSの基本的知識が必要不可欠だよね。」

と軽いノリでAWS認定ソリューションアーキテクトの取得を目指して勉強しています。
今回はそのソリューションアーキテクトの勉強をしていて、

「AWS以前にサーバやらネットワークやらの知識を取得しないと無理じゃね？」

と思ったので、学習しつつ覚えたことを書いていきます。
今回は個人的に苦手だなと思ったVPCについて、VPC ダッシュボードの機能を片っ端から触ってみてわかったことを書いていこうと思います。

# Amazon VPC
Amazon Virtual Private Cloudと書く。
AWS上に構築するリソース（EC2、S3、RDSなど）のネットワーク周りの設定をほぼVPCだけで完結して設定できる。
マニュアルにも、データセンターで運用する従来のネットワークに似ているとあるので、ここでできる機能を大体網羅すれば

ネットワーク完全に理解した

になると思われる。

VPCを作成するとき、VPC内で幾つのIPv4、IPv6のローカルIPアドレスの割り当てを許可するかを設定することできるようだ。
というより設定しないといけない。

## サブネット
サブネットがなぜ必要なのか、については[こちら。](http://www.runsurunet.com/2017/01/20/%E3%82%B5%E3%83%96%E3%83%8D%E3%83%83%E3%83%88%E5%8C%96%E3%81%AE%E3%83%A1%E3%83%AA%E3%83%83%E3%83%88/)
VPCは最低限一つのサブネットを持つ必要があり、EC2などのリソースも必ずどこかのサブネットに属する必要がある。

サブネットはVPC内のIPアドレスの範囲を定義する。
例えば【10.0.3.0/24】と定義すれば、サブネット内は10.0.3.0 - 10.0.3.255の範囲でローカルIPアドレスが割り当てられる。

- 10.0.3.0はネットワークアドレス
- 10.0.3.255はブロードキャストアドレス
- そもそもCIDRってなんで必要なの？

辺りは、それだけで一記事書けてしまうのでここでは触れない。

また、AWSの場合はサブネットは必ず一つのアベイラビリティーゾーンに属する事になる。複数にアベイラビリティーゾーンに跨るサブネットは作れない。

## インターネットゲートウェイ、NATゲートウェイとルートテーブル
サブネットは基本、それだけではインターネットとの接点を持たない。（入ることも出ることもできない。）
インターネットゲートウェイとサブネットをルートテーブルを使って紐付けすることで、紐づいたサブネットはインターネットにアクセスすることができる。このようなサブネットをパブリックサブネットと呼ぶ。

ルートテーブルに該当するサブネットを関連付け登録し、0.0.0.0/0のターゲットをインターネットゲートウェイに設定する。
すると、サブネットのリソースからのネットワークアクセスは全てインターネットゲートウェイを通じてインターネットアクセスが可能になる。
（ただし、ルートテーブルにはVPCのネットワークアドレスがデフォルトでローカル宛に登録されているので、ローカルIPアクセスが優先される。）

インターネットゲートウェイと接点を持たないサブネットはプライベートサブネットと呼ばれる。
プライベートサブネットに属しているとyumみたいに外部に問い合わせるコマンドを一切使えないので、使いたい場合はNATゲートウェイを使う。
パブリックサブネットにNATゲートウェイを配置し、プライベートサブネットの0.0.0.0/0のターゲットにそのNATゲートウェイが向くようにルートテーブルに登録する。

## Egress Only インターネットゲートウェイ
IPv6用が設定が必要だが、Egress Only インターネットゲートウェイを使えば、プライベートサブネットからも外部に問い合わせるコマンドが使用できる。

### 1.VPCにIPv6用 CIDRを登録する。
![スクリーンショット 2020-12-05 22.56.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/65f9950d-35b8-a086-11c1-673753455a51.png)

Amazonが提供しているCIDRを設定した。

### 2.使用するサブネットにもIPv6用のCIDRを登録する。
![スクリーンショット 2020-12-05 23.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/3ad5112b-3ed9-dcf9-c312-2fe15021988c.png)

### 3.Egress Only インターネットゲートウェイを作成する。
Egress Only インターネットゲートウェイはVPCにつき、一つだけ作成することができる。
アタッチされていないVPCがない場合は、VPCの作成から行う必要がある。
![スクリーンショット 2020-12-05 23.11.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/0c5954df-a6d3-804a-24b5-8be4a063c262.png)

あとは、ルートテーブルにIPv6のデフォルトルート【::/0】はゲートウェイを通すように設定する。
![スクリーンショット 2020-12-05 23.13.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/00e54281-001e-18be-867a-54a15609d890.png)

### 4.EC２インスタンスの場合はセキュリティグループやEC２インスタンスにIPv6の設定を加える。
セキュリティグループのアウトバウンドルールにIPv６のデフォルトルートの設定を加える。
※もう少しマシな設定があるかもしれない。
![スクリーンショット 2020-12-05 23.23.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/68c3666b-2f7c-316e-71ea-ad5e564a50b7.png)

EC２インスタンスにもIPv6 アドレスを割り当てる。
![スクリーンショット 2020-12-05 23.25.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/115635/e96622c5-7a1a-85d4-a537-348751f17f94.png)

ここまで準備すればプライベートサブネットに所属するEC2インスタンスからもIPv６によるインターネットアクセスが可能になる。

# おわりに
学習しながら書いたので雑多な記事になってしまいました、すみません。
VPC ダッシュボードの順番的に次はDHCP オプションセットなのですが、Route５３から見る必要がありそうなので、次はそこから見てみようと思います。