IAM AWS User クラウドサービスをフル活用しよう！Part2[クラウドとは？ & ネットワーク編その1(VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイント)]

みなさんインフラを触る上でコンピューターサイエンスの分野で何を勉強しないといけないと思いますか？多くの人はなんかネットワーク大事そうだな〜と思いますよね？そのため初めにネットワークの話を始めます．
クラウドでシステムを構築する際に避けて通れないのが「VPC」である．でも，「ネットワークの知識が乏しい」「何から始めればいいかわからない」という方も多いのではないでしょうか．この記事では、ネットワークの基礎からAWS VPCの実践的な使い方まで，図解とともにわかりやすく解説していきます．

# シリーズ IAM AWS User クラウドサービスをフル活用しよう！
**Part1** バックエンドとは何なのか？クラウドコンピューティングとバックエンド開発の関係性を知ろう！

https://qiita.com/JavaLangRuntimeException/items/371a334f5a6e07035db5

**番外編1** PrivateSubnet上のRDSに踏み台EC2のSSHトンネル経由でローカルからアクセスする方法

https://qiita.com/JavaLangRuntimeException/items/3a716d9fb59a632af3bd

**番外編2** VPC作成時にCIDRブロックを指定するのはなんで？

https://qiita.com/JavaLangRuntimeException/items/f5151fe3f3a9789f5c7c

# 他のシリーズ記事
**AWS UserのGCP浮気日記**
GCPの様子をAWSと比較して考えてみるシリーズ

https://qiita.com/JavaLangRuntimeException/items/527d99e774165a763180

**チートシート**
様々な言語，フレームワーク，ライブラリなど開発技術の使用方法，基本事項，応用事例を網羅し，手引書として記載したシリーズ

https://qiita.com/JavaLangRuntimeException/items/f038fbaccdd92fb0308a

> この記事はSQLのチートシートで，インフラ触るエンジニアならぜひ知っておいた方がいい言語(?)です．
git/gh，lazygit，docker，vim，typescript，プルリクエスト/マークダウン，ステータスコード，ファイル操作，OpenAI AssistantsAPI，Ruby/Ruby on Rails のチートシートがあります．以下の記事に遷移した後，各種チートシートのリンクがあります.

**TypeScriptで学ぶプログラミングの世界**
プログラミング言語を根本的に理解するシリーズ

https://qiita.com/JavaLangRuntimeException/items/cadf49bb419076819963

**情報処理技術者試験合格への道[IP・SG・FE・AP]**
情報処理技術者試験に出題されるコンピュータサイエンス用語の紹介や単語集

https://qiita.com/JavaLangRuntimeException/items/991be402099542ccb936

**Project Gopher: Unlocking Go’s Secrets**
Go言語や標準ライブラリの深掘り調査レポート

https://qiita.com/JavaLangRuntimeException/items/dc45b412d3fbd2ccb9e8


# クラウドコンピューティングとは
![スクリーンショット 2024-11-21 21.44.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/6a5b23a2-2068-249d-8ef3-2a399367975c.png)

クラウドを一言で表すと「**必要な時**に**必要なだけ**，**低価格**でITリソースを適用/利活用すること」．

![スクリーンショット 2024-11-21 21.46.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/e6f91b48-f8ea-8264-f51d-45d792b6aa05.png)
対して，オンプレミスは自社でハードウェアとソフトウェアを管理し，自前のシステムを構築する運用手段と言える．

![スクリーンショット 2024-11-21 21.47.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/46fa81e4-c347-0cef-4647-6c742529b3b0.png)

オンプレミスだと初期投資のみで済んだり，自社内のセキュリティで完結でき，既存の自社システムとの互換性を保ちやすい利点がある．しかし，スケーリング(リソースをトラフィック数に応じて動的配置すること)が難しかったり，初期投資の額が高いデメリットがある．
クラウドだと初期投資がかからず，従量課金声で，ベンダーのサービス内容に依存できる．また，自動でスケーリングでき，必要に応じてリソースの大きさや数を選べる．

それではクラウドを始めるにあたって必要なネットワークの知識を紹介する．

# ネットワークとは？
私たちが普段使うパソコンやスマートフォンは，単体では限られた機能しか持ちません。しかし，これらの機器をネットワークで接続することで，情報の共有やサービスの利用が可能になる．

![スクリーンショット 2024-11-17 18.15.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3df33d0d-ef17-8361-bc9f-c6d579a780ed.png)

## 検索してからWebサイトを表示するまで
上記で説明したようにパソコン単体ではGoogle.comをはじめとしたWebページにアクセスできない．ご存じのとおり，みなさんのパソコンには当然Googleはいませんし，このQiita記事もないですよね？なぜ今現在GoogleやQiitaは閲覧できるのでしょうか？

例えばみなさんがブラウザにqiita.comとアクセスした場合の流れを考えてみましょう．

