メインコンテンツまでスキップ

EC2・コンピューティング

Amazon EC2(Elastic Compute Cloud)は、AWS上でスケーラブルな仮想サーバーを提供するサービスです。必要なときに必要な数のインスタンスを起動し、不要になれば停止・終了できる従量課金モデルにより、物理サーバーの調達や管理から解放されます。


所要時間

約45分

学べること

  • EC2インスタンスの基本概念とライフサイクル
  • インスタンスタイプの選び方
  • ストレージ(EBS・インスタンスストア)の特徴と使い分け
  • Auto Scalingによる自動スケーリング
  • コスト最適化のための購入オプション

前提知識

  • VPC・ネットワーキングの基礎
  • Linux/Windowsの基本的なサーバー操作
  • SSHの基本概念

目次

  1. EC2の概要
  2. インスタンスタイプ
  3. AMI(Amazon Machine Image)
  4. インスタンスのライフサイクル
  5. キーペアとSSH接続 / Session Manager
  6. EBS(Elastic Block Store)
  7. インスタンスストアとEBSの違い
  8. Elastic IP
  9. Auto Scaling
  10. 購入オプションとコスト最適化
  11. IDサービスでの活用
  12. まとめ

1. EC2の概要

EC2は、AWS上で仮想マシン(インスタンス)を起動するサービスです。物理サーバーの調達に数週間〜数ヶ月かかるのに対し、EC2は数分でサーバーを起動できます。

EC2の主な特徴

特徴説明
伸縮性需要に応じてインスタンス数を増減可能
多様性数百種類のインスタンスタイプから選択
従量課金使用した分だけ課金(秒単位)
グローバル全リージョン・AZで利用可能
統合VPC、EBS、IAM等の各種AWSサービスと連携

EC2インスタンスの起動に必要な要素

EC2インスタンスの起動:
├── AMI(OSイメージ)
├── インスタンスタイプ(CPU/メモリ)
├── キーペア(SSH認証用)
├── VPC / サブネット
├── セキュリティグループ
├── EBSボリューム(ストレージ)
└── IAMロール(AWS APIアクセス用)

2. インスタンスタイプ

EC2インスタンスタイプは、CPU、メモリ、ストレージ、ネットワーク性能の組み合わせを定義します。命名規則は以下の通りです。

m7g.xlarge
│││ └── サイズ(xlarge = 4 vCPU, 16 GiB)
││└── 世代(7 = 第7世代)
│└── プロセッサファミリー(g = Graviton)
└── ファミリー(m = 汎用)

インスタンスファミリー

ファミリー用途代表的なタイプ特徴
M (汎用)Webサーバー、アプリサーバーm7g, m7iCPU/メモリのバランスが良い
C (コンピューティング最適化)バッチ処理、科学計算c7g, c7i高いCPU性能
R (メモリ最適化)データベース、キャッシュr7g, r7i大容量メモリ
T (バースト可能)開発環境、小規模ワークロードt3, t4gベースライン+バースト
I (ストレージ最適化)NoSQL、データウェアハウスi4i高速ローカルストレージ
P/G (アクセラレーテッド)ML推論、GPU処理p5, g5GPU搭載

Graviton(Armベース)プロセッサ

AWSが設計したArmベースのプロセッサで、x86と比較して最大40%のコストパフォーマンス向上が期待できます。

項目x86 (Intel/AMD)Graviton (Arm)
代表タイプm7i, c7im7g, c7g
価格基準約20%低い
性能高い同等以上
互換性広範Arm対応が必要
エネルギー効率標準高い

Java 21で動作するアプリケーションはGravitonとの互換性が高く、コスト効率に優れた選択肢です。

サイズの比較(Mファミリーの例)

サイズvCPUメモリ(GiB)ネットワーク
m7g.medium14最大12.5 Gbps
m7g.large28最大12.5 Gbps
m7g.xlarge416最大12.5 Gbps
m7g.2xlarge832最大15 Gbps
m7g.4xlarge1664最大25 Gbps

3. AMI(Amazon Machine Image)

AMIは、EC2インスタンスの起動に使用するテンプレートイメージです。OS、アプリケーション、設定がパッケージされています。

AMIの種類

種類説明
AWS提供AMIAWSが管理するベースイメージAmazon Linux 2023, Ubuntu
マーケットプレイスAMIサードパーティが提供CentOS, RHEL
カスタムAMI自身で作成したイメージアプリ組込み済み

カスタムAMI作成の流れ

1. ベースAMIからインスタンス起動
2. 必要なソフトウェアのインストール・設定
3. インスタンスからAMIを作成(スナップショット取得)
4. 作成したAMIから新しいインスタンスを起動

[ベースAMI] → [インスタンス] → [設定・カスタマイズ] → [カスタムAMI]

[新インスタンス]
[新インスタンス]

AMIはリージョン固有のリソースです。他のリージョンで使用する場合はコピーが必要です。


4. インスタンスのライフサイクル

EC2インスタンスは以下の状態を遷移します。

                     ┌──────────┐
