EC2

作成: 2026.03.18更新: 2026.03.22

1. 概要

Amazon EC2(Elastic Compute Cloud)は、AWS 上で仮想サーバ(インスタンス)を起動・管理できる IaaS(Infrastructure as a Service) サービス。

物理サーバの調達やセットアップを行うことなく、数分で仮想マシンを起動でき、不要になったらすぐに削除できる。これにより、従来はハードウェア調達に数週間〜数ヶ月かかっていた作業が、API やコンソールから即座に実行可能になる。

責任共有モデルにおける位置づけ

EC2 は IaaS に分類されるため、OS より上のレイヤーはユーザーの責任となる。具体的には、OS のパッチ適用、ミドルウェアのインストール・設定、アプリケーションのデプロイ、セキュリティ設定(ファイアウォール、ユーザー管理)はすべてユーザーが管理する。

一方、物理ホストのハードウェア、ハイパーバイザー、ネットワークインフラについては AWS が管理する。

この責任範囲を理解しておくことで、「何をAWSに任せられて、何を自分で対処しなければならないか」が明確になる。

2. ユースケース

EC2 は汎用性が高いサービスだが、特に以下のようなケースで選択されることが多い。

  • 既存のオンプレミスアプリケーションをクラウドに移行したいとき — OS やミドルウェアの構成をそのまま維持できるため、アプリケーションの改修を最小限に抑えられる(リフト&シフト)
  • OS レベルでの細かいチューニングが必要なとき — カーネルパラメータの調整や特定バージョンのミドルウェアが必要な場合、Lambda や ECS では対応しづらい要件に応えられる
  • GPU を使った機械学習や推論処理を実行したいとき — P 系・G 系インスタンスで NVIDIA GPU を利用でき、CUDA 環境を自由に構築できる
  • 長時間動作するバッチ処理を実行したいとき — Lambda の 15 分制限を超えるような処理や、大量のメモリを必要とする処理に適している
  • 開発・検証用の一時的な環境が必要なとき — スポットインスタンスを使えば低コストで検証環境を立ち上げられる

3. 基本概念

EC2 を理解するために押さえておくべき主要用語を以下にまとめる。

用語説明
インスタンスEC2 上で起動する仮想サーバの単位。1 台のインスタンスが 1 台の仮想マシンに対応する
AMI(Amazon Machine Image)OS、ミドルウェア、設定を含んだテンプレート。インスタンス起動時に指定する。自分で作成することも、AWS やサードパーティ提供のものを使うこともできる
インスタンスタイプCPU・メモリ・ネットワーク性能の組み合わせ。用途に応じて t3.micro(小規模)から p5.48xlarge(GPU 大規模)まで幅広い選択肢がある
EBS(Elastic Block Store)インスタンスに接続する永続ストレージ。インスタンスを停止・終了してもデータが保持される(終了時の削除設定を除く)
セキュリティグループインスタンスに適用する仮想ファイアウォール。インバウンド(受信)とアウトバウンド(送信)のルールを定義し、許可するトラフィックを制御する
キーペアSSH 接続で使用する公開鍵認証の鍵ペア。秘密鍵はダウンロード時に一度しか取得できないため、紛失に注意が必要
VPC(Virtual Private Cloud)インスタンスを配置する仮想ネットワーク。サブネット、ルートテーブル、インターネットゲートウェイなどで構成される
Elastic IPインスタンスに関連付けられる固定のパブリック IP アドレス。インスタンスを停止・再起動しても IP が変わらない

4. アーキテクチャ概要

代表構成(Web アプリケーション)

以下は、EC2 を使った Web アプリケーションの典型的な構成。ALB(Application Load Balancer)でリクエストを受け、Auto Scaling Group 内の複数の EC2 インスタンスに分散し、バックエンドのデータベースとして RDS を使用する。

[ユーザー]
   ↓ HTTPS
[ALB (Application Load Balancer)]
   ↓ HTTP (ポート80)
[EC2 × 2台以上 (Auto Scaling Group)]  ← 複数AZに分散
   ↓ TCP (ポート3306)
[RDS (Multi-AZ)]

構成図生成プロンプト: 上記構成をアーキテクチャ図として作成する場合、以下のプロンプトを画像生成 AI や draw.io 等で使用できる。 「AWS アーキテクチャ図。ユーザーからの HTTPS リクエストが ALB を経由し、2 つのアベイラビリティゾーンに分散された Auto Scaling Group 内の EC2 インスタンス群に振り分けられる。EC2 からは RDS(Multi-AZ 構成)に接続する。VPC 内にパブリックサブネット(ALB)とプライベートサブネット(EC2、RDS)を配置。」

設計ポイント

  • EC2 をインターネットに直接公開しない — ALB や CloudFront を前段に置くことで、DDoS 対策やSSL 終端を一元管理できる
  • 複数の AZ(アベイラビリティゾーン)に分散配置する — 1 つの AZ で障害が発生しても、別の AZ のインスタンスがリクエストを処理し続けられる
  • ステートレスに設計する — セッション情報をインスタンス内に持たず、ElastiCache(Redis)や DynamoDB に外出しすることで、スケールイン・アウト時にセッションが失われない