![Wondershare Uniconverter 15_000006.GIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/954ed488-cab3-bc95-25df-857d52aa92f8.gif)



:::note info
**【用語説明】**
- **DNS (Domain Name System)**: ドメイン名とIPアドレスを紐付けるシステム
- **IPアドレス**: インターネット上の機器を識別する番号
- **TCP (Transmission Control Protocol)**: データ通信の信頼性を確保するプロトコル
- **HTTP (HyperText Transfer Protocol)**: Webサーバー(Qiitaサーバー)とクライアント(PC)でデータをやりとりするプロトコル
- **DOM (Document Object Model)**: HTMLをツリー構造で表現したもの

> TCP，HTTP，IPアドレスは後に詳しく説明します．
:::

**1. ブラウザでの入力処理**
- ユーザーがブラウザのアドレスバーに「qiita.com」と入力する.
- ブラウザはこのドメイン名をIPアドレスに変換する必要があると判断する.

> 宛先のWebサーバー(Qiitaサーバー)の情報を得るには宛先のIPアドレスを知る必要がある

**2. DNS解決プロセス**
宛先のIPアドレスを知るためにPCはまずルートDNSサーバーに問い合わせを行う.

**2-1. NSレコードによる権威DNSサーバーの特定**
- ルートDNSサーバー → TLDサーバーのNSレコードを返す
. (ルート) → .com のNSレコード
- TLDサーバー → 権威DNSサーバーのNSレコードを返す
.com → qiita.com のNSレコード

**2-2. Aレコードによる最終的なIPアドレスの解決**
- 権威DNSサーバー → ドメインのAレコード（IPアドレス）を返す
qiita.comの権威DNSサーバー → qiita.comのAレコード

:::note info
**【用語説明】**
- **ルートDNSサーバー**: インターネットの最上位に位置するDNSサーバー
- **TLD (Top Level Domain)**: .comや.jpなどのドメインの種類を表す部分
- **権威DNSサーバー**: そのドメインの正式なIPアドレス情報を持つサーバー

**【DNSレコードとは】**
DNSサーバーに登録される様々な種類の情報のことで，ドメインに関する設定を定義する．


**1. Aレコード (Address Record)**
- ドメイン名とIPv4アドレスを紐付けるレコード
- 例: qiita.com → 54.64.123.456(この値は適当です)

**2. NSレコード (Name Server Record)**
- ドメインのDNSサーバーを指定するレコード
- そのドメインのDNS情報を管理する権威DNSサーバーを示す
- 例: qiita.com → ns1.qiita.com
:::

**3. TCPコネクション確立**
宛先のIPアドレスがわかればその宛先に対して3-wayハンドシェイクと呼ばれる手順で接続を確立する
 1. クライアントがSYNパケットを送信
 2. サーバーがSYN+ACKパケットで応答
 3. クライアントがACKパケットを返してコネクション確立

:::note info
**TCP (Transmission Control Protocol) とは**
インターネット上でデータを確実に送受信するために使用される通信プロトコル（規約）

**【特徴】**
**1. コネクション型通信**
- 通信開始前に接続を確立する（3-wayハンドシェイク）
- 通信終了時に接続を切断する
- 送信相手が特定されている状態で通信を行う

**2. 信頼性の高い通信**
- データの到着確認を行う
- 欠落したデータの再送を行う
- データの順序を保証する
- 重複したデータを破棄する

**3. フロー制御**
- 受信側の処理能力に合わせて送信速度を調整する
- バッファオーバーフローを防止する

**【3-wayハンドシェイクの詳細】**
**1. 接続開始（SYN）**
- クライアントがサーバーに接続要求を送信
- SYNフラグを立てたパケットを送る
- 初期シーケンス番号を含む

**2. 接続応答（SYN+ACK）**
- サーバーがクライアントに応答を返す
- SYNとACKフラグを立てたパケットを送る
- サーバーの初期シーケンス番号を含む
- クライアントのシーケンス番号に1を加えた値を含む

**3. 接続確立（ACK）**
- クライアントが最終確認を送信
- ACKフラグを立てたパケットを送る
- サーバーのシーケンス番号に1を加えた値を含む

**【用語説明】**
- **プロトコル**: 通信規約・手順を定めたルール
- **パケット**: データを分割して送受信する単位
- **シーケンス番号**: データの順序を管理するための番号
- **バッファ**: データを一時的に保存する場所
- **フラグ**: 通信の状態を示す目印

**【TCPの用途例】**
- Webブラウジング（HTTP通信）
- メール送受信（SMTP, POP3, IMAP）
- ファイル転送（FTP）
- リモート制御（SSH）
:::

**4. HTTPによる通信**
- クライアントがHTTPリクエストをサーバーに送信する.
- サーバーがHTTPレスポンスを返す.
- レスポンスにはHTML, CSS, JavaScriptなどのリソースが含まれる.

