AWS EC2 VISUALIZER

EC2 インスタンス構造(リソースの関係)

クラウド上で仮想サーバーを起動・管理できるコンピューティングサービス

シナリオ
EC2インスタンスに紐付くAMI・EBS・ENI・セキュリティグループ・キーペアの関係をステップごとに可視化します
ステップ1 / 6
ステップ
EC2インスタンス — AWSの仮想サーバー
EC2(Elastic Compute Cloud)はAWSの仮想サーバーです。インスタンスは単体では動作せず、AMI・EBS・ENI・セキュリティグループ・キーペアなど複数のリソースが紐付いて構成されます。これらは独立したリソースであり、インスタンスとは別に管理されます。
ARCHITECTURE DIAGRAM
EC2インスタンスのリソース構成
STEP 1
CODE VIEW
── EC2 インスタンス ──
 
$ aws ec2 describe-instances --instance-ids i-0abcdef1234567890
 
{
"InstanceId": "i-0abcdef1234567890",
"InstanceType": "t3.medium",
"State": { "Name": "running" },
"LaunchTime": "2024-03-15T10:00:00Z",
"Placement": {
"AvailabilityZone": "ap-northeast-1a"
}
}
 
✓ EC2インスタンス稼働中
AWS Cloud
VPC / EBS
Subnet / ENI
EC2 / Key Pair
AMI
Security Group
解説

🖥
EC2とは

Amazon EC2(Elastic Compute Cloud)はAWSの仮想サーバーサービスです。物理サーバーの購入・管理なしに、数分でサーバーを起動できます。インスタンスタイプ(CPU・メモリの組み合わせ)を選択し、必要に応じてスケールアップ・ダウンが可能です。t3.mediumは汎用タイプ(2 vCPU、4 GiB RAM)の一例です。

1つのインスタンスにはvCPU・メモリ・ストレージ(EBS)・ネットワーク(ENI)・セキュリティグループ・キーペアといった複数のリソースが紐付いており、それぞれを独立して設定・変更できます。この構造を理解することが、障害対応やコスト最適化の基礎知識になります。

イメージで理解: EC2は、クラウド上に借りられる「仮想のパソコン」です。物理的なサーバーを買う代わりに、必要なスペック(CPU・メモリ・ストレージ)を選んで数分で起動できます。使わなくなったら停止・削除すれば課金も止まります。レンタカーのように、必要な時だけ必要な台数を借りるイメージです。
EC2 インスタンスvCPUメモリストレージネットワーク

📀
AMI(Amazon Machine Image)

AMIはEC2インスタンスを起動するためのテンプレート(雛形)です。OS(Amazon Linux、Ubuntu など)、プリインストールされたソフトウェア、ルートボリュームの内容がパッケージされています。同じAMIから何台でもインスタンスを起動でき、環境を素早く複製できます。

AMI の構成要素

AMIには ルートボリュームのスナップショット(OSやアプリが入ったディスクのコピー)、起動権限(どのAWSアカウントが使えるか)、ブロックデバイスマッピング(追加ボリュームの設定)が含まれます。

AMI の種類
AWS提供AMI — Amazon Linux、Ubuntu 等の公式イメージ
Marketplace AMI — サードパーティ製、有料のものもある
カスタムAMI — 自分で作成した環境のスナップショット
本番環境では、アプリケーションを含むカスタムAMIを作成しておき、Auto Scalingで同じ構成のインスタンスを素早く追加するのが一般的です。
AMI はリージョン固有

AMIは作成したリージョンでのみ使用できます。別リージョンで使うにはAMIコピーが必要です。災害対策(DR)で別リージョンにバックアップを置く場合、AMIをコピーしておくことで復旧時間を短縮できます。

// AMIからインスタンスを起動
$ aws ec2 run-instances \
--image-id ami-0abc1234def56789 \
--instance-type t3.medium \
--count 3
// ↑ 同じAMIから3台同時に起動

💾
EBS(Elastic Block Store)

EBSはEC2にアタッチする仮想ディスク(ブロックストレージ)です。インスタンスとは独立したリソースであり、デタッチして別のインスタンスに再アタッチできます。インスタンスに障害が起きても、EBSのデータは保持されます。

