AWSのVPC周りを整理する（VPC、Subnet、InternetGateway、RouteTable、SecurityGroup・・・）

# はじめに

どーも、のぶこふです。
この記事は[GFAMアドベントカレンダー2021](https://qiita.com/advent-calendar/2021/gfam)の3日目の記事です。

前回、アカウントを作成したので、お次はVPC（仮想ネットワーク）ですね。
このVPC内で、ほとんどの様々なリソースを起動していきます。

# 今回のサービス一覧

|Service名とか|概要|
|--|--|
|VPC|ネットワーク空間|
|Subnet|VPCを論理的に分割|
|リージョン|データセンタの場所（国とかの単位）|
|AZ|リージョンを物理的に分割|
|Internet Gateway|インターネットからアクセスできるようにするよ|
|NAT Gateway|PrivateSubnetからインターネットアクセスしたい|
|Route Table|ネットワーク経路が記載されたテーブル|
|Security Group|インスタンス単位でのファイアウォール|

### 関係性
名前とか文章だけだと分かりづらいので、図にしてまとめると、こんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306608/e5646b8b-7495-c67e-4800-b711c5e85f77.png)


# VPC[^1]
* VPC：Virtual Private Cloud
* AWS上にプライベートネットワーク空間を構築
    * 任意のIPアドレスレンジが利用可能
* 論理的にネットワーク分離が可能
    * 必要に応じて、ネットワーク同士の接続が可能
* ネットワーク環境のコントロールが可能
    * ルートテーブル、各種ゲートウェイ、各種コンポーネント
* 複数のコネクション方法が選択可能
    * インターネット経由
    * VPN・専用線（Direct Connect）
* 作成時に、デフォルトでルートテーブルが作成される

### VPC Endpoint？
* グローバルIPを持つAWSサービスに対して、VPC内部から直接アクセスするための出口
    * その仕組みから、Gateway型とPrivateLink、Gateway LoadBalancerに分類されます

||Gateway型|PrivateLink (Interface型)|
|--|--|--|
|対応サービス|S3、DynamoDB|50種以上|
|アクセス制御|エンドポイントポリシー|セキュリティグループ|
|利用料金|無料|有料（1プライベートIP毎）|
|冗長性|ユーザ側で意識不要|マルチAZ設計する|

### VPC Flow Logs？
* ネットワークトラフィックをキャプチャして、CloudWatch LogsやS3へPushする機能
    * ネットワークインタフェースを送信元・先とするトラフィックが対象
    * RDS、Redshift、ElasciCache、WorkSpaceのネットワークインタフェーストラフィックも取得可能

### CIDR
* VPCやSubnetで出てくるのが、CIDRです。
    * CIDRについては、Wikipedia大先生[^cidr]におまかせしますが、自身でVPCやSubnetを作成する際は、ざっくりと概念は理解しておいた方が良いと思います。

# Subnet
* VPC内に構成するネットワークセグメント
* 1つのVPCに対して、1つ以上のサブネットで構成される

### Public Subnet、Private Subnet？
* デフォルトゲートウェイへのルーティングによって変わる

||Public|Private|
|--|--|--|
|インターネットゲートウェイをアタッチして・・・|いる|いない|
|インターネットからのアクセス|可能|不可能|
|通信先（デフォゲ）|インターネットゲートウェイ|だいたいNAT Gateway|
|よくある構成|APサーバ|DBサーバ|

# リージョン[^2]
* データセンターが集積されている世界中の物理的ロケーション
    * 論理データセンターの各グループを、AZという（後述）

# AZ
* AZ：Availability Zone
    * 1リージョン内にAZが複数存在
    * AZはお互いに地理的・電源的・ネットワーク的に分離
    * 2つのAZを利用した冗長構成を容易に構築
    * リージョン内のAZ間は、高速専用線で接続
        * リージョン間も可能な限り高速専用線で接続

# Internet Gateway[^3]
* VPCとインターネットとの間の通信を可能にするVPCコンポーネント
    * インターネットでルーティング可能なトラフィックの送信先をVPCのルートテーブルに追加する
    * Public IPv4アドレスが割り振られているインスタンスに対して、NAT（ネットワークアドレス変換）を行う
* IPv4トラフィックとIPv6トラフィックをサポート
* 利用料金無し

# NAT Gateway
* マネージドNATサービス
* プライベートサブネットのリソースが、インターネット・AWSクラウドへの通信をするために必要
* EIPを割り当て、高パフォーマンス、高可用性
* AZ毎に設置するのがベストプラクティス

# Route Table[^4]
* VPCに暗黙的に存在するルータの経路設定
* EC2インスタンスから見るとデフォゲ

# Security Group[^5]
* インスタンス単位の仮想ファイアウォール
    * インバウンド・アウトバウンドトラフィックをコントロール
* 許可ルールが指定可能
* インバウンドとアウトバウンドのルールを個別に設定可能
    * デフォルトのインバウンドは「設定無し＝全て拒否」
    * デフォルトのアウトバウンドは「全て許可」
* ステートフル
* ネットワークインタフェースに関連付けられる
* セキュリティグループの作成時に指定したVPCでのみ使用可能

# AWSのサービス
* サービスによって配置される場所が異なります。[^6]
    * サービスによっては、通常ではグローバルサービスだけど、リージョンだと・・というのもあります[^7]

|サービス|概要|例|
|--|--|--|
|グローバルサービス|リージョンをまたがって世界で共通なサービス|Route 53、Chime、WorkSpaces・・・|
|リージョンサービス|リージョンごとに作成、管理するサービス|VPC関連、DynamoDB、Code兄弟・・・[^8]|
|AZサービス|AZごとに作成、管理するサービス|EC2、RDS・・・|


# おわりに
今回は、VPC周りを少し整理してみました。
今回上げたサービスのほとんどが「初めて触る人用」として、AWS側でデフォルトが用意されています。
なので、EC2を開始する時などにも「使ったことが無い」という方は多いかと思います。

これらのデフォルトで用意されているものは、あくまでも初めて触る人にむけてのもの。
VPCなどは自分で設計や構築していくのが、AWSの基本だと思います。
操作や概念に慣れてきたら、デフォルトのものは使わずに、自分で設定してみましょう。

今回はここまでです。
ありがとうございました。


[^1]: [BlackBeltさまさまです](https://d1.awsstatic.com/webinars/jp/pdf/services/20201021_AWS-BlackBelt-VPC.pdf)
[^cidr]: [Wikipedia大先生](https://ja.wikipedia.org/wiki/Classless_Inter-Domain_Routing)
[^2]: [リージョンとAZは、公式から](https://aws.amazon.com/jp/about-aws/global-infrastructure/regions_az/)
[^3]: [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/ja_jp/vpc/latest/userguide/VPC_Internet_Gateway.html)
[^4]: [BlackBelt](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-08_AWS_Summit_Online_2020_NET01.pdf)
[^5]: [公式ドキュメント](https://docs.aws.amazon.com/ja_jp/ja_jp/vpc/latest/userguide/VPC_SecurityGroups.html)
[^6]: [『元オンプレエンジニアのAWS (Amazon Web Service) 自己学習メモ』さんより](https://awsjp.com/AWS/hikaku/AZ-Region-Global-service-difference.html)
[^7]: [例えば、Route53](https://docs.aws.amazon.com/ja_jp/Route53/latest/DeveloperGuide/disaster-recovery-resiliency.html)
[^8]: [リージョン毎のサービス](https://aws.amazon.com/jp/about-aws/global-infrastructure/regional-product-services/)