5. 主要機能

インスタンスタイプ

インスタンスタイプは名前の先頭文字(ファミリー)で用途が分かれる。

ファミリー用途選択の目安
t 系(T3, T3a, T4g)バースト可能な汎用タイプ開発・検証環境、CPU 使用率が低い小規模サービス
m 系(M5, M6i, M7g)バランス型の汎用タイプCPU とメモリを均等に使う一般的な Web アプリケーション
c 系(C5, C6i, C7g)コンピューティング最適化CPU 集約型の処理(エンコード、科学計算、ゲームサーバ)
r 系(R5, R6i, R7g)メモリ最適化インメモリ DB、大規模キャッシュ、リアルタイム分析
g / p 系(G5, P5)GPU 搭載機械学習の学習・推論、動画処理、3D レンダリング

世代の数字が大きいほど新しい。末尾の g は Graviton(ARM)プロセッサを示し、同スペックの x86 と比較して約 20% 安価。

AMI(Amazon Machine Image)

種類特徴
Amazon LinuxAWS が提供する Linux ディストリビューション。AWS CLI がプリインストールされている
UbuntuCanonical が提供。Web アプリケーション開発で広く使われる
カスタム AMI自分でミドルウェアや設定を含めた AMI を作成し、同じ構成のインスタンスを素早く起動できる
Marketplace AMIサードパーティが提供する AMI。ライセンス込みのソフトウェアをすぐに使い始められる

ストレージ(EBS)

ボリュームタイプ特徴選択の目安
gp3汎用 SSD。コストと性能のバランスが良い迷ったらまずこれを選ぶ
io2高 IOPS が必要な場合の SSDデータベースサーバ、高頻度 I/O
st1スループット最適化 HDDログ解析、ビッグデータ処理
インスタンスストアインスタンスに物理接続された一時ストレージキャッシュ、一時ファイル(停止するとデータ消失)

購入オプション

オプション特徴割引率の目安
オンデマンドいつでも起動・停止可能。柔軟だがコストは最も高い
リザーブドインスタンス1 年 or 3 年の利用をコミットすることで割引最大 72%
Savings Plansコンピューティング使用量を金額でコミット。RI より柔軟最大 66%
スポットインスタンスAWS の余剰キャパシティを利用。中断される可能性あり最大 90%

本番環境には Savings Plans を優先的に検討し、開発・検証環境にはスポットインスタンスの活用を検討するのがコスト最適化の基本戦略。

6. 料金体系

EC2 の料金は複数の要素で構成されるため、「インスタンス料金だけ」を見ていると想定外のコストが発生しやすい。

主な課金要素

課金項目課金単位備考
インスタンス稼働料金秒単位(最低 60 秒)インスタンスタイプとリージョンで単価が異なる
EBS ボリュームGB/月 + IOPS 数停止中のインスタンスでも EBS 料金は発生する
データ転送(アウト)GB 単位リージョン外への転送に課金。同一 AZ 内の通信は無料
Elastic IP未使用時に課金インスタンスに紐付けていない Elastic IP は時間課金が発生する
EBS スナップショットGB/月増分バックアップだが、長期間残すと蓄積する

見落としがちなコスト

  • 停止中インスタンスの EBS 料金 — インスタンスを停止しても EBS は課金され続ける。不要なら EBS ごと削除する
  • 未使用の Elastic IP — 関連付けのない Elastic IP には料金が発生する。使わなくなったら即解放する
  • AZ 間のデータ転送 — 同一リージョンでも AZ をまたぐ通信には課金される($0.01/GB 程度)

7. 比較・選定指針

「EC2 を使うべきか」を判断するために、類似サービスと比較する。

サービス向いているケース向いていないケース
EC2OS レベルの制御が必要、長時間稼働、レガシー移行短時間の単発処理、運用負荷を最小化したい場合
Lambdaイベント駆動の短時間処理(15 分以内)、サーバレスで運用したい常時稼働、OS カスタマイズが必要
ECS / Fargateコンテナ化されたアプリ、マイクロサービスコンテナ化が困難なレガシーアプリ
Lightsail小規模 Web サイト、WordPress、予測可能な料金体系複雑なアーキテクチャ、細かいスケーリング制御

EC2 を選ぶ判断基準

以下のいずれかに該当する場合は EC2 が適している。

  • OS やカーネルの設定を直接変更する必要がある
  • Lambda の実行時間制限(15 分)やメモリ制限(10 GB)を超える処理がある
  • コンテナ化が難しいレガシーアプリケーションを移行する
  • GPU インスタンスが必要(機械学習、動画処理など)

8. 運用・監視

主要メトリクス(CloudWatch)

メトリクス監視の目的
CPUUtilizationCPU の過負荷を検知。Auto Scaling のトリガーにも使う
NetworkIn / NetworkOutネットワーク帯域の使用状況。異常なトラフィックの検知
DiskReadOps / DiskWriteOpsディスク I/O のボトルネック検知
StatusCheckFailedAWS 基盤またはインスタンスの異常を検知

