EC2 + AMI — 仮想サーバの土台
概要
Amazon EC2 (Elastic Compute Cloud) は AWS 最古参のサービスで、Linux / Windows の仮想サーバを必要なスペック・台数で立ち上げられる仕組みです。 AWS で何かをする時の最も基本的なコンピュート要素で、サーバレス全盛の今でも以下のシーンで現役です。
- レガシーアプリ移行(オンプレ → AWS のリフト&シフト)
- 常駐プロセス(バッチ、デーモン、Game サーバ)
- Lambda の制約(15 分タイムアウト、メモリ 10GB)に収まらない処理
- GPU / 大容量メモリが必要なワークロード(ML 推論、解析)
AMI (Amazon Machine Image) は EC2 起動のテンプレ。OS + 初期設定 + 必要ソフトを含むスナップショットで、これを元に何台でも同じ EC2 を立てられます。
主な機能
- Instance Type — t3 (汎用)、c7g (CPU 重視)、r7g (メモリ重視)、g5 (GPU)、m7i (バランス) 等。Graviton (ARM) 系は同性能で安い。
- EBS (Elastic Block Store) — EC2 にアタッチするブロックストレージ。gp3 / io2 / st1。停止しても残るが、未アタッチでも課金。
- AMI — Amazon Linux 2023 / Ubuntu / RHEL / Windows Server。自前で作成も可能。
- Security Group (SG) — ステートフルなネットワーク ACL。Inbound/Outbound ルール、SG 同士の参照が推奨。
- User Data — 起動時に実行されるシェルスクリプト。初期設定の自動化に。
- Instance Profile — EC2 に IAM Role を渡す仕組み。コードに認証情報を書かずに済む。
- SSM Session Manager — 鍵不要で EC2 に shell に入れる機能。SSH 22 ポート開放が不要に。
- Auto Scaling Group — 負荷に応じて EC2 を自動増減。
- Spot Instance — 余剰キャパシティを最大 90% OFF で使う。中断耐性のあるバッチ向け。
使うべきパターン
- レガシーアプリ移行 — Lambda / コンテナ化が困難なものを EC2 に乗せて運用負荷を AWS に寄せる。
- 常駐デーモン / Game サーバ — TCP 接続が長時間維持される系。
- 大量バッチ — Spot Instance + Auto Scaling で最安実装。
- GPU が必要 — g5 系インスタンスで ML 推論。
使わない方が良いパターン
- イベントドリブンな関数実行 — Lambda / Step Functions の方がコスト・運用負荷が圧倒的に低い。
- 新規プロジェクトの API バックエンド — API Gateway + Lambda + DynamoDB のサーバレスを第一候補に。
- 個人ポートフォリオ系 — t3.nano でも月数百円かかる。S3 + CloudFront で済ませた方が安い。
- SSH 22 を 0.0.0.0/0 で開けたい — 鉄板の事故源。SSM Session Manager で代替。
Terraform 最小サンプル(SSM 接続可能な EC2)
data "aws_ami" "al2023" {
most_recent = true
owners = ["amazon"]
filter {
name = "name"
values = ["al2023-ami-*-x86_64"]
}
}
resource "aws_iam_role" "ec2" {
name = "ec2-ssm-role"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [{
Effect = "Allow"
Principal = { Service = "ec2.amazonaws.com" }
Action = "sts:AssumeRole"
}]
})
}
resource "aws_iam_role_policy_attachment" "ssm" {
role = aws_iam_role.ec2.name
policy_arn = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
}
resource "aws_iam_instance_profile" "ec2" {
name = "ec2-ssm-profile"
role = aws_iam_role.ec2.name
}
resource "aws_security_group" "web" {
name = "web-sg"
vpc_id = var.vpc_id
egress {
from_port = 0; to_port = 0; protocol = "-1"
cidr_blocks = ["0.0.0.0/0"]
}
# SSH を開けない (SSM で入る)
}
resource "aws_instance" "web" {
ami = data.aws_ami.al2023.id
instance_type = "t3.micro"
subnet_id = var.private_subnet_id
vpc_security_group_ids = [aws_security_group.web.id]
iam_instance_profile = aws_iam_instance_profile.ec2.name
tags = { Name = "web-01" }
}
用語集
- EC2
- Elastic Compute Cloud。AWS の仮想サーバサービス。
- AMI
- Amazon Machine Image。EC2 起動のテンプレ。OS + ソフトを含むスナップショット。
- EBS
- Elastic Block Store。EC2 にアタッチするブロックストレージ。gp3 / io2 / st1 が主要。
- Instance Type
- EC2 のスペック区分。t3/m6i/c7g 等。世代 (数字) と用途文字 (t,m,c,r,g) で構成。
- Graviton (ARM)
- AWS 自社製 ARM プロセッサ。x86 より 20% 程度安く、性能比は同等以上のことも。
- Security Group
- EC2 のステートフルなネットワーク ACL。Inbound/Outbound ルールを書く。
- User Data
- EC2 起動時に実行されるシェルスクリプト。初期設定の自動化。
- Instance Profile
- EC2 に IAM Role を渡す仕組み。コードに認証情報を書かずに済む。
- SSM Session Manager
- SSM Agent + IAM 経由で EC2 に shell 接続。SSH 鍵 / 22 開放不要。
- Auto Scaling Group
- 負荷に応じて EC2 台数を自動増減する仕組み。
- Spot Instance
- 余剰キャパシティを最大 90% OFF で使えるが、2 分前通知で中断される。