**5. ブラウザでのレンダリング処理**
- HTML文書の解析を行う.
- DOMツリーを構築する.
- CSSスタイルをDOMツリーに適用する.
- 要素の配置を計算するレイアウト処理を行う.
- 最終的な画面描画を実行する.

これらの一連の処理により，ユーザーはWebページの内容を閲覧することができる.

## IPアドレスとは？
インターネット上の機器を識別するために使われるのが「IPアドレス」．現実世界に例えると，住所や電話番号のような役割を果たす．

> ここではIPv4の話に絞ります

![スクリーンショット 2024-11-17 18.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3efc2668-fd33-a555-5676-f55e5a65082b.png)


IPアドレスは4つの数字の組み合わせで，各数字は0から255までの値をピリオドで区切られて表される．

例：192.168.1.10

:::note info
最大が255である理由は2進数にした時各数字は8ビットで表現されるため，全て1は符号なし2進数で255を表すためです
:::

**【プライベートIPアドレスとは】**
- ローカルネットワーク内でのみ使用できる特別なIPアドレス
- インターネットでは使用できない（ルーティングされない）アドレス
- RFC1918で規定されている

**【プライベートIPアドレスの範囲】**

**1. クラスA**
- 範囲: 10.0.0.0 ～ 10.255.255.255
- プレフィックス: 10.0.0.0/8
- 利用可能IPアドレス数: 約1677万個（16,777,214個）
- 主な用途: 大規模ネットワーク（企業や大学など）

:::note info
**プレフィックス長とは**
IPアドレスの各ビットはネットワーク部とホスト部で表せられる．

**【ネットワーク部】**
ネットワークを識別するためのアドレス部分．同じネットワーク内の機器は，すべて同じネットワーク部を持つ．ルーターはこの部分を見て，パケットの転送先を判断する．プレフィックス（/8など）で指定された先頭ビットまでが，このネットワーク部にあたる．

> プレフィックス（/8)は255.0.0.0.0とも表せられる．

**【ホスト部】**
各機器を識別するためのアドレス部分．同じネットワーク内で重複しない値を割り当てる．ネットワーク管理者が自由に設定でき，プレフィックス以降のビットがこのホスト部にあたる．

**【ネットワークアドレスとブロードキャストアドレス】**
ホスト部の全ビットが0だとこのプライベートIPアドレスは**ネットワークアドレス**を表すことになり，ネットワークの情報を表す．
また，ホスト部の全ビットが1だとこのプライベートIPアドレスは**ブロードキャストアドレス**を表し，このネットワークに属するすべてのホストを表す．
そのため割り当てられるホストは2の24乗からネットワークアドレスとブロードキャストアドレスを引いたものとなる．

![スクリーンショット 2024-11-18 0.22.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/4d69e667-9f15-37b4-0ddc-e645fd647758.png)
:::

**2. クラスB**
- 範囲: 172.16.0.0 ～ 172.31.255.255
- プレフィックス: 172.16.0.0/12
- 利用可能IPアドレス数: 約104万個（2^20 - 2 = 1,048,574個）
- 主な用途: 中規模ネットワーク

**3. クラスC**
- 範囲: 192.168.0.0 ～ 192.168.255.255
- プレフィックス: 192.168.0.0/16
- 利用可能IPアドレス数: 約6.5万個（2^16 - 2 = 65,534個）
- 主な用途: 小規模ネットワーク（家庭やオフィスなど）



## サブネットとは？
大きなネットワークを小さく分割したものを「サブネット」と呼ぶ．

イメージはこんな感じで，全体の組織で使えるホストををそれぞれの部署ごとに小さく分割しホストを割り当てるような感覚．
![スクリーンショット 2024-11-17 18.16.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/3aaca1d3-987c-6e17-f210-0b16a5cd523a.png)

**サブネットを使用する利点**

- セキュリティの向上
- ネットワークの管理がしやすくなる
- トラフィックの分離が可能


![画面収録 2024年11月20日.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/0adb2368-0a76-98ca-eb3c-ff0a392b5e1c.gif)

上のネットワークの構成を考えてみる．

**ネットワークの全体像**

まず, このネットワークは192.168.1.0/24というプライベートIPアドレス空間を使用している. このアドレス空間は, クラスCのプライベートアドレス範囲に属しており, 小規模から中規模の企業ネットワークで一般的に使用される設計である.

**サブネット1: クライアントネットワーク**
- **ネットワークアドレス** 192.168.1.0/25
- **使用可能IPアドレス範囲** 192.168.1.1 ~ 192.168.1.126
- **ブロードキャストアドレス** 192.168.1.127

このサブネットには主にクライアントPCが配置されており, PC1とPC2が接続されている. クライアントPCには192.168.1.10と192.168.1.20付近のIPアドレスが静的または動的に割り当てられる.

**サブネット2: サーバーネットワーク**
- ネットワークアドレス: 192.168.1.128/25
- 使用可能IPアドレス範囲: 192.168.1.129 ~ 192.168.1.254
- ブロードキャストアドレス: 192.168.1.255