注意: メモリ使用率とディスク使用率は CloudWatch の標準メトリクスに含まれない。これらを監視するには CloudWatch Agent をインストールしてカスタムメトリクスとして送信する必要がある。

ログ

ログパス用途
システムログ/var/log/messagesOS レベルのイベント
認証ログ/var/log/secureSSH ログイン試行の監視
アプリケーションログアプリ依存アプリケーション固有のエラー・アクセスログ

CloudWatch Logs Agent を使って各ログを CloudWatch Logs に集約することを推奨する。インスタンスが終了してもログを保持できる。

運用ツール

  • AWS Systems Manager(SSM) — SSH を使わずにインスタンスに接続できる Session Manager、パッチ適用の自動化(Patch Manager)、設定管理(State Manager)を提供
  • CloudWatch Agent — メモリ・ディスク使用率のカスタムメトリクスを収集
  • AWS Config — インスタンスの設定変更を追跡し、コンプライアンスチェックを自動化

9. トラブルシューティング

問題:SSH 接続できない

原因:

  • セキュリティグループで TCP ポート 22 が許可されていない
  • サブネットの NACL でインバウンド / アウトバウンドがブロックされている
  • ルートテーブルにインターネットゲートウェイへのルートがない
  • インスタンスにパブリック IP または Elastic IP が割り当てられていない
  • OS 上の sshd が停止している

確認手順:

  1. セキュリティグループのインバウンドルールを確認(ポート 22、接続元 IP)
  2. サブネットの NACL でポート 22 のインバウンドと、エフェメラルポートのアウトバウンドが許可されているか確認
  3. ルートテーブルに 0.0.0.0/0 → igw-xxxx のルートがあるか確認
  4. インスタンスにパブリック IP が割り当てられているか確認
  5. VPC Reachability Analyzer で接続経路を診断
  6. どうしても接続できない場合は SSM Session Manager での接続を試みる

問題:CPU 使用率が高い

原因:

  • アプリケーションの処理負荷が増大している
  • メモリ不足により swap が発生し、CPU も圧迫されている
  • バックグラウンドプロセス(ウイルススキャン、ログローテーション等)が重なっている

確認手順:

  1. top または htop でプロセスごとの CPU 使用率を確認
  2. 特定プロセスが占有している場合、そのプロセスの挙動を調査
  3. メモリ使用率も併せて確認し、swap が発生していないか確認(free -m
  4. 一時的な負荷増なら Auto Scaling でスケールアウト、恒常的なら上位インスタンスタイプへの変更を検討

問題:ステータスチェックが失敗する

原因:

  • System Status Check 失敗: AWS 基盤側の障害(ハードウェア故障、ネットワーク障害)
  • Instance Status Check 失敗: OS レベルの問題(カーネルパニック、ファイルシステム破損、メモリ枯渇)

対応:

  1. System Status Check 失敗 → インスタンスを停止・起動(再起動ではなく停止→起動で別の物理ホストに移動する)
  2. Instance Status Check 失敗 → システムログ(コンソール出力)を確認し、OS レベルの問題を特定。復旧困難な場合は AMI から新しいインスタンスを起動

10. 実装例

AWS CLI

# インスタンスの起動
aws ec2 run-instances \
  --image-id ami-0abcdef1234567890 \
  --instance-type t3.micro \
  --key-name my-key-pair \
  --security-group-ids sg-0123456789abcdef0 \
  --subnet-id subnet-0123456789abcdef0 \
  --iam-instance-profile Name=MyEC2Role \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=my-server}]'
# インスタンスの停止
aws ec2 stop-instances --instance-ids i-0123456789abcdef0

# インスタンスの終了(削除)
aws ec2 terminate-instances --instance-ids i-0123456789abcdef0

Terraform

resource "aws_instance" "web" {
  ami                    = "ami-0abcdef1234567890"
  instance_type          = "t3.micro"
  subnet_id              = aws_subnet.private.id
  vpc_security_group_ids = [aws_security_group.web.id]
  iam_instance_profile   = aws_iam_instance_profile.ec2.name

  root_block_device {
    volume_type = "gp3"
    volume_size = 20
  }

  tags = {
    Name = "web-server"
  }
}

11. アンチパターン

アンチパターンなぜダメか推奨
単一 AZ にのみ配置AZ 障害で全インスタンスが停止し、サービスが完全にダウンする最低 2 AZ に分散配置する
SSH ポートを 0.0.0.0/0 に開放ブルートフォース攻撃の対象になる。セキュリティインシデントのリスクが高いSSM Session Manager を使用し、SSH ポートは閉じる
手動スケール運用負荷増加への対応が遅れ、サービス劣化やダウンにつながるAuto Scaling Group でスケーリングを自動化する
EBS のスナップショットを取っていないEBS 障害やオペレーションミスでデータを失った場合に復旧できない定期的なスナップショット取得を自動化(DLM を使用)
インスタンスに直接データを永続保持インスタンス障害や終了時にデータが失われるデータは EBS、S3、RDS などの永続ストレージに保存する
アクセスキーをインスタンスに配置キーの漏洩リスクがある。ローテーション管理も煩雑になるIAM ロールをインスタンスプロファイルで付与する

12. 参考リンク