AWS基礎：EC2とVPCについて

# EC2とVPCについて

## EC2

- EC2起動時に、**ユーザーデータ**を使ってスクリプトを実行できる
- インスタンス起動時の設定を記述することで、自動的にセットアップを行える
- インスタンスにユーザーデータを渡して起動時に実行される処理のことを **ブートストラップ** という

### EC2インスタンスのストレージ

以下を選択することができる。

- **インスタンスストア**
  - 無料で提供される一時的なストレージ
  - インスタンス停止または終了時にデータも削除される
- **EBS（Elastic Block Store）**
  - 永続的なストレージ
  - インスタンス停止後もEC2とは独立したブロックストレジなためデータが保持される
  - バックアップとしてスナップショットをS3に保存できる
  - EC2とは別料金

下記でインスタンスストアとEBSの比較について記載。

#### ストレージオプション

- **Amazon EFS**
  - ファイルシステム型ストレージ
  - 複数のEC2インスタンス間で共有可能
- **Amazon FSx for Windows**
  - Windowsベースのアプリケーションと親和性が高いファイルシステム

### セキュリティグループ

- インスタンスへのトラフィックのアクセス可否を制御する**ファイアウォール機能**

## インスタンスの購入方式

- **オンデマンドインスタンス**
  - 通常のインスタンス（指定なしで起動するとこれになる）
  - 長期契約なし。必要なときに使って時間単位で料金が発生
- **リザーブドインスタンス**
  - 1年または3年の利用契約により、通常より大幅な割引が適用
- **スポットインスタンス**
  - オンデマンドより安価で利用でき、AWS管理用として保持されている未使用のEC2インスタンス
  - 静止状態割引をきかせることが可能

## EBS（Elastic Block Store）

- EC2にアタッチして使うブロックストレージ
- ネットワーク経由で接続され、**永続的**にデータを保存
- デフォルトではインスタンス終了時に削除される設定になっている（`DeleteOnTermination`）
- AZ固有のリソース→AZ内での障害には弱い。他のAZのEC2へのアタッチは不可。セキュリティグループによる通信制御は対象外であり、全ポートを閉じても利用することが可能。
- 基本EC2に複数のEBSを接続することはできるが、EBSを複数のインスタンスで共有することはできない。ただ、**プロビジョンドIOPS（io1 / io2）** のみ複数インスタンスからの同時アタッチが可能な __マルチアタッチ機能__ を備えている
### ストレージタイプの分類

- **ブロックストレージ**
  - 高速・高帯域幅。EBS、インスタンスストアなどEC2にアタッチして活用する
- **オブジェクトストレージ**
  - S3など。高耐久・低コスト
- **ファイルストレージ**
  - EFSやFSxなど。複数EC2でアタッチ可能な共有ストレージ

### EBSとインスタンスストアの比較

| 項目 | インスタンスストア | EBS |
|------|-------------------|-----|
| 永続性 | ×（停止で消える） | ○ |
| 料金 | 無料 | 有料 |
| スナップショット | × | ○（S3へ保存可能） |
| アタッチ可能数 | 1インスタンスのみ | 複数接続可能（マルチアタッチあり） |

## EBSボリュームの種類

| 種類 | 用途・特徴 |
|------|------------|
| **汎用SSD（gp3 / gp2）** | 一般のアプリケーション、小〜中規模DB、開発環境・検証環境など |
| **プロビジョンドIOPS SSD（io1 / io2）** | 高性能要件・マルチアタッチ対応<br>blockexpressの方がより圧倒的なパフォーマンスを誇る|
| **スループット最適化HDD（st1）** | ビッグデータ分析、ログ処理<br>低コストで高いスループット |
| **コールドHDD（sc1）** | ログデータなどアクセス頻度が低いアーカイブ、バックアップ向け |
| **マグネティック** | 現在は非推奨（旧世代） |

※ スループット：一定時間あたりのデータ処理能力やデータ転送量を表すもの