このサブネットには主にサーバーが配置されており, Server1とServer2が接続されている. サーバーには192.168.1.130と192.168.1.140付近のIPアドレスが割り当てられている.

**デフォルトゲートウェイの役割**

ネットワークの中心には, IPアドレス192.168.1.1を持つデフォルトゲートウェイが配置されている. デフォルトゲートウェイはネットワーク内のデバイスが自分のサブネット（ネットワークセグメント）外にある他のネットワークやインターネット上のデバイスと通信する際に、データを送るための中継役となるルーターやネットワークデバイスのこと

- **デフォルトゲートウェイの役割と必要性**

    **サブネット外への通信**
    
    コンピュータやデバイスは，同じサブネット内の他のデバイスとは直接通信できる．しかし，異なるサブネットやインターネット上のデバイスと通信するためには，デフォルトゲートウェイを経由する必要がある．
    
    **データのルーティング**
    
    デバイスが送信するデータ（パケット）の宛先が自分のサブネット外である場合，そのパケットはデフォルトゲートウェイに送られる．デフォルトゲートウェイは，パケットを適切な経路に転送し，最終的な目的地まで届ける．
    
- **動作の仕組み**

    **ルーティングテーブル**
    
    各デバイスにはルーティングテーブルがあり,どのネットワークにパケットをどの経路で送るかが記載されている．デフォルトゲートウェイは，このルーティングテーブルにおける「デフォルトルート」として設定される．
    
    **デフォルトルート**
    
    デバイスがパケットの宛先を判別した際，ルーティングテーブルにその宛先への明確なルートがない場合，デフォルトルートが使用される．このデフォルトルートの先がデフォルトゲートウェイである．

- **サブネット間での通信はどうなるのか?**

    **同じサブネット内での通信**
    
    デバイスA（IPアドレス: 192.168.1.10）がデバイスB（IPアドレス: 192.168.1.20）にデータを送る場合，デフォルトゲートウェイを経由せずに直接通信する．
    
    **異なるサブネットへの通信**
    
    デバイスA（IPアドレス: 192.168.1.10）がデバイスC（IPアドレス: 192.168.2.10）にデータを送る場合，デバイスAはデフォルトゲートウェイにパケットを送る．ゲートウェイはパケットを適切な経路にルーティングし，デバイスCに届ける．

:::note info
**デフォルトゲートウェイとサブネット1のIPアドレスが重複している？**
192.168.1.1というIPアドレスはサブネット1の始めのIPアドレスでもあり，デフォルトゲートウェイのIPアドレスでもある．重複していてもいいのか？？？ 結論無問題である．その理由は以下の通りである．

- **一貫性と分かりやすさ**

    **予測可能性**
    常にサブネットの最初のアドレスをゲートウェイにすることで，ネットワーク管理者やユーザーはゲートウェイのアドレスを簡単に予測できる．

- **管理の容易さ**

    **ドキュメンテーションの簡素化** 
    ゲートウェイのアドレスが一貫していると，ネットワーク図や設定資料の作成が簡単になる．
    
    **トラブルシューティングの効率化**
    問題が発生した場合に，ゲートウェイの場所をすぐに特定できるため，迅速な対応が可能．

- **アドレスの整理**

    **アドレス競合の防止**
    サブネット内で最初（または最後）のアドレスをゲートウェイ用に予約しておくことで，他のデバイスが誤って同じアドレスを使用するリスクを減らせる．
    
    **IPアドレスの計画**
    アドレスの割り当てが体系的になるため，ネットワークの拡張や変更が容易になる．
:::

# AWS VPCとは？(VPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイント)
![スクリーンショット 2024-11-21 19.05.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/cc20a241-c3b3-4368-944e-d8c1ec2c39af.png)

![スクリーンショット 2024-11-21 21.41.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/c6d6cf93-ed7a-40bb-0d13-6917d1845f6c.png)


ここまでネットワークの基礎を説明してきたが，これらの概念はAWS VPCでも同じように使われる．
AWSのVPC（Virtual Private Cloud）は，ユーザーが自分専用の仮想ネットワーク環境をクラウド上に構築できるサービス．このVPC内でサブネットやゲートウェイを設定することで，ネットワークの細かな制御やセキュリティの強化が可能になる．
VPCは以下のイメージで構成される．

![スクリーンショット 2024-11-17 18.16.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/f3702fed-517e-2cbc-6ba3-5bc54c0e8035.png)

**AWSのVPCコンポーネント詳細**
AWSVPCは以下の4つでVPCそのものと以下の4つで構成される．
以下の画像は基本的なVPCの構成をAWSアーキテクチャ図で表現したものである．

- **1. サブネット**
![スクリーンショット 2024-11-21 19.04.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/902050de-48e9-b45d-8551-3d08f8c71c33.png)
![スクリーンショット 2024-11-21 21.42.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/4da92d51-ed37-ef97-9119-65417de3b84e.png)