起動 │ pending │
AMI───────────→ │ (起動中) │
└────┬─────┘

┌────▼─────┐
│ running │◄──────── 開始
│ (実行中) │ (停止状態から)
└──┬───┬───┘
│ │
停止 ─────┘ └───── 終了
│ │
┌────▼─────┐ ┌────▼──────┐
│ stopping │ │shutting- │
│ (停止中) │ │down │
└────┬─────┘ │(終了処理中)│
│ └────┬──────┘
┌────▼─────┐ │
│ stopped │ ┌────▼──────┐
│ (停止) │ │terminated │
└──────────┘ │(終了済み) │
└───────────┘

各状態での課金

状態コンピューティング課金EBS課金
runningありあり
stoppedなしあり
terminatedなしなし(EBS削除時)

停止と終了の違い: 停止はインスタンスを保持したまま一時停止し、再開可能です。終了はインスタンスを削除します。停止中もEBSボリュームは課金されます。


5. キーペアとSSH接続 / Session Manager

キーペアによるSSH接続

EC2インスタンスへのSSH接続には、公開鍵認証を使用します。

[開発者PC]                        [EC2インスタンス]
秘密鍵(.pem) ──── SSH接続 ────→ 公開鍵(authorized_keys)

$ ssh -i my-key.pem ec2-user@<パブリックIP>

Session Manager(推奨)

AWS Systems Manager Session Managerは、SSHキーやポート開放なしでインスタンスに接続できます。

[開発者] → [AWS Console / CLI] → [Session Manager] → [EC2インスタンス]
(HTTPS/443) (SSMエージェント)
項目SSHSession Manager
ポート開放22番ポート必要不要
キー管理秘密鍵の管理が必要不要(IAM認証)
監査ログ別途設定が必要CloudTrailに自動記録
ネットワークパブリックIPまたはBastionVPCエンドポイント経由可

Session Managerを使用することで、パブリックサブネットにBastionホストを配置する必要がなくなり、セキュリティが向上します。


6. EBS(Elastic Block Store)

EBSは、EC2インスタンスにアタッチするブロックストレージです。インスタンスを停止・終了してもデータが保持されます。

ボリュームタイプの比較

タイプ名称用途IOPS (最大)スループット (最大)料金
gp3汎用SSD一般的なワークロード16,0001,000 MB/s低い
io2プロビジョンドIOPS SSDデータベース256,0004,000 MB/s高い
st1スループット最適化HDDビッグデータ、ログ500500 MB/s低い
sc1コールドHDDアーカイブ250250 MB/s最も低い

gp3の特徴

gp3は最も一般的に使用されるボリュームタイプです。

  • ベースライン: 3,000 IOPS / 125 MB/s
  • 容量に関係なく一定のベースラインパフォーマンス
  • IOPS・スループットを独立してプロビジョニング可能
  • gp2と比較して最大20%低コスト

EBSスナップショット

EBSボリュームのバックアップとして、スナップショットを取得できます。

[EBSボリューム] → [スナップショット作成] → [S3に保存]

[別AZ/リージョンで復元]

[新しいEBSボリューム]

スナップショットは増分バックアップであり、前回のスナップショットからの変更分のみが保存されます。


7. インスタンスストアとEBSの違い

項目EBSインスタンスストア
永続性インスタンス停止後もデータ保持インスタンス停止でデータ消失
パフォーマンスネットワーク経由物理的に接続(高速)
スナップショット可能不可
暗号化KMSによる暗号化可能自動暗号化
用途OS、データベース、永続データテンポラリファイル、キャッシュ
課金別途課金インスタンス料金に含まれる

インスタンスストアはインスタンスに物理的に接続されたディスクで、非常に高いI/O性能を提供しますが、インスタンスの停止・終了時にデータが失われます。


8. Elastic IP

Elastic IP(EIP)は、AWSアカウントに割り当てられる静的なパブリックIPv4アドレスです。

通常のパブリックIP:
起動 → パブリックIP: 54.xx.xx.1
停止 → IP解放
再起動 → パブリックIP: 54.xx.xx.2 (変わる)

Elastic IP:
割り当て → EIP: 52.xx.xx.100
インスタンスAに関連付け → 52.xx.xx.100
インスタンスBに付け替え → 52.xx.xx.100 (同じIP)

注意点

  • インスタンスに関連付けられていないEIPには課金される
  • アカウントあたりリージョンごとにデフォルト5個まで
  • 本番環境ではEIPよりもDNS名(Route 53)やロードバランサーの使用を推奨

9. Auto Scaling

Auto Scalingは、EC2インスタンスの数を需要に応じて自動的に増減する機能です。

Auto Scalingの構成要素

┌─────────────────────────────────────────────────┐
│ Auto Scaling Group (ASG) │
│ │
│ 設定: │
│ 最小: 2 希望: 4 最大: 8 │
│ │
│ ┌──── AZ-a ────┐ ┌──── AZ-c ────┐ │
│ │ [Instance-1] │ │ [Instance-3] │ │
│ │ [Instance-2] │ │ [Instance-4] │ │
│ └───────────────┘ └───────────────┘ │
│ │
│ 起動テンプレート: │
│ AMI, インスタンスタイプ, セキュリティグループ等 │
└─────────────────────────────────────────────────┘

