前回までの記事では、VPCによるネットワーク設計について解説しました。本記事では、AWSの代表的なコンピューティングサービスであるEC2(Elastic Compute Cloud)について解説します。EC2の基本概念から、インスタンスタイプの選択、キーペアによるSSH接続、ユーザーデータによる初期設定まで、仮想サーバーを運用するための基礎知識を身につけましょう。
EC2(Elastic Compute Cloud)とは
EC2は、AWSが提供する仮想サーバーサービスです。物理サーバーを購入・設置することなく、数分でサーバーを起動し、必要に応じてスケールアップ・スケールダウンできます。従量課金制により、使用した分だけ料金が発生するため、コスト効率の高いインフラ運用が可能です。
EC2の主な特徴
EC2には以下の特徴があります。
| 特徴 | 説明 |
|---|---|
| 柔軟なスケーリング | 数分でインスタンスを起動・停止、スペック変更が可能 |
| 多様なインスタンスタイプ | CPU、メモリ、ストレージの組み合わせが数百種類以上 |
| グローバル展開 | 世界中のリージョンでインスタンスを起動可能 |
| 従量課金 | 秒単位(最低60秒)の課金で無駄なコストを削減 |
| セキュリティ | VPC、セキュリティグループ、IAMと連携した多層防御 |
EC2のユースケース
EC2は様々な用途で活用されています。
- Webサーバー: Apache、Nginx等を動作させるWebアプリケーションサーバー
- アプリケーションサーバー: Java、Node.js、Python等のバックエンドアプリケーション
- バッチ処理: 定期的なデータ処理や集計処理
- 開発・テスト環境: 本番環境と同等の環境を一時的に構築
- 高性能コンピューティング: 機械学習、科学技術計算
インスタンスとは
EC2における「インスタンス」とは、起動された仮想サーバーの1つ1つを指します。インスタンスは、選択したAMI(Amazon Machine Image)を基に起動され、指定したインスタンスタイプのスペックで動作します。
graph LR
subgraph "EC2インスタンスの構成要素"
AMI[AMI<br/>OS・ソフトウェア]
Type[インスタンスタイプ<br/>CPU・メモリ]
Storage[ストレージ<br/>EBS・インスタンスストア]
Network[ネットワーク<br/>VPC・サブネット]
Security[セキュリティ<br/>キーペア・SG]
end
AMI --> Instance((EC2<br/>インスタンス))
Type --> Instance
Storage --> Instance
Network --> Instance
Security --> Instanceインスタンスのライフサイクル
EC2インスタンスは、以下の状態を遷移します。
stateDiagram-v2
[*] --> pending: 起動
pending --> running: 起動完了
running --> stopping: 停止操作
stopping --> stopped: 停止完了
stopped --> pending: 開始操作
running --> shutting_down: 終了操作
shutting_down --> terminated: 終了完了
stopped --> shutting_down: 終了操作
terminated --> [*]各状態の意味は以下のとおりです。
| 状態 | 説明 | 課金 |
|---|---|---|
| pending | インスタンス起動準備中 | 課金なし |
| running | インスタンス実行中 | 課金あり |
| stopping | インスタンス停止処理中 | 課金なし |
| stopped | インスタンス停止中(EBSボリュームは保持) | インスタンス課金なし、EBS課金あり |
| shutting-down | インスタンス終了処理中 | 課金なし |
| terminated | インスタンス終了(削除済み) | 課金なし |
停止と終了の違い
「停止(Stop)」と「終了(Terminate)」は異なる操作です。停止はインスタンスを一時的に停止し、後で再開できます。EBSボリュームは保持されるため、データは維持されます。一方、終了はインスタンスを完全に削除します。デフォルト設定ではルートボリュームも削除されるため、データは失われます。
インスタンスタイプの選び方
インスタンスタイプは、EC2インスタンスのCPU、メモリ、ストレージ、ネットワーク性能を定義します。ワークロードに適したインスタンスタイプを選択することで、コストとパフォーマンスのバランスを最適化できます。
インスタンスタイプの命名規則
インスタンスタイプは、以下の命名規則に従っています。
m5.xlarge
│ │ └── サイズ(xlarge)
│ └── 世代(5)
└── ファミリー(m = 汎用)
ファミリー(インスタンスファミリー)
用途に応じて最適化されたカテゴリです。
| ファミリー | 特徴 | 代表的なタイプ | ユースケース |
|---|---|---|---|
| 汎用(M, T) | バランスの取れたCPU/メモリ比 | t3, m6i, m7g | Webサーバー、開発環境 |
| コンピューティング最適化(C) | 高いCPU性能 | c6i, c7g | バッチ処理、ゲームサーバー |
| メモリ最適化(R, X) | 大容量メモリ | r6i, x2idn | データベース、インメモリキャッシュ |
| ストレージ最適化(I, D) | 高速ストレージI/O | i3, d3 | データウェアハウス、分散ファイルシステム |
| 高速コンピューティング(P, G) | GPU搭載 | p4d, g5 | 機械学習、グラフィックス処理 |
世代
数字が大きいほど新しい世代です。新しい世代は一般的に性能が向上し、コストパフォーマンスが改善されています。特別な理由がない限り、最新世代の使用を推奨します。
サイズ
同じファミリー・世代内でのスペックの大きさを示します。
| サイズ | 説明 |
|---|---|
| nano | 最小サイズ |
| micro | 極小サイズ |
| small | 小サイズ |
| medium | 中サイズ |
| large | 大サイズ |
| xlarge | 特大サイズ(largeの2倍) |
| 2xlarge | xlargeの2倍 |
| 4xlarge〜 | さらに大きなサイズ |
T系インスタンス(バースト可能インスタンス)
T系インスタンス(t3、t3a、t4g等)は、「バースト可能」な特性を持つコスト効率の高いインスタンスです。
T系インスタンスは「CPUクレジット」という仕組みを採用しています。通常時は低いCPU使用率で動作しますが、負荷が高まった際にはCPUクレジットを消費してベースラインを超えた性能を発揮できます。
graph LR
subgraph "T系インスタンスのCPUクレジット"
Idle[アイドル時] -->|クレジット蓄積| Pool((クレジット<br/>プール))
Pool -->|クレジット消費| Burst[バースト時]
end| インスタンスタイプ | vCPU | メモリ | ベースラインCPU使用率 | 月額概算(東京リージョン) |
|---|---|---|---|---|
| t3.micro | 2 | 1 GiB | 10% | 約$8 |
| t3.small | 2 | 2 GiB | 20% | 約$15 |
| t3.medium | 2 | 4 GiB | 20% | 約$30 |
| t3.large | 2 | 8 GiB | 30% | 約$60 |
T系インスタンスは、開発・テスト環境や、トラフィックが不定期に発生するWebサイトに適しています。
インスタンスタイプ選定のポイント
インスタンスタイプを選定する際は、以下のポイントを考慮します。
- ワークロードの特性を分析する: CPU集約型、メモリ集約型、I/O集約型のいずれかを把握する
- 最新世代を選択する: 同等スペックでもコストパフォーマンスが向上している
- 小さく始めて調整する: 最初は小さいサイズで開始し、メトリクスを確認して調整する
- Graviton(ARM)を検討する: arm64対応アプリケーションならコストが約20%削減できる
AMI(Amazon Machine Image)
AMIは、EC2インスタンスを起動するためのテンプレートです。OS、アプリケーション、設定がパッケージ化されており、AMIからインスタンスを起動することで、同じ構成のサーバーを繰り返し作成できます。
AMIの種類
AMIは提供元によって以下の種類があります。
| 種類 | 説明 | 例 |
|---|---|---|
| AWS提供AMI | AWSが公式に提供するAMI | Amazon Linux 2023、Ubuntu、Windows Server |
| AWSマーケットプレイスAMI | サードパーティが提供する有料・無料のAMI | WordPress構築済み、セキュリティツール導入済み |
| コミュニティAMI | コミュニティが共有するAMI | 様々なディストリビューション |
| カスタムAMI | 自分で作成したAMI | 自社アプリケーション導入済み |
Amazon Linux 2023
Amazon Linux 2023(AL2023)は、AWSが提供する最新のLinuxディストリビューションです。EC2での利用に最適化されており、以下の特徴があります。
- 5年間の長期サポート
- 2年ごとのメジャーリリース
- SELinuxがデフォルトで有効
- AWS CLIがプリインストール済み
- EC2のメタデータサービスとの連携
初めてEC2を使用する場合は、Amazon Linux 2023の使用を推奨します。
キーペアとSSH接続
EC2インスタンスへの接続には、キーペアを使用したSSH認証が一般的です。キーペアは公開鍵と秘密鍵のペアで構成され、安全なリモートアクセスを実現します。
キーペアの仕組み
キーペアは公開鍵暗号方式に基づいています。
sequenceDiagram
participant User as ユーザー
participant AWS as AWSコンソール
participant EC2 as EC2インスタンス
User->>AWS: キーペア作成
AWS->>User: 秘密鍵(.pem)ダウンロード
AWS->>EC2: 公開鍵をインスタンスに配置
Note over EC2: ~/.ssh/authorized_keys
User->>EC2: SSH接続(秘密鍵使用)
EC2->>EC2: 公開鍵で認証
EC2->>User: 接続成功キーペア作成時の注意点
- 秘密鍵(.pemファイル)は作成時に1度だけダウンロードできます
- 秘密鍵を紛失すると、そのキーペアでのインスタンスへの接続ができなくなります
- 秘密鍵は厳重に管理し、他者と共有しないでください
キーペアの作成
AWSマネジメントコンソールからキーペアを作成する手順を説明します。
- EC2コンソールを開き、左メニューから「キーペア」を選択
- 「キーペアを作成」をクリック
- 以下の情報を入力
- 名前: 識別しやすい名前(例:
my-key-pair) - キーペアのタイプ: RSAまたはED25519(ED25519推奨)
- プライベートキーファイル形式:
.pem(Linux/Mac)または.ppk(PuTTY)
- 名前: 識別しやすい名前(例:
- 「キーペアを作成」をクリックし、秘密鍵をダウンロード
SSH接続の手順
Linuxインスタンスへの接続手順を説明します。
1. 秘密鍵のパーミッション設定(Linux/Mac)
ダウンロードした秘密鍵は、パーミッションを制限する必要があります。
|
|
パーミッションが緩いと、SSHクライアントが接続を拒否します。
2. SSH接続コマンドの実行
以下のコマンドでインスタンスに接続します。
|
|
デフォルトのユーザー名はAMIによって異なります。
| AMI | デフォルトユーザー名 |
|---|---|
| Amazon Linux | ec2-user |
| Ubuntu | ubuntu |
| Debian | admin |
| RHEL | ec2-user または root |
| Windows | Administrator(RDP接続) |
3. 接続確認
初回接続時はホスト認証の確認メッセージが表示されます。yesと入力して続行します。
The authenticity of host '54.199.xxx.xxx (54.199.xxx.xxx)' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
WindowsからのSSH接続
Windows 10以降では、OpenSSHクライアントが標準搭載されています。PowerShellまたはコマンドプロンプトから、Linux/Macと同様のコマンドで接続できます。
|
|
Session Managerによるブラウザ接続
AWS Systems Manager Session Managerを使用すると、SSHキーやパブリックIPアドレスなしでEC2インスタンスに接続できます。セキュリティとコンプライアンスの観点から、本番環境ではSession Managerの使用が推奨されています。
Session Managerのメリット
| 観点 | メリット |
|---|---|
| セキュリティ | SSHポート(22番)を開放する必要がない |
| コスト | パブリックIPやNATゲートウェイが不要 |
| 監査 | すべてのセッションがCloudWatch LogsやS3に記録される |
| アクセス制御 | IAMポリシーできめ細かなアクセス制御が可能 |
Session Managerの前提条件
Session Managerを使用するには、以下の準備が必要です。
1. SSM Agentのインストール
Amazon Linux 2023やAmazon Linux 2、Ubuntu 16.04以降では、SSM Agentがプリインストールされています。その他のOSでは手動インストールが必要です。
2. IAMロールのアタッチ
インスタンスにAmazonSSMManagedInstanceCoreポリシーを含むIAMロールをアタッチします。
|
|
3. ネットワーク要件
インスタンスがSystems Managerエンドポイントに到達できる必要があります。以下のいずれかの方法で実現します。
- パブリックサブネット + インターネットゲートウェイ
- プライベートサブネット + NATゲートウェイ
- プライベートサブネット + VPCエンドポイント(推奨)
Session Managerでの接続
コンソールからの接続
- EC2コンソールでインスタンスを選択
- 「接続」ボタンをクリック
- 「Session Manager」タブを選択
- 「接続」をクリック
ブラウザ内でターミナルが開き、インスタンスに接続できます。
AWS CLIからの接続
|
|
ユーザーデータによる初期設定
ユーザーデータは、インスタンス起動時に自動実行されるスクリプトです。パッケージのインストールや設定ファイルの配置など、初期設定を自動化できます。
ユーザーデータの基本
ユーザーデータは、シェルスクリプトまたはcloud-init形式で記述します。インスタンスの初回起動時に1度だけ実行されます。
sequenceDiagram
participant User as ユーザー
participant EC2 as EC2インスタンス
participant Meta as メタデータサービス
User->>EC2: インスタンス起動(ユーザーデータ指定)
EC2->>Meta: ユーザーデータ取得
Meta->>EC2: スクリプト返却
EC2->>EC2: スクリプト実行(root権限)
EC2->>EC2: 起動完了シェルスクリプト形式
最も一般的なユーザーデータ形式です。#!/bin/bashで始めます。
|
|
cloud-init形式
cloud-initディレクティブを使用したYAML形式も利用できます。より複雑な設定に適しています。
|
|
ユーザーデータの注意点
ユーザーデータを使用する際は、以下の点に注意してください。
| 注意点 | 説明 |
|---|---|
| 実行権限 | スクリプトはroot権限で実行される |
| サイズ制限 | 最大16KB(Base64エンコード後) |
| 実行タイミング | デフォルトでは初回起動時のみ実行 |
| ログ確認 | /var/log/cloud-init-output.logで実行ログを確認可能 |
| エラー処理 | スクリプトが失敗してもインスタンスは起動する |
ユーザーデータの確認とデバッグ
インスタンス内からユーザーデータを確認する方法です。
|
|
EC2インスタンスの起動手順
ここまで学んだ知識を活用して、EC2インスタンスを起動する手順を説明します。
起動ウィザードの概要
EC2コンソールの「インスタンスを起動」から、以下の設定を行います。
graph TB
subgraph "EC2インスタンス起動ウィザード"
A[1. 名前とタグ] --> B[2. AMI選択]
B --> C[3. インスタンスタイプ]
C --> D[4. キーペア]
D --> E[5. ネットワーク設定]
E --> F[6. ストレージ設定]
F --> G[7. 高度な詳細]
G --> H[インスタンス起動]
end詳細な起動手順
1. 名前とタグの設定
インスタンスを識別するための名前を設定します。タグを追加することで、コスト管理やリソース管理が容易になります。
- Name:
web-server-01 - Environment:
development - Project:
my-project
2. AMIの選択
クイックスタートから「Amazon Linux 2023 AMI」を選択します。64ビット(x86)または64ビット(Arm)を選択できます。
3. インスタンスタイプの選択
開発・テスト用途であればt3.microまたはt3.smallで十分です。無料利用枠の対象はt2.microまたはt3.microです。
4. キーペアの設定
事前に作成したキーペアを選択するか、新規作成します。Session Managerのみで接続する場合は「キーペアなしで続行」も選択できます。
5. ネットワーク設定
- VPC: 作成済みのカスタムVPCを選択
- サブネット: 用途に応じてパブリック/プライベートサブネットを選択
- パブリックIP自動割り当て: パブリックサブネットの場合は「有効化」
- セキュリティグループ: 適切なセキュリティグループを選択または作成
SSH接続を許可するセキュリティグループルールの例:
| タイプ | プロトコル | ポート範囲 | ソース | 説明 |
|---|---|---|---|---|
| SSH | TCP | 22 | 自分のIPアドレス | SSH接続用 |
6. ストレージの設定
ルートボリュームのサイズとタイプを設定します。デフォルトは8 GiBのgp3です。
| 項目 | 推奨設定 |
|---|---|
| サイズ | 8〜30 GiB(用途に応じて) |
| ボリュームタイプ | gp3(汎用SSD) |
| 終了時に削除 | 開発環境: はい、本番環境: いいえ |
7. 高度な詳細(ユーザーデータ)
「高度な詳細」セクションを展開し、ユーザーデータを入力します。
8. インスタンスの起動
設定を確認し、「インスタンスを起動」をクリックします。数分でインスタンスが起動し、running状態になります。
インスタンスメタデータサービス(IMDS)
インスタンスメタデータサービス(IMDS)は、実行中のインスタンスに関する情報を取得するためのサービスです。インスタンス内部から、インスタンスID、IPアドレス、IAMロールの認証情報などにアクセスできます。
IMDSv2の使用
セキュリティ上の理由から、IMDSv2(セッション指向のメタデータサービス)の使用が推奨されています。IMDSv2では、最初にトークンを取得してからメタデータにアクセスします。
|
|
主要なメタデータ項目
| メタデータパス | 説明 |
|---|---|
| instance-id | インスタンスID |
| instance-type | インスタンスタイプ |
| ami-id | 使用しているAMI ID |
| local-ipv4 | プライベートIPアドレス |
| public-ipv4 | パブリックIPアドレス |
| placement/availability-zone | アベイラビリティゾーン |
| iam/security-credentials/ | IAMロールの一時認証情報 |
まとめ
本記事では、EC2インスタンスの起動と接続方法について解説しました。
- EC2の基本概念: 仮想サーバーサービスであり、柔軟なスケーリングと従量課金が特徴
- インスタンスタイプ: ファミリー、世代、サイズで構成され、ワークロードに応じて選択
- AMI: インスタンスのテンプレートであり、Amazon Linux 2023の使用を推奨
- キーペアとSSH接続: 公開鍵認証によるセキュアな接続方法
- Session Manager: SSHポート不要でIAMベースのアクセス制御が可能
- ユーザーデータ: 起動時の初期設定を自動化するスクリプト
次回の記事では、EC2のストレージであるEBS(Elastic Block Store)と、インスタンスのテンプレートであるAMIの作成・活用方法について解説します。