ルートボリュームと追加ボリューム

ルートボリュームはOSが入ったディスクで、AMIのスナップショットから自動作成されます。デフォルトではDeleteOnTermination=trueのため、インスタンス終了時に削除されます。追加ボリューム(データ用)はデフォルトでDeleteOnTermination=falseのため、インスタンス終了後も残ります。

ボリュームタイプ

gp3(汎用SSD、コスパ最良)、io2(高IOPS、データベース向け)、st1(スループット最適化HDD、ログ・ビッグデータ向け)、sc1(コールドHDD、アクセス頻度の低いデータ向け)があります。ほとんどのワークロードではgp3が推奨されます。

AZ制約とスナップショット

EBSは同一AZ内のインスタンスにしかアタッチできません。別AZに移動したい場合は、スナップショットを取得し、そこから別AZに新しいボリュームを作成します。スナップショットはS3に保存され、リージョン間コピーも可能です。

// EBSをデタッチして別インスタンスに再アタッチ
$ aws ec2 detach-volume --volume-id vol-data002
$ aws ec2 attach-volume \
--volume-id vol-data002 \
--instance-id i-0new567890abcdef \
--device /dev/xvdf

🔌
ENI(Elastic Network Interface)

ENIはEC2にアタッチする仮想ネットワークカード(NIC)です。プライベートIPアドレス、MACアドレス、パブリックIP(オプション)を保持します。ENIを別のインスタンスに付け替えることでIPアドレスを引き継げるため、障害時のフェイルオーバーに活用できます。

プライマリENIとセカンダリENI

インスタンス起動時にプライマリENI(eth0)が自動作成されます。プライマリENIはインスタンスからデタッチできません。セカンダリENIは後から追加・付け替えが自由にでき、複数サブネットに接続したり、管理用とサービス用でネットワークを分離するといった構成が可能です。

Elastic IP との関係

Elastic IP(固定パブリックIP)は実際にはENIに関連付けられます。ENIを別インスタンスに移動すれば、Elastic IPもそのまま移動します。これにより、インスタンスを入れ替えても外部からのアクセス先IPを変えずに運用できます。

ENI あたりのIPアドレス数

1つのENIに複数のプライベートIPアドレスを割り当てられます。割り当て可能な数はインスタンスタイプによって異なります。1つのサーバーで複数のWebサイトをホスティングする場合などに、ENIに複数IPを持たせて使い分けます。

// ENIを別インスタンスに付け替え(IPアドレス引き継ぎ)
$ aws ec2 detach-network-interface \
--attachment-id eni-attach-0abc123
$ aws ec2 attach-network-interface \
--network-interface-id eni-0abc1234def \
--instance-id i-0new567890abcdef \
--device-index 1

🛡
セキュリティグループ(SG)

セキュリティグループはEC2の仮想ファイアウォールです。重要なポイントとして、SGはインスタンスではなくENI(ネットワークインターフェース)に紐付きます。1つのSGを複数のインスタンス(ENI)で共有でき、ルールの一元管理が可能です。

インバウンドとアウトバウンド

インバウンドルールは外部からの受信トラフィックを制御します(デフォルトですべて拒否)。

アウトバウンドルールは外部への送信トラフィックを制御します(デフォルトですべて許可)。

SGは許可ルールのみ設定可能で、拒否ルールはありません(拒否はNACLで制御)。

ステートフルな動作

SGはステートフルです。インバウンドで許可したリクエストのレスポンスは自動的に許可されます(アウトバウンドルールに関係なく)。逆も同様で、アウトバウンドで許可した通信のレスポンスはインバウンドルールに関係なく通ります。

SGはENIに紐付く(重要)

コンソールでは「インスタンスのSGを変更」と表示されますが、実際にはプライマリENI(eth0)のSGを書き換えています。1つのインスタンスに複数ENIがある場合、ENIごとに異なるSGを適用できます。例えばENI-1にはHTTP用SG、ENI-2には管理用SSH専用SGといった構成が可能です。