**パブリックサブネット**
インターネットゲートウェイ(IGW)を介してインターネットに直接アクセス可能である.
パブリックIPアドレスを持つリソースを配置できる.
Webサーバーなど**外部公開が必要なリソース**を配置する.

**プライベートサブネット**
インターネットへの直接アクセスは不可である.
プライベートIPアドレスのみを使用する.
データベースや内部APIサーバーなど，**セキュリティが重要なリソース**を配置する.

- **2. インターネットゲートウェイ (IGW)**
![スクリーンショット 2024-11-21 19.04.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/58afd4ab-0e16-60d2-e744-d76626e2f38d.png)


VPCとインターネットを接続する仮想ルーターである.
パブリックサブネットのリソースがインターネットと通信するために必須である.
双方向の通信を可能にし，インバウンドとアウトバウンドのトラフィックを処理する.

- **3. ルートテーブル**
![スクリーンショット 2024-11-21 19.03.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/e308abc7-23e7-ac1f-f969-29264af6f096.png)

    ネットワークトラフィックの経路を定義する設定テーブルである.
    送信先IPアドレスの範囲とターゲット（次のホップ）を指定する.
    サブネットごとに異なるルーティング設定が可能である.

- **4. VPCエンドポイント**
![スクリーンショット 2024-11-21 19.03.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/8daf07d0-95c1-91c4-ddb4-739695e6fb8e.png)
AWSのVPC（Virtual Private Cloud）内からインターネットを経由せずに，AWSのサービスやVPCエンドポイントサービス（他のVPCでホストされているサービス）にプライベートに接続するための機能．

> VPCエンドポイントの使用により，データがインターネットに露出することなく，安全かつ効率的にAWSサービスと通信できる．

VPCエンドポイントは以下の2種類が存在する．

**インターフェイスエンドポイント**
ENI（Elastic Network Interface）を作成し，プライベートIPアドレスを割り当てる.
S3(ストレージサービス)やDynamoDB(キーバーリューストア型のデータベース)を除く多くのAWSサービスで使用する.
PrivateLink技術を使用して接続を確立する.

**ゲートウェイエンドポイント**
S3とDynamoDBに特化したエンドポイントである.
ルートテーブルにエントリを追加して使用する.
インターフェイスエンドポイントより低コストである.

- **5. NAT（Network Address Translation）ゲートウェイ**
![スクリーンショット 2024-11-21 20.12.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/0deda65e-4973-3ab1-c5d7-5ca88e0d7b47.png)
プライベートサブネット内のリソースがインターネットにアクセスするためのサービス．プライベートサブネットに配置されたインスタンスがインターネットから直接アクセスされないようにしつつ、外部へのアウトバウンド通信を可能にするが，外部からのインバウンド通信は許可されない．

:::note info
**インバウンド通信（Inbound Traffic）とは**
外部からネットワークやサーバーに向かう通信．例えば，ユーザーがブラウザからウェブサイトにアクセスするリクエスト．
**アウトバウンド通信（Outbound Traffic）とは**
ネットワークやサーバーから外部に向かう通信．例えば，サーバーが外部APIにリクエストを送信したり，ソフトウェアをアップデートするための通信．
:::


**AWSVPCでのIPアドレス割り当て方法**

AWSではネットワークのIPアドレスの割り当てに，**CIDR（Classless Inter-Domain Routing)** を用いる．

:::note info
**CIDRとは**
IPアドレスの割り当てとルーティングを効率的に行うための方法で，従来のクラスA，B，Cといった固定的なネットワーククラスに依存しない柔軟なIPアドレスの指定方法
:::

CIDRブロックは，このCIDR方式を用いて表現されるIPアドレスの範囲を示す．CIDR表記では，IPアドレスとサブネットマスクの長さを組み合わせてネットワークの範囲を指定する点は従来と同じである．
AWSでは，VPCのCIDRブロックは **/16から/28** まで指定可能．そのため，**/8のCIDRブロックはVPCに割り当てられない**．

> VPC を作成するときに、その VPC の IPv4 CIDR ブロックを指定する必要があります。許可されるブロックサイズは、/16 ネットマスク（65,536 個の IP アドレス）から /28 ネットマスク（16 個の IP アドレス）の間です。(AWS公式より)

以下の画像はAWSでVPCのみを作成する場合のマネジメントコンソールの画像である．
![スクリーンショット 2024-11-21 19.05.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/cc20a241-c3b3-4368-944e-d8c1ec2c39af.png)

:::note info
**AWSマネジメントコンソールとは** 
シンプルで直感的なウェブベースのユーザーインターフェイスからAWS にアクセスして管理できる
:::

![スクリーンショット 2024-11-20 10.26.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/909c15ca-7d07-0ab7-5574-c4e526ebe7e4.png)

