EC2の仕組みと構成要素を理解する

## はじめに
前回の記事「AWSウェブサーバーの構成要素について理解する」では、AWSのウェブサーバーを構成する様々な要素について概要を紹介しました。

https://qiita.com/ARISA1115/items/590d38210548ae15272e

今回は、その中核を担うEC2（Elastic Compute Cloud）について掘り下げていきます。

## EC2とは
EC2インスタンスは、AWSが提供する仮想サーバーサービスです。
ユーザーは必要なときにコンピューティングリソースを利用し、
必要がなくなれば停止または終了することで、柔軟にリソースを管理できます。
EC2インスタンスは、Webサーバー、アプリケーションサーバー、データベースサーバー
など、さまざまな用途に利用できます。

## EC2を使うとどんないいことがある？
- #### 柔軟性
    -   サーバーをオンデマンドで起動・停止でき、必要がなくなればすぐ停止または終了することが可能
  
- #### 拡張性（スケーラビリティ）
    -  サーバーのスペックアップや台数の増加が容易のため、トラフィックが急増しても
遅延（レイテンシ）やエラーが発生しないようにできる
    - ビジネスの成長に合わせて段階的に拡張できるため、初期の過剰投資を避けられる

- #### 従量課金制
    -  使った分だけ支払う仕組みで、初期投資が少なく済む

- #### 運用管理の手間を削減
    -   物理サーバーのような機器メンテナンスや設置場所確保が不要
    -   ブラウザから簡単に管理することができ、複雑な設定も自動化することができる

## EC2の構成要素

EC2の構成は以下のような要素で成り立っています：
- ### インスタンスタイプ
    - CPUやメモリ、ストレージ、ネットワーク性能などを用途に応じて
    選択可能なサーバーのスペック種類
    - 一般用途向け（汎用）、計算処理向け、メモリ最適化型など様々なタイプが
    用意されている

- ### AMI（Amazon Machine Image）
    -  EC2を起動するためのテンプレートとなる「仮想マシンのイメージ」
    -  Windows、LinuxなどOSや、ミドルウェアがプリインストールされた
    イメージを選択することが可能
    - 自分で構築したサーバー環境をAMIとして保存し、複製することが可能

- ### EBS（Elastic Block Store）
    -  EC2に接続されるストレージ（＝ハードディスクのようなもの）
    -  インスタンスを停止・終了しても、EBSボリュームのデータは保持される
    -  スナップショット（バックアップ機能）があり、障害時の復旧に使用可能
    -  暗号化機能により、データを保護することができる

- ### セキュリティグループ（SG：Security Group）
    -  EC2インスタンスへの通信を制御するファイアウォール
    -  どのポートやプロトコルを許可するか設定可能
    -  どの場所・どのコンピュータ（送信元IPアドレス）からアクセスできるかを制限できる

 #### 構成の流れ
 1. **インスタンスタイプを選択**
     - サーバーのスペック（CPUコア数、メモリ容量、ネットワーク性能など）を決定
     - 用途に応じて適切なインスタンスタイプを選択する
     （例：t2.microは小規模用途、m5.largeは中規模用途）

 1.  **AMIを選択**
      - 使用するOSとソフトウェア環境を決定（Windows、Linux、カスタムAMIなど）
      - パブリックAMI、コミュニティAMI,または独自に作成したAMIから選択

 1. **EC2を起動**
     - 選んだインスタンスタイプとAMIで実際にサーバーを起動する

 1. **EBSをアタッチ**
      - 必要に応じて追加のストレージボリュームを接続する
      - 汎用SSD、プロビジョンドIOPSなど用途に応じたEBSタイプを選択
      - 必要なストレージ容量を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3958955/b5ede4a1-a5cd-4c43-9cc2-cf12e4df869b.png)

## 構成要素の詳細

### インスタンスタイプ
以下に、種類と用途についてまとめました：

| ファミリー　　　　　| タイプ例 | 特徴 | 主な用途 |
|---------|--------|------|--------|
| **T型** | t2.micro, t3.small | バースト可能な低コストインスタンス | 開発環境、小規模Webサイト、バッチ処理 |
| **M型** | m5.large, m6i.xlarge | バランスの取れた汎用インスタンス | 中規模Webサーバー、アプリケーションサーバー |
| **C型** | c5.large, c6i.xlarge | 計算最適化 | バッチ処理、科学計算、高トラフィックWebサーバー |
| **R型** | r5.large, r6i.xlarge | メモリ最適化 | データベース、キャッシュサーバー、リアルタイム分析 |
| **P型** | p3.2xlarge, p4d.24xlarge | GPU搭載 | 機械学習、画像処理、高性能計算 |
| **G型** | g4dn.xlarge, g5.xlarge | グラフィックス最適化 | 動画エンコード、3Dビジュアライゼーション |
| **I型** | i3.large, i4i.large | ストレージ最適化 | NoSQLデータベース、データウェアハウス |
| **D型** | d2.xlarge, d3.xlarge | 高密度ストレージ | 分散ファイルシステム、データ処理 |

