AWSのVPCとEC2周りのざっくりまとめ

![0502c063755db50978934e28c09ac8f2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/244893/4e9782df-9f27-0252-9cb4-a3293d269882.png)
[[初心者向け]VPC作成からEC2インスタンス起動までを構成図見ながらやってみる（その1） | Developers.IO](https://dev.classmethod.jp/articles/creation_vpc_ec2_for_beginner_1/)

## VPC周りの用語
#### リージョン
AWSの拠点。
東京とかシンガポールとかバージニア北部とか。

#### VPC
AWS専用の仮想ネットワーク。

例えば家庭内でインターネットを利用する際、ルーターやゲートウェイなどのネットワーク機器が必要となる。
VPCはそれらの機器を仮想的に用意し、ネットワーク環境を構築できるサービス。

#### アベイラビリティゾーン(AZ)
リージョン内のデータセンター。
東京A、東京Bみたいな感じ。

#### インターネットゲートウェイ(IGW)
VPCとインターネットの接続口。

#### サブネット
VPCという大きなネットワークのくくりの中に作る、小さいネットワーク。
インターネットと接続するサブネットをパブリックサブネット、遮断するサブネットをプライベートサブネットと呼ぶ。
あくまでIGWと繋がっているかどうかで呼び方が変わるだけで、サブネットの設定値としてプライベートやパブリックがあるわけではない。

#### CIDR
IPアドレスの範囲を簡潔に書く記法。
例えば`172.10.0.0 ~ 172.10.255.255`のIPアドレスの範囲はCIDR表記で`172.10.0.0/16`と表される。

`172.10.0.0`を2進数で書くと`10101100.00001010.00000000.00000000`
`/16`は、この2進数にしたIPアドレスの左から16個までが固定される、という意味。ネットマスクと呼ぶ。

#### ルートテーブル
サブネット内にあるインスタンス等がどこに通信にいくかのルールを定めたもの。
1つのサブネットに1つのルートテーブルを用意でき、指定がない場合はVPC作成時に自動生成されるメインルートテーブルがサブネットに割り当てられる。

#### NATゲートウェイ(NGW)
パブリックサブネットに設置し、プライベートサブネット→パブリックサブネットに設置されたNGW→IGWを通じて、プライベートサブネットから外部への通信ができるようにする。
中→外のアクセスはできるけど、外→中のアクセスは遮断したい時に使う。
プライベートIPとパブリックIPを多対1で変換する。

## EC2周りの用語
#### インスタンス
OSを載せた仮想サーバーのこと。EC2はインスタンスという単位で、サーバー環境が構築できる。

#### Elastic IP
インスタンス作成時に(設定によって)割り当てられるパブリックIP(グローバルIP)は、インスタンスを再起動するたびに変化してしまう。
Elastic IPを割り当てることで、固定IPになる。

#### セキュリティグループ
インスタンスの通信を遮断する目的で作られる仮想ファイアウォール。
拒否ルールの設定はないので、許可ルールに一致しない通信はすべて遮断される。

#### ネットワークACL
サブネットに属するすべてのインスタンスに対して適用されるファイアウォール。
セキュリティグループと機能がかぶるので、使わない場合も多い。

####  Elastic Block Store(EBS)
EC2にアタッチして使われるストレージ。
類似のものに「インスタンスストア」「Amazon EFS」があるけど、EBSが一番よく使われる。

基本的にEBSにはソースコードとちょっとした画像くらいを置いて、
重たいデータとか、ユーザーがアップロードするデータとかは、EBSじゃなくて[S3](https://qiita.com/d0ne1s/items/e5a68672225760edeff6)に置く。

#### AMI
インスタンスを起動するのに必要なOSやボリュームの情報、アプリケーションなどを含むインスタンスの起動テンプレートのこと。インスタンスを立ち上げる際は必ずAMIを指定して起動する。

AMI = EBSスナップショット + α(管理情報)

## 押さえておきたいポイント
#### EC2インスタンスにインターネットからアクセスするために必要な設定
- VPCにIGWがアタッチされている
- インスタンスが設置されているサブネットのルートテーブルに、IGWへの接続が定義されている
- EC2インスタンスにアタッチされているセキュリティグループで、外部との通信が許可されている
- EC2インスタンスにパブリックIP(グローバルIP)が設定されている

#### SSHキーペアについて
デフォルトだと、EC2インスタンス作成時にキーペアが作成され、秘密鍵をダウンロードする仕様となっている。
ローカルでキーペアを作成して(or すでにあるキーペアを利用して)、公開鍵をアップロードすることもできる。

#### VPCとサブネットに指定するCIDR
VPCやサブネットを作成するとき、CIDRを指定して、使えるIPアドレスの範囲を設定する。
ネットワーク内のIPアドレスなので、グローバルIPではなくプライベートIP。
そしてプライベートIPアドレスは、以下の範囲から選ぶ必要がある。

| CIDR | IPの範囲 | 
| ---- | ---- |
| 10.0.0.0/8 | 10.0.0.0 ~ 10.255.255.255 | 
| 172.16.0.0/12 | 172.16.0.0 ~ 172.31.255.255 |
| 192.168.0.0/16 | 192.168.0.0 ~ 192.168.255.255 | 

各サブネットのネットマスクを、VPCのネットマスクより大きくすることで、サブネットのIPアドレス範囲をVPCのIPアドレス範囲より小さくし、複数のサブネットを利用することができるようにする。

VPCのネットマスクが16の場合、サブネットのネットマスクには20(各サブネットで使えるIPが500個くらい)や24(各サブネットで使えるIPが4000個くらい)を使うことが多い。

**3つのサブネットのネットマスクに20を設定する場合の例**

| | CIDR | IPアドレスの個数| IPアドレス範囲|
| ---- | ---- | ---- | ---- |
| VPC | 172.31.0.0/16 | 65531 | 172.31.0.0 ～ 172.31.255.255 |
| サブネット1 | 172.31.0.0/20 | 4091 | 172.31.0.0 ～ 172.31.15.255 |
| サブネット2 | 172.31.16.0/20 | 4091 | 172.31.16.0 ～ 172.31.31.255 |
| サブネット3 | 172.31.32.0/20 | 4091 |172.31.32.0 ～ 172.31.47.255 |

※実際に使えるIPアドレスは`IPアドレスの範囲 -5`個

#### 0.0.0.0/0
AWSでは、`全てのIPアドレス`という意味

## ハンズオン
- [AWSのVPC周りに入門するためのハンズオン - Qiita](https://qiita.com/d0ne1s/items/ee9c5f93c0f406dbd890)

## 参考
- [AWSネットワーク周りのメモ](https://zenn.dev/d0ne1s/scraps/119d9b12269985)
- [EC2周りのメモ](https://zenn.dev/d0ne1s/scraps/5b4c08e5f33342)