VPC以外にもIGW，パブリックサブネット，プライベートサブネット，ルートテーブル，VPCエンドポイントの作成まで同時に行うこともできる．
![スクリーンショット 2024-11-21 19.27.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/c74192a3-0a28-6c3b-da0f-66463ac52f82.png)

VPCなどを選択すると以下のような画面になる．
![スクリーンショット 2024-11-21 9.48.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/09a37694-a1a6-b26b-614d-08ebb6dfd583.png)

- **IPv4 CIDR ブロック**
IPv4 CIDR ブロックはVPCの規模で適切な値を指定する．AWSVPCでは10.0.0.0/16 または 10.0.0.0/24を指定することが多い．

- **IPv6 CIDR ブロック**
IPv6 CIDRブロックとは，IPv6アドレスの範囲を表す表記方法であり，IPv4のCIDRと同様に「ネットワークアドレス」と「プレフィックス長（サブネットマスクのビット数）」で構成される．IPv6アドレスを使ったネットワーク設計や構築を行う際に必要．

- **テナンシー**
テナンシーはインスタンスを立てるAWSのハードウェアを他のユーザと共有するか，自分だけで専有するか選択すること．AWSでは、以下の2種類のテナンシーが提供されている．

    - **1. Default（デフォルト）テナンシー**
    VPC内のインスタンスは，AWSの共有インフラストラクチャ上で動作し，他のAWSユーザーのインスタンスと物理ホストを共有する．通常，最もコスト効率が良いオプション．
    利用シーンはコストを優先する場合や他のワークロードと物理ホストを共有しても問題ない場合．
    - **2. Dedicated（専有）テナンシー**
    VPC内のインスタンスは，専用ホスト上で稼働し，他のAWSアカウントのインスタンスと物理ホストを共有しない．他のワークロードの影響を完全に排除できる．専用ホスト（Dedicated Host）または専用インスタンス（Dedicated Instance）を使用する．他のAWSユーザーと物理リソースを共有しないため，セキュリティ要件や規制に適合．セキュリティやコンプライアンスの要件が厳しい場合（例: 金融機関や医療業界），他のユーザーと物理ホストを共有したくない場合に使用する

- **アベイラビリティゾーン(AZ)・パブリックサブネット・プライベートサブネットの数**
VPCがあるリージョン内のどのくらいのAZを跨いで設置するかを決められる．マルチAZ構成にするかを選択できる．基本的に各AZに1つずつのパブリックサブネットとプライベートサブネットを設置することになる．
このように2つのAZを用意するとそれぞれに1つずつパブリックサブネットとプライベートサブネットを設置するか...またはパブリックサブネットはなしでプライベートサブネットのみそれぞれのAZに1つずつ設置することも可能だ．
![スクリーンショット 2024-11-21 19.22.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/bd2217e5-227f-c7fa-b9b1-f36b2603471f.png)

- **NAT ゲートウェイ** 
プライベートサブネット内のリソースがインターネットにアクセスできるようにするかどうか選べる．もし設置するなら各プライベートサブネットごとに1つのNATゲートウェイを設置する．

> NAT Gateway は配置しているだけで1時間ごとに 0.062 USD の料金が発生する．さらに，データ処理量 1GB ごとに 0.062 USD の料金も発生する．ここでのデータ処理量は行きの通信・戻りの通信の双方を含む．

- **VPCエンドポイント(S3ゲートウェイ)**
VPC内のインスタンスがS3(ストレージサービス)にアクセスする場合は作成する
※基本は作成する

> ゲートウェイエンドポイント(S3,DynamoDB用のVPCエンドポイント)は追加料金なしで使用することができる．ゲートウェイエンドポイントを経由したS3・DynamoDBとの通信は無料となる．東京リージョンにおけるインターフェイスエンドポイントの料金は，エンドポイントが作成されてから各アベイラビリティゾーンで1時間ごとに0.014USD課金される．

:::note info
**リージョンとアベイラビリティゾーンとは**
まずAWSにはリージョン，アベイラビリティゾーンという概念がある．
![画面収録 2024年11月21日.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/abaf6670-0854-3eea-27df-e2a84b4a3f51.gif)

**リージョン**
AWSは地理的に離れた領域を表すリージョンという概念がある．たとえば日本では東京(ap-northeast-1)と大阪(ap-northeast-3)が存在する
![スクリーンショット 2024-11-21 9.56.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/40820698-b660-f308-573f-0c75cab4907c.png)
他にもこのようなリージョンが存在する．
![スクリーンショット 2024-11-21 9.59.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/543f1bd5-c77e-5e4f-183a-a158901c23a9.png)
各AWSサービスはこのリージョン上で利用することになる．

**アベイラビリティゾーン**
アベイラビリティゾーンはリージョン内の独立した場所である．基本的に可用性の観点からAWSサービスを複数のアベイラビリティゾーンを跨いで利用する場合が多い．これを**マルチAZ**という．これにより東京リージョンの1つのアベイラビリティゾーンに何かしらの障害が起きた場合も他のアベイラビリティゾーンに配置したAWSサービスでシステムを動かし続けることができる．
![スクリーンショット 2024-11-21 10.01.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/0c65efd8-ff67-d937-73bc-9e048200b85e.png)
:::