AWSのEC2インスタンスの名前は「**ファミリー + 世代 + サイズ**」で構成されています：

- ファミリー（アルファベット）
     - インスタンスの用途や特性を表す
- 世代（数字）
     - インスタンスの世代を表す
     - 数字が大きいほど、新しい世代
- インスタンスのリソース量を表す
     - サイズが大きくなるほど、CPUやメモリが増加

例：t2.micro
- 第2世代のインテルXeonプロセッサ搭載バースト可能タイプ
- t: バースト可能タイプ
- 2: 第2世代
- micro: 小規模サイズ

EC2のインスタンスタイプの数字は基本的にプロセッサの世代を表し、新しい世代ほど性能が向上しています。また、末尾の文字は搭載するプロセッサの種類を示しており、例えば「i」はインテル、「a」はAMD、「g」はAWS独自のARMベースGravitonプロセッサを意味します。

### AMI
AMIの種類について、特徴や用途をまとめました：

| AMIの種類 | 提供元 | 特徴 | 用途 |
|---------|-------|-----|-----|
| **パブリックAMI** | AWS公式 | AWSが提供する標準的なOSイメージ<br>セキュリティパッチが適用済み | 標準的なサーバー環境<br>Amazon Linux、Ubuntu、Windows Server など |
| **コミュニティAMI** | AWS利用者 | コミュニティメンバーが作成・共有<br>特定用途に最適化されたものが多い | 特定のアプリケーション環境<br>開発フレームワーク導入済み環境 |
| **AWS Marketplace AMI** | ソフトウェアベンダー | 商用ソフトウェア搭載<br>ライセンス込みの有料/無料AMI | 商用アプリケーションの迅速な導入<br>特殊な業務システム |
| **カスタムAMI** | 自社/自分自身 | 自分で構築した環境から作成<br>独自の設定や構成が含まれる | 環境の複製・バックアップ<br>会社標準の環境配布 |

AMIは用途に応じて最適なものを選択することで、サーバー構築の時間短縮やリソース活用の効率化につながります。

### EBS
EBSボリュームタイプについて、種類と用途をまとめました：

| ボリュームタイプ | 特徴 | パフォーマンス | 主な用途 |
|--------------|------|-------------|---------|
| **汎用SSD (gp3)** | バランスの取れた性能と価格<br>独立したIOPSとスループット | 最大16,000 IOPS<br>最大1,000 MB/秒 | OS、開発環境<br>中小規模データベース |
| **汎用SSD (gp2)** | gp3の前世代<br>ボリュームサイズに応じた性能 | 最大16,000 IOPS<br>最大250 MB/秒 | 低～中負荷のアプリケーション<br>仮想デスクトップ |
| **プロビジョンドIOPS SSD (io2)** | 最高性能と耐久性<br>99.999%の耐久性 | 最大64,000 IOPS<br>最大1,000 MB/秒 | 重要業務システム<br>大規模データベース |
| **プロビジョンドIOPS SSD (io1)** | io2の前世代<br>高い性能と99.9%の耐久性 | 最大64,000 IOPS<br>最大1,000 MB/秒 | I/O集約型アプリケーション |
| **スループット最適化HDD (st1)** | 低コストで高スループット<br>頻繁なアクセスに最適化 | 最大500 MB/秒<br>最大500 IOPS | ビッグデータ処理<br>ログ処理、データウェアハウス |
| **Cold HDD (sc1)** | 最低コスト<br>アクセス頻度の低いデータ向け | 最大250 MB/秒<br>最大250 IOPS | アーカイブ<br>長期保存データ |

用途や予算に応じて最適なタイプを選択することで、パフォーマンスとコストのバランスを取ることができます。

### セキュリティグループ
セキュリティグループについて、一般的な設定例をまとめました：

| サーバー種類 | 開放ポート | アクセス元 |
|------------|----------|----------|
| **Webサーバー** | HTTP(80), HTTPS(443) | すべてのIP (0.0.0.0/0) |
| **アプリケーションサーバー** | アプリ専用ポート | WebサーバーのSG |
| **データベースサーバー** | MySQL(3306) | アプリケーションサーバーのSG |

適切に設定することで、必要な通信のみを許可し、不正アクセスからEC2インスタンスを保護することができます。

## まとめ
今回は、EC2の仕組みと構成要素について紹介しました。

- **インスタンスタイプ**：
     - サーバーのスペック種類

- **AMI（Amazon Machine Image）**：
     - EC2を起動するためのテンプレートとなる「仮想マシンのイメージ」

- **EBS（Elastic Block Store）**：
     - EC2に接続されるストレージ（＝ハードディスクのようなもの）

- **セキュリティグループ（SG：Security Group）**：
     - EC2インスタンスへの通信を制御するファイアウォール

これらの構成要素を適切に選択・設定することで、最適な仮想サーバー環境を構築できます。

https://aws.amazon.com/jp/ec2/

https://docs.aws.amazon.com/ec2/

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/AMIs.html

https://aws.amazon.com/jp/ec2/instance-types/

https://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/ebs-volume-types.html

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-security-groups.html