[ALB/NLB]

[クライアント]

スケーリングポリシー

ポリシー動作
ターゲット追跡メトリクスを目標値に維持CPU使用率を50%に維持
ステップスケーリング閾値ごとに段階的にスケールCPU 70%→+2台, 90%→+4台
シンプルスケーリング単一の閾値でスケールCPU 70%超→+1台
スケジュール時刻に基づいてスケール平日9時に+3台
予測スケーリングMLで需要を予測過去パターンから事前スケール

スケーリングの流れ

[CloudWatch Alarm]           [Auto Scaling Group]
CPU > 70% ──→ スケールアウト (インスタンス追加)


[起動テンプレート]から新インスタンス作成


[ALBターゲットグループ]にインスタンス登録


ヘルスチェック通過後、トラフィック振り分け開始

CPU < 30% ──→ スケールイン (インスタンス削除)

クールダウン期間

スケーリング後、次のスケーリングまで一定時間待機する期間です。頻繁なスケーリング(フラッピング)を防止します。


10. 購入オプションとコスト最適化

購入オプションの比較

オプション割引率コミットメント中断リスク適用場面
オンデマンドなしなしなし短期、予測不能なワークロード
リザーブド (1年)最大40%1年なし安定した本番ワークロード
リザーブド (3年)最大60%3年なし長期安定ワークロード
Savings Plans最大72%1年/3年なし柔軟なコミットメント
スポット最大90%なしあり(2分前通知)バッチ処理、テスト環境

Savings Plans vs リザーブドインスタンス

項目リザーブドインスタンスSavings Plans
コミット対象特定のインスタンスタイプ/AZ時間あたりの使用量(ドル)
柔軟性低い(変更に制約)高い(タイプ変更可)
適用範囲EC2のみEC2, Fargate, Lambda
管理の手間タイプ変更時に再購入自動で最適適用

スポットインスタンスの活用

スポットインスタンスは未使用のEC2容量を大幅割引で利用できますが、AWSに2分前の通知で回収される可能性があります。

適した用途:
- バッチ処理、データ分析
- CI/CDビルド環境
- テスト・開発環境
- ステートレスなWebサーバー(Auto Scaling併用)

適さない用途:
- データベースサーバー
- ステートフルなアプリケーション
- 中断が許されないワークロード

11. IDサービスでの活用

EC2 vs コンテナ: idp-serverデプロイの選択肢

idp-serverをAWSにデプロイする際、EC2とコンテナサービスの2つの選択肢があります。

項目EC2直接デプロイECS/Fargate
構成管理AMI + UserDataDockerイメージ
デプロイ速度AMI作成に時間がかかるイメージPushのみ
スケーリングAuto Scaling GroupECSサービス
リソース効率インスタンス単位タスク単位(密度が高い)
運用負荷OS管理、パッチ適用が必要OS管理不要(Fargate)
適用場面特殊なOS要件がある場合一般的なWebアプリケーション

EC2でのidp-serverデプロイ構成

EC2を選択する場合の構成例を示します。

[ALB] → [Auto Scaling Group]

┌────┴────┐
[EC2-1] [EC2-2]
m7g.large m7g.large
│ │
├── Amazon Linux 2023
├── Java 21 (Corretto)
├── idp-server.jar
└── CloudWatch Agent

起動テンプレート:
AMI: カスタムAMI(Java 21 + アプリ組込み済み)
インスタンスタイプ: m7g.large (Graviton, 2 vCPU, 8 GiB)
IAMロール: idp-server-ec2-role
UserData: アプリ起動スクリプト

インスタンスタイプの選定

idp-serverはJavaアプリケーション(Spring Boot)のため、以下を考慮します。

  • ファミリー: M(汎用)またはR(メモリ最適化)
  • プロセッサ: Graviton(Java 21はArmに対応しており、コスト効率が高い)
  • サイズ: ワークロードに応じて選択(小規模はm7g.large、大規模はm7g.xlarge以上)
小規模(〜100 req/s):   m7g.large    (2 vCPU,  8 GiB)  × 2台
中規模(〜500 req/s): m7g.xlarge (4 vCPU, 16 GiB) × 2台
大規模(〜2000 req/s): m7g.2xlarge (8 vCPU, 32 GiB) × 4台

12. まとめ

  • EC2は仮想サーバーを提供するAWSの基本サービスであり、多様なワークロードに対応する
  • インスタンスタイプは用途に応じて適切なファミリー・サイズを選択する
  • EBSは永続的なブロックストレージであり、gp3が一般的に推奨される
  • Auto Scalingで需要に応じた自動スケーリングを実現する
  • 購入オプションを活用してコストを最適化する(Savings Plans推奨)
  • Session Managerを使用して安全にインスタンスへ接続する

次のステップ

参考リソース