Webサーバー向けSG設定例
// ── Inbound Rules(受信) ──
{
"IpPermissions": [
{
"IpProtocol": "tcp",
"FromPort": 22, "ToPort": 22,
"IpRanges": [{ "CidrIp": "203.0.113.0/24" }]
// ↑ SSH: 社内IPのみ許可
},
{
"IpProtocol": "tcp",
"FromPort": 80, "ToPort": 80,
"IpRanges": [{ "CidrIp": "0.0.0.0/0" }]
// ↑ HTTP: 全世界から許可
},
{
"IpProtocol": "tcp",
"FromPort": 443, "ToPort": 443,
"IpRanges": [{ "CidrIp": "0.0.0.0/0" }]
// ↑ HTTPS: 全世界から許可
}
],
// ── Outbound Rules(送信) ──
"IpPermissionsEgress": [
{
"IpProtocol": "-1",
"IpRanges": [{ "CidrIp": "0.0.0.0/0" }]
// ↑ 全トラフィック許可(デフォルト)
}
]
}
AWS CLIでSGルールを追加
// SSHを社内IPのみ許可
$ aws ec2 authorize-security-group-ingress \
--group-id sg-0abc1234 \
--protocol tcp --port 22 \
--cidr 203.0.113.0/24
// HTTPSを全世界に許可
$ aws ec2 authorize-security-group-ingress \
--group-id sg-0abc1234 \
--protocol tcp --port 443 \
--cidr 0.0.0.0/0

🔑
キーペア

キーペアはSSH公開鍵認証に使われるリソースです。AWSが公開鍵をインスタンス内の~/.ssh/authorized_keysに配置し、ユーザーは秘密鍵(.pem)を使ってログインします。

秘密鍵の管理

秘密鍵はキーペア作成時に一度だけダウンロードできます。紛失するとAWSから再ダウンロードできず、通常のSSH接続は不可能になります。秘密鍵は安全な場所に保管し、ファイルパーミッションをchmod 400に設定する必要があります。

複数インスタンスでの共有

同じキーペアを複数のインスタンス起動時に指定できます。開発環境のサーバー群に同じキーペアを使い、1つの秘密鍵ですべてにSSH接続するといった運用が可能です。ただし本番環境では、用途ごとにキーペアを分けるのがセキュリティ上望ましいです。

キーペア不要の代替手段

EC2 Instance Connectで一時的なSSHキーを使いブラウザから接続できます。またAWS Systems Manager Session Managerを設定すれば、キーペアなしでもCLIやブラウザからインスタンスにアクセスでき、SSHポート(22番)を開ける必要もなくなります。

// キーペアでSSH接続
$ chmod 400 my-keypair.pem
$ ssh -i my-keypair.pem ec2-user@54.150.x.x
// SSM Session Manager(キーペア不要)
$ aws ssm start-session \
--target i-0abcdef1234567890

🏷
インスタンスIDとリソースID

AWSの各リソースには一意のIDが付与されます。IDのプレフィックスでリソース種別を識別できます。たとえばi-で始まればEC2インスタンス、vol-ならEBSボリュームです。

これらのIDはAWS CLI・CloudFormation・CloudTrailなど、あらゆる場面で使われます。障害調査の際にCloudTrailログからeni-0abc...のようなIDが出てきた場合、プレフィックスを見るだけで「これはENI関連の操作だ」と即座に判断できます。IDの命名規則を覚えておくと、ログの読解速度が格段に上がり、SAA試験でもリソース間の関係を素早く把握できるようになります。

AWS Resource IDsi-Instanceami-AMIvol-EBSeni-ENIsg-SGkey-KeyPair
i-EC2インスタンスi-0abcdef1234567890
ami-AMIami-0abc1234def56789
vol-EBSボリュームvol-root001
eni-ENIeni-0abc1234def
sg-セキュリティグループsg-0abc1234
key-キーペアkey-0abc1234def56789

📝
AWS 認定試験(SAA)レベルの問題

Q1.EC2インスタンスのセキュリティグループは、実際にはどのリソースに紐付いていますか?
A.EC2インスタンス
B.サブネット
C.ENI(Elastic Network Interface)
D.VPC
Q2.EC2インスタンスを終了(terminate)した場合、デフォルト設定で削除されないリソースはどれですか?
A.ルートEBSボリューム
B.プライマリENI
C.追加EBSボリューム
D.インスタンスメタデータ

関連コンテンツ