VPCのみ作成した上で個別でサブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイントを設置することもできる．

マネジメントコンソールの上部の検索欄でVPCと入れ，VPC(独立したクラウドリソース)を選択するとVPC・サブネット・インターネットゲートウェイ・ルートテーブル・NATゲートウェイ・VPCエンドポイントの設定ができる．
![スクリーンショット 2024-11-21 22.06.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/9d3bef72-dbb9-2ad0-5669-6d0b8b9b9d11.png)

**サブネットの作成**
![スクリーンショット 2024-11-21 21.59.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/31bbfa31-8bde-00aa-b5c3-982350ec4931.png)
サブネットを作成するVPCを選択する．
![スクリーンショット 2024-11-21 21.59.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/6f55f4a0-adf5-2192-82ae-631963c462a9.png)
IPv4サブネットCIDRブロックの指定をする．VPCが10.0.0.0/16であると仮定する．
   - **10.0.0.0/16**のVPCは65,536個のIPアドレスを持つため、サブネットごとに細かく分割する。
   - サブネットごとに**10.0.0.0/24**（256 IPアドレス）や**10.0.0.0/26**（64 IPアドレス）などを割り当てる
2パターンの設計例がある．
**具体的な例: AZごとの分割**
VPC全体を2つのアベイラビリティゾーン（AZ）に分割し、それぞれにパブリックサブネットとプライベートサブネットを配置する例を示す。

| **サブネット名**         | **CIDRブロック** | **AZ**          | **用途**                     |
|--------------------------|------------------|-----------------|------------------------------|
| Public Subnet 1          | 10.0.0.0/24     | ap-northeast-1a | Webサーバー（インターネット接続） |
| Private Subnet 1         | 10.0.1.0/24     | ap-northeast-1a | DBサーバー、アプリケーション   |
| Public Subnet 2          | 10.0.2.0/24     | ap-northeast-1b | Webサーバー（インターネット接続） |
| Private Subnet 2         | 10.0.3.0/24     | ap-northeast-1b | DBサーバー、アプリケーション   |

---

**具体的な例: 小規模な環境**
小規模なネットワーク設計では、サブネットをさらに細かく分割することも可能である。たとえば、**/26**（64 IPアドレス）を割り当てると、より多くのサブネットを作成できる。

| **サブネット名**         | **CIDRブロック** | **AZ**          | **用途**                     |
|--------------------------|------------------|-----------------|------------------------------|
| Public Subnet 1          | 10.0.0.0/26     | ap-northeast-1a | 小規模Webサーバー             |
| Private Subnet 1         | 10.0.0.64/26    | ap-northeast-1a | 小規模DBサーバー             |
| Public Subnet 2          | 10.0.1.0/26     | ap-northeast-1b | 小規模Webサーバー             |
| Private Subnet 2         | 10.0.1.64/26    | ap-northeast-1b | 小規模DBサーバー             |


**インターネットゲートウェイの作成**
インターネットゲートウェイは名前を決定して作成するのみ出会えう．パブリックサブネットへの設置は後ほどルートテーブルで行う．
![スクリーンショット 2024-11-21 22.08.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/adb3d5ca-9768-6f06-d26a-9d7c7dd2d6af.png)

**ルートテーブルの作成**
まずルートテーブルの名前とどのVPCのルートテーブルかを選択する．
![スクリーンショット 2024-11-21 22.10.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/b3d99ded-8fdb-99d5-e058-81eddab8125e.png)

作成したらルーティングの設定ができる．「ルートの編集」を選択する．
![スクリーンショット 2024-11-21 22.12.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/4f6c403e-81c2-5718-5146-9319cde7b918.png)


送信先を選択する
1. `0.0.0.0/0`
   - 全てのIPv4アドレス範囲を意味する。通常、インターネットゲートウェイやNATゲートウェイへのデフォルトルートとして使用される

2. `0.0.0.0/8`
   - IPv4アドレス範囲`0.0.0.0`から`0.255.255.255`までの範囲を示す．この範囲は一般的にAWSでは利用されないが，カスタムルーティングで指定されることがある

3. `0.0.0.0/16`
   - IPv4アドレス範囲`0.0.0.0`から`0.0.255.255`までの範囲を示す．同様に特定用途向け

4. `0.0.0.0/24`
   - IPv4アドレス範囲`0.0.0.0`から`0.0.0.255`までの範囲を示す．特定のサブネットや範囲指定に用いる場合がある

5. `0.0.0.0/32`
   - 単一のIPv4アドレス`0.0.0.0`を示す．ピンポイントでのルーティングを指定する際に利用されるが，この特定アドレスは特別な用途がない限りAWSで使われることは少ない

