EC2 + AMI — 仮想サーバの土台

概要

Amazon EC2 (Elastic Compute Cloud) は AWS 最古参のサービスで、Linux / Windows の仮想サーバを必要なスペック・台数で立ち上げられる仕組みです。 AWS で何かをする時の最も基本的なコンピュート要素で、サーバレス全盛の今でも以下のシーンで現役です。

AMI (Amazon Machine Image) は EC2 起動のテンプレ。OS + 初期設定 + 必要ソフトを含むスナップショットで、これを元に何台でも同じ EC2 を立てられます。

主な機能

使うべきパターン

使わない方が良いパターン

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 分前通知で中断される。