参考： [Amazon EBS ボリュームの種類](https://qiita.com/ouerika/items/a9a0647bd8ba432c1806)

### スナップショット

- EBSのバックアップ機能
- **S3バケット**に保存される
- ブロックレベルで圧縮 → 圧縮後の容量に課金
- EBSボリュームを他の **AZ やリージョンへ復元**可能（リージョン内でスナップショットは一意）
- 他アカウントへ共有するには権限設定が必要
- スナップショットの作成時には整合性を保つためEBSを静止することが推奨されているものの、いつでもバックアップを実行可能でEBSに影響をあたえない
- **Amazon DLM** によりスナップショットの自動作成をスケジューリングできる
- AMIにはEBSのスナップショットの内容も含まれているため、復元したい場合はAMIのみで良い
- DeleteOnTermination属性は、デフォルトでは有効になってるがここの設定を非有効化するとEC2インスタンスを削除してもEBSボリュームのみ保持することが可能
- EBSのステータスの表示について「OK」はパフォーマンスが想定通り、「warning」はボリュームのパフォーマンスが想定を下回るもしくはかなり下回ってる、「impaired」は致命的な影響を受けているもしくは判定不能などである

### EBSの暗号化（KMS）

暗号化にはKMSの設定が必須。

- **KMS（Key Management Service）** の **CMK（カスタマーマスターキー）** を使って暗号化
- 暗号化される対象：
  - 保存データ
  - インスタンスとの転送データ
  - スナップショットや復元ボリューム

### RAID構成

パフォーマンス向上の目的で`RAID 0`、冗長性を高める目的で`RAID 1`の構成が実施される。
- **RAID 0（ストライピング）**：複数ボリュームを統合して高速化
- **RAID 1（ミラーリング）**：同時書き込みにより冗長性向上（片方がダメでももう片方にデータが残る）


### サブネットとサブネットマスク

- 設定可能なサブネット範囲：`/18, /20, /22, /24, /26, /28`
  - 右に行くほどIP数は少ないが細かく分割可能
- サブネットマスクにより、同一ネットワーク内の範囲を決定
- `/28`が最小、`/16`が最大。それ以外はエラー
- AWS側で管理用に設定されており使用できない5つのIPアドレスあり（例：/24の場合`.0`, `.1`, `.2`, `.3`, `.255`）

---

# VPC（Virtual Private Cloud）

- AWS上に**ユーザー専用の仮想ネットワーク**を構築できる（カーブアウト）
- **1リージョンにつき最大5つ**まで作成可能（申請により条件増加可）
- **リージョンをまたいでの作成は不可**
- デフォルトで各リージョンに1つずつVPCとサブネットが自動作成される

## パブリック／プライベートサブネットの違い

| 種類 | 特徴 |
|------|------|
| **パブリックサブネット** | IGW（インターネットゲートウェイ）にルートされている |
| **プライベートサブネット** | 外部アクセスが不可。NATゲートウェイ経由で外部通信が可能 |

- IGWは1VPCに1つ作成可能
- サブネットはAZ（アベイラビリティゾーン）を指定して作成する
- ルーティングを0.0.0.0でIGWに紐づけて設定することによって、すべての通信をインターネットに送られる
- サブネットをVPCのコンソール画面で作成すると、プライベートサブネットが生成される

## ネットワーク制御の仕組み

| 制御単位         | 制御内容                      | 主な役割                  |
| ------------ | ------------------------- | --------------------- |
| **サブネット単位**  | ネットワークACL | 許可・拒否を設定可  |
| **インスタンス単位** | セキュリティグループ                | インバウンド・アウトバウンドの通信許可管理 |

- ネットワークACLはステートレスで番号順にルール適用、許可・拒否両方設定可能
- セキュリティグループはステートフルで、許可のみ設定

## VPCエンドポイント

インターネットを経由せずにVPC内からVPC外のリソースへ安全にアクセスする際に利用する仕組み。
通常はエンドポイントを使用しないでアクセスしようとした場合、インターネットを介しているためセキュアじゃない。

VPCエンドポイントを作成することでS3にアクセスすることができたりする。

- __ゲートウェイ型エンドポイント__ ：S3、DynamoDBのみ対象・無料
サブネットに特殊なルーティングを設定してVPC内部から直接外のサービスを通信。
エンドポイントポリシーを設定してアクセス制御。

- __プライベートリンク型エンドポイント__ ：多くのサービス対象（S3も対応可）・有料
IPアドレスを介してトラフィックを制御。
サブネットにエンドポイント用のプライベートIPアドレスを生成し、DNS名前解決により通信。
セキュリティグループを設定してアクセス制御。

## VPC内のDNS設定

VPC内で起動したインスタンスがパブリックIPアドレスを利用するためにはDNSホスト名の取得が必要。

- enableDnsSupport：VPC内でDNS名前解決が有効化できるか（サポートされているか）を示す
- enableDnsHostname：インスタンスにパブリックDNS名を付与するかどうかを示す

DNS名前解決自体はAWSのRoute53が行っており、これらの設定でVPC内で使えるようにするためのサービス。

## VPCピアリング

異なるVPC間を接続する仕組み。

同一／異AWSアカウント間、リージョン間（制限あり）で利用可能。

`トランジットゲートウェイ`を真ん中にもってきてhubにすることで複数のVPC等を接続させることが可能。

また、VPCピアリングと異なる __異なるVPC間のサービス同士をプライベートIP経由で安全に接続できる仕組み__ の`AWS PrivateLink`というサービスもある。

### VPCピアリングとAWS PrivateLinkの違い

| 構成要素         | VPCピアリング            | AWS PrivateLink                                 |
| ------------ | ------------------- | ----------------------------------------------- |
| **通信経路**     | 2つのVPC間を直接接続        | VPC内のENI経由でサービスにアクセス |
| **アクセス範囲**   | ピアリングVPC間の全てのリソース   | 特定のサービス・エンドポイントのみ                               |
| **接続の方向性**   | 双方向                 | 基本的に一方向（クライアント→サービス）                            |
| **トラフィック制御** | VPCのルートテーブルで制御      | エンドポイントごとのセキュリティグループで制御                         |
| **利用例**      | 自社VPC間の全般的な通信、VPN代替 | SaaSサービスへの安全な接続、特定サービスの利用                       |


## オンプレミス環境との接続について

| 接続方式               | 特徴              | メリット・デメリット              |
| ------------------ | --------------- | ----------------------- |
| **AWS VPN**            | インターネット経由のセキュアな接続 | 導入コスト低、設定簡単／信頼性は専用線より劣る<br>オンプレミス環境からAWSプライベートネットワークへのVPN接続を作成するものと、クライアント端末からの接続を安全にするものとがある |
| **AWS Direct Connect** | オンプレミス環境からAWS環境への専用線による物理接続      | 高信頼・高品質  |

- AWS Direct ConnectはDirect Connectロケーションに物理的に自社のオンプレ環境を接続することでAWS環境との接続を実現する
- 複数リージョンにネットワークを専用線接続させたい場合は、ダイレクトコネクトゲートウェイを利用する


## VPN CloudHub

- 複数拠点のサイト間VPN接続をまとめて管理し、安全なサイト間通信を実現する機能
- オンプレミスの複数拠点をAWS VPN経由で繋ぎたい場合に便利