6. `:/0`
   - IPv6における全てのアドレス範囲を示す．インターネットゲートウェイやEgress-Only Internet Gatewayへのデフォルトルートとして使用される

7. `:/16`
   - IPv6アドレス範囲の最初の16ビットを指定．範囲が非常に広いため，特定のルーティングやセグメントに使用されることがある

8. `:/32`
   - 単一のIPv6アドレスを指定．この場合，具体的なエンドポイントや個別アドレスへの通信経路を示すために使われる

9. `:/64`
   - 一般的なIPv6サブネット範囲を示す．このサイズはAWS内でVPCサブネットを作成する際のデフォルトであり，通常のサブネットルーティングに用いられる

![スクリーンショット 2024-11-21 22.14.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2469f40c-2478-12cb-4768-a6142138bf70.png)

VPC内に設置し，ルーティングするサービスを選択する．
![スクリーンショット 2024-11-21 22.12.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/7216d40a-1735-d9d7-0901-c735f637d528.png)


パブリックサブネットのルートテーブルは基本的には**0.0.0.0/0(全てのIPv4アドレス)**を送信先にして，ターゲットは**インターネットゲートウェイ**を選択し，作成済みのインターネットゲートウェイのインスタンスを選択する．
プライベートサブネットのルートテーブルは基本的には**0.0.0.0/0(全てのIPv4アドレス)**を送信先にして，ターゲットは**NATゲートウェイ**を選択し，作成済みのNATゲートウェイのインスタンスを選択する．
![スクリーンショット 2024-11-17 18.21.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/40179a23-e432-2b34-65f0-8a20eb262837.png)

「サブネットの関連付け」を選択し，「サブネットの関連付けを編集」を選択する．その後，このルートテーブルを適用するサブネットを選択する．
![スクリーンショット 2024-11-21 22.22.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/2c366fcd-faf7-af0e-0890-02a9663a31aa.png)

**NATゲートウェイの作成**
名前とNATゲートウェイを設置するサブネットを選択する．ここでNATゲートウェイはサブネット内に設置するインスタンスで，基本的には**パブリックサブネット**に設置する．その後ルートテーブルの設定でプライベートサブネットからパブリックサブネットに設置したNATゲートウェイへの通信のルーティングを行う．

:::note warn
**NATゲートウェイそのものをプライベートサブネットに設置しても意味がない**
1. **NATゲートウェイの役割**
   - NATゲートウェイは、プライベートサブネット内のリソースがインターネットにアクセスできるようにするための中継装置である。
   - NATゲートウェイ自体は、インターネットに接続するためのパブリックIPアドレス（Elastic IP）を持ち、インターネットゲートウェイを経由して通信する。

2. **設置要件**
   - NATゲートウェイは**パブリックサブネット**内に配置する必要がある。これは、NATゲートウェイがパブリックIPアドレスを利用して外部と通信する設計になっているためである。
   - プライベートサブネットに設置された場合、インターネットゲートウェイに接続できず、NATゲートウェイとしての役割を果たせない。

3. **想定される問題点**
   - プライベートサブネット内では、インターネットゲートウェイへの直接アクセスができないため、NATゲートウェイが動作しない。
   - NATゲートウェイのトラフィックが循環するループが発生する可能性がある（例: プライベートサブネット内のリソースから別のプライベートリソースへの不適切な経路設定）。
   - AWS管理コンソールやCLIでエラーが発生することがある。
:::
![スクリーンショット 2024-11-21 22.24.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/a9a66586-4c99-7366-3d7d-65bc50d8f8fa.png)

**VPCエンドポイントの作成**
VPCから直接アクセスするAWSのサービスを選択して作成する．VPCの中に設置するタイプのサービスとVPC外のフルマネージドサーバーレスのサービスがあるのでVPC外のサービスにインターネットを経由せずにアクセスするAWSサービスを選択する．

> ゲートウェイエンドポイント(S3,DynamoDB用のVPCエンドポイント)は追加料金なしで使用することができる．ゲートウェイエンドポイントを経由したS3・DynamoDBとの通信は無料となる．東京リージョンにおけるインターフェイスエンドポイントの料金は，エンドポイントが作成されてから各アベイラビリティゾーンで1時間ごとに0.014USD課金される．

![スクリーンショット 2024-11-21 22.31.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/7ee2090d-1a80-83fc-1d5d-60812be14c94.png)

一旦Part2はここまで．VPC関連のAWSサービスはこのように使います．次は複数のサブネットにトラフィックを分散させるロードバランサーについて説明します！

それではQiitaアドカレ.24企画の今日のクリスマスツリーです．

> 詳しくは[こちら](https://qiita.com/JavaLangRuntimeException/items/1f4a6febf957f522ba45)の記事から

![スクリーンショット 2024-12-08 22.41.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3757442/ced57584-35ba-f569-b047-80a6be19f56e.png)