AWS EC2
AWS EC2
目次

Amazon EC2徹底解説:GCP Compute Engine・Azure VMとの実務比較で迷わない仮想サーバー設計

はじめに(要点サマリー)

  • 本記事は、AWSのAmazon EC2を中心に、Google Compute Engine(GCE)Azure Virtual Machines(Azure VM)同等機能比較までをまとめた、現場でそのまま使える実務ガイドです。
  • 先に結論:**可用性と拡張性の“王道IaaS”**はEC2を核に、Auto Scaling Group+ELB+Launch Templateで標準化するのが安定。**GCEはカスタムマシンタイプ(vCPU/メモリの細粒度指定)**が強み、AzureはAD/AADや仮想ネットワーク統合が自然で企業ガバナンスに馴染みます。
  • 設計の肝は、インスタンス選定・ストレージ設計・ネットワーク/セキュリティ・スケーリング/可用性・運用自動化の5点。
  • いますぐ使えるCLIサンプル(EC2/GCE/Azure VMの3クラウド対比)、ユーザーデータ(cloud-init)ASG/スケール設計の型運用チェックリストを収録しました。
  • 読者像:情報システム部門のクラウド移行担当、Web/業務アプリ開発者、SRE/インフラエンジニア、セキュリティ/ガバナンス担当、スタートアップの技術リーダー。オンプレVMのリフト&シフトから、モダンなスケール設計までの全体像を素早く掴みたい方向けです。

1. Amazon EC2とは:IaaSの基本から“いま使うべき型”まで

Amazon Elastic Compute Cloud(EC2)は、仮想サーバー(IaaS)をオンデマンドで提供するサービスです。AMI(マシンイメージ)を元にインスタンスを起動し、VPC/サブネット/セキュリティグループでネットワーク境界を定義します。
近年のEC2は
Nitroベースの仮想化
が一般化しており、安定した性能・セキュアな分離・柔軟なENA(高速ネットワーク)を前提に設計できます。可用性は複数AZ分散を基本とし、Auto Scaling Group(ASG)Elastic Load Balancing(ELB)を組み合わせることで、障害時の自己回復需要変動への追従が容易になります。

実務では、Launch Template起動パラメータ(AMI/タイプ/ディスク/ユーザーデータ/ロール)を標準化し、ASG最小・希望・最大の台数管理、ターゲット追跡スケーリングでCPUやリクエストレイテンシの目標値に合わせて自動変動させる構成が“定番”です。


2. 代表ユースケース(設計の型と比較観点)

  1. Web/APIの可用性重視クラスター
    • ASG+ALB(HTTP/HTTPS)でスケール、複数AZへ分散。ストレージはEBSルート+外部状態はRDS/ElastiCache/EFSへ。
    • GCEならManaged Instance Group(MIG)+HTTP(S) Load BalancingAzureならVirtual Machine Scale Sets(VMSS)+Application Gateway/Front Doorが同等の型です。
  2. バッチ処理・ジョブ実行
    • Spotインスタンスでコストを圧縮。中断に強いワークロード(MapReduce、動画変換)に最適。
    • GCEのSpot VM、AzureのSpot VMも同発想。再実行戦略とチェックポイント設計が鍵。
  3. HPC/機械学習
    • 高帯域ネットワーク・GPU/高速ストレージが必要。Placement Group専用ホストでノイズ分離。
    • GCPのA2/A3系やAzureのHB/HC/ND/NC系に相当。選定はネットワーク帯域・GPU世代・ストレージスループットを重視。
  4. 業務サーバーのリフト&シフト
    • まずは**単一AZ×ASG(最小1/最大1)で自己回復性を確保。OS/パッチ配布にSystems Manager(SSM)**を使うと運用が楽になります。
    • GCEはOS Config、AzureはUpdate Management/Automationで同等の運用が可能。

3. インスタンス選定:迷わない5ステップ

目的に合うファミリー適正サイズを選ぶと、性能とコストのバランスが整います。

  1. ファミリー選定
    • 汎用(General Purpose):均衡型。多くのWeb/APIに適合。
    • 計算最適化(Compute Optimized):CPU集約処理。アプリサーバー/ゲームサーバーなど。
    • メモリ最適化(Memory Optimized):インメモリDB/キャッシュ/大規模解析。
    • ストレージ最適化(Storage Optimized):ローカルNVMeが必要なOLAP/ログ処理。
    • アクセラレーテッド(GPU/FPGAなど):AI学習/推論、GPUレンダリング。
  2. ストレージ方式
    • EBS(永続ブロック)か、インスタンスストア(高速・非永続)か。
    • ルートはEBSを基本。一時ファイルやキャッシュのみインスタンスストアを検討。
  3. ネットワーク性能
    • 必要帯域/ppsに応じてENA対応サイズ拡張ネットワークを選定。
  4. 可用性要件
    • 複数AZ前提でASGを組むか、専用ホスト/専有インスタンスでノイズ分離を優先するか。
  5. 料金モデル
    • オンデマンドで検証→Savings Plans/RIで平常稼働を最適化→Spotでバーストやバッチを吸収。

GCE比較:カスタムマシンタイプでvCPU数/メモリGBを細かく指定可能。Azure比較SKU(サイズ)の選択肢が豊富で、Proximity Placement Groupなどレイテンシ最適化の機能が充実。


4. ストレージ設計:EBS/インスタンスストア/EFS/FSxの使い分け

  • EBS(Elastic Block Store)
    • 種別:汎用SSD(gp系)プロビジョンドIOPS(io系)スループット最適化(st)/**コールドHDD(sc)**など。
    • ルート/データディスクに最適。スナップショットで世代管理。暗号化は基本オン。
  • インスタンスストア
    • 物理的に直結された高速NVMe非永続なので再起動/停止で消える。
    • 一時領域・シャッフル・キャッシュに限定して利用。
  • EFS(NFS互換の共有ファイル)/FSx(Windows/Lustre/ONTAP等)
    • アプリ間で共有が必要ならEFS/FSx。スループット/遅延要件で使い分け。

GCEPersistent Disk(PD)Standard/SSD/Extremeなど。Local SSDは超低遅延だが非永続。
AzureManaged Disks(Standard HDD/SSD、Premium/Ultra)。Azure Filesで共有を提供。


5. ネットワーク&セキュリティ:まず固める“4点セット”

  1. VPC/サブネット
    • プライベートサブネット+NAT/プロキシで外部通信。パブリックサブネットは最小限
  2. セキュリティグループ(SG)
    • ステートフルな仮想ファイアウォール。最小許可を貫く。NACLはCIDR単位の補助的コントロール。
  3. アイデンティティ
    • IAMロール(インスタンスプロファイル)資格情報を埋め込まないIMDSv2を強制。
  4. 運用アクセス
    • SSM Session Manager踏み台レスなシェル/ポートフォワード。鍵配布と踏み台の管理を廃止可能。

GCEVPC/Firewallサービスアカウントをインスタンスに付与。OS LoginでIAM連携が簡潔。
AzureVNet/NSG/ASGManaged Identityで資格情報を排除。Bastion/Just-In-Timeで安全接続。


6. 可用性・スケーリング:ASG+ELBを“標準装備”に

  • Auto Scaling Group(ASG)
    • ヘルスチェックで障害インスタンスを自動置換。スケジュール/ターゲット追跡/ステップなどのポリシー。
  • Elastic Load Balancing(ALB/NLB/GWLB)
    • ALB:L7。HTTP/HTTPS、パス/ホストベースルーティング。
    • NLB:L4。超低遅延・固定IP。gRPC/高スループットに強い。
  • マルチAZ/マルチリージョン
    • AZ分散は必須。リージョン跨ぎはRoute 53/ヘルスチェックデータレプリケーションの設計が鍵。

GCEManaged Instance GroupCloud Load Balancing(グローバルHTTP(S))
AzureVMSSApplication Gateway/Load Balancer/Front Door


7. 自動化・ブートストラップ:反復可能な“起動の儀”

  • Launch Template+ユーザーデータ(cloud-init)宣言的初期化
  • AMIベイク(Packerなど)で時間のかかるセットアップを事前焼き込み、起動時間を短縮。
  • Systems Manager(State Manager/Run Command/Patch Manager)構成・パッチの標準化

GCEStartup Script/MetadataInstance Templates
AzureVM Extensions(Custom Script)イメージギャラリー


8. 監視・運用・トレーサビリティ

  • CloudWatch:メトリクス(CPU/ネットワーク/ディスク)とAgentでOSメトリクス/ログ収集。
  • CloudTrail:API操作の証跡。インスタンス/ネットワーク/鍵操作を追跡。
  • SSMインベントリ/脆弱性/パッチ可視化。
  • アラートSLO/SLIを先に決め、アラート閾値ではなくユーザ体験に結び付く指標(p95レイテンシ等)を重視。

GCECloud Monitoring/LoggingOps Agent
AzureAzure Monitor/Log AnalyticsDiagnostic Settings


9. コスト最適化:ブレない打ち手

  • 権利サイズ最適化(Rightsizing):CPU/メモリ/ディスク/ネットワーク使用率を計測し、ひと回り下に。
  • 料金モデルの併用
    • オンデマンド…開発/実験。
    • Savings Plans/Reserved Instances…常時稼働。
    • Spot…バースト/バッチ。
  • スケジュール停止:夜間・休日は自動停止
  • 外部状態を外出し:インスタンスをステートレス化し、スケールダウン置換を容易に。
  • ストレージ最適化:EBS種別の見直し、汎用SSDのIOPS調整不要スナップショット削除

GCECommitted Use Discount+SpotSustained Use Discount(長時間自動割引)
AzureReserved VM Instances+Spot自動停止/スケジュールで同様に効きます。


10. 3クラウド対応での“言い換え”早見(運用の会話を滑らかに)

  • 起動定義:Launch Template(EC2)/Instance Template(GCE)/VMSSのModel+Image(Azure)
  • 自動スケール:ASG(EC2)/MIG(GCE)/VMSS(Azure)
  • L7ロードバランサ:ALB(EC2)/HTTP(S) LB(GCE)/Application Gateway(Azure)
  • 資格情報の受け渡し:IAMロール(EC2)/サービスアカウント(GCE)/Managed Identity(Azure)
  • 踏み台レス接続:SSM Session Manager(EC2)/IAP+OS Login(GCE)/Bastion/Just-in-Time(Azure)

11. 実務サンプル(3クラウド対比で“手が動く”)

11.1 EC2 起動(最小構成・ユーザーデータ付き)

# 1) セキュリティグループ(80/22を例示。22はSSM運用なら省略推奨)
aws ec2 create-security-group \
  --group-name web-sg --description "web sg" --vpc-id vpc-xxxxxxxx

aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxx --protocol tcp --port 80 --cidr 0.0.0.0/0

# 2) キーペア(SSM運用なら作成不要)
aws ec2 create-key-pair --key-name web-key > web-key.pem && chmod 400 web-key.pem

# 3) 起動(Launch Templateを使わない最短例)
cat > user-data.sh <<'EOF'
#cloud-config
packages:
  - nginx
runcmd:
  - systemctl enable nginx
  - systemctl start nginx
EOF

aws ec2 run-instances \
  --image-id ami-xxxxxxxxxxxxxxxxx \
  --instance-type t3.small \
  --subnet-id subnet-xxxxxxxx \
  --security-group-ids sg-xxxxxxxx \
  --iam-instance-profile Name=ec2-app-role \
  --user-data file://user-data.sh \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=web-1}]'

11.2 GCE(同等の最短デプロイ)

gcloud compute instances create web-1 \
  --zone=asia-northeast1-b \
  --machine-type=e2-small \
  --metadata=startup-script='#!/bin/bash
sudo apt -y update && sudo apt -y install nginx
sudo systemctl enable nginx && sudo systemctl start nginx' \
  --tags=http-server

11.3 Azure VM(同等の最短デプロイ)

az group create -n rg-web -l japaneast
az vm create -g rg-web -n web-1 \
  --image UbuntuLTS --size Standard_B1ms \
  --custom-data cloudinit.yaml \
  --admin-username azureuser --generate-ssh-keys
az vm open-port -g rg-web -n web-1 --port 80
# cloudinit.yaml は EC2のcloud-configとほぼ同等

11.4 Auto Scaling(EC2:Launch Template+ASG+ALB要点)

# Launch Template
aws ec2 create-launch-template \
  --launch-template-name web-lt \
  --launch-template-data '{
    "ImageId":"ami-xxxxxxxxxxxxxxxxx",
    "InstanceType":"t3.small",
    "IamInstanceProfile":{"Name":"ec2-app-role"},
    "SecurityGroupIds":["sg-xxxxxxxx"],
    "UserData":"'"$(base64 -w0 user-data.sh)"'"
  }'

# Auto Scaling Group(2AZ分散、ターゲット追跡でCPU50%)
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name web-asg \
  --launch-template LaunchTemplateName=web-lt \
  --min-size 2 --max-size 6 --desired-capacity 2 \
  --vpc-zone-identifier "subnet-a,subnet-b"

aws autoscaling put-scaling-policy \
  --auto-scaling-group-name web-asg \
  --policy-name cpu50 \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{"PredefinedMetricSpecification":{"PredefinedMetricType":"ASGAverageCPUUtilization"},"TargetValue":50.0}'

12. セキュリティと運用ガバナンス:実務の“標準ルール”

  • 公開境界の明確化:ALBはパブリック、EC2はプライベート。直接のインターネット公開は避ける。
  • 資格情報ゼロIAMロール/Managed Identity/サービスアカウントを必ず使用。環境変数やファイルにキーを置かない
  • IMDSv2/メタデータ保護:SSRF対策として必須。GCE/Azureもメタデータアクセスの制御を行う。
  • パッチ運用SSM Patch Manager等で定期スケジュール。緊急時はブルー/グリーンで段階適用。
  • ログの一元化:アプリログはCloudWatch Logs(またはGCE/Azureの相当)へ。構造化ログを前提に可観測性を高める。

13. 可用性設計の実践:3パターン

  1. 標準Web三層
    • ALB→ASG(アプリ)→RDS/EFS/ElastiCacheスケールアウトが基本。
  2. ステートレスAPI+外部認証
    • ALB+Cognito/IdPで認証、ASGイミュータブルデプロイで差分を残さない。
  3. HPC/低レイテンシ
    • Placement Group(Cluster/Spread/Partition)を選択。ストレージはインスタンスストア+並列FS

GCE/Azureでも、LB+スケール群+外部状態(DB/Cache)の分離という骨子は同じです。


14. よくある落とし穴と回避策

  • 単一AZ運用のまま本番化:障害時に全停止。ASG+複数AZを“最低ライン”に。
  • 踏み台サーバーの長期放置:脆弱化の温床。SSM Session Manager/IAP/BastionのJITに移行。
  • インスタンスに秘密情報:環境変数やファイルに鍵。Parameter Store/Secrets Manager/Key Vault/Secret Managerへ移管。
  • ローカルに状態を持つ:スケール不可に。EBS/EFS/オブジェクトストレージ/外部DBへ分離。
  • スナップショット無計画世代/保持期間/タグを決めて運用。不要分は定期削除
  • 監視の“後追い”:ローンチ前にSLO/SLI/アラートを先に定義。

15. 設計チェックリスト(初週で必ず固める)

  • 目標:可用性(AZ分散)/性能(p95)/回復時間/運用境界を数値で定義。
  • インスタンス:ファミリー・サイズ・料金モデルAMI管理ユーザーデータ
  • ストレージ:EBS種別/IOPS/スナップショット/暗号化共有FS要否
  • ネットワーク:VPC/CIDR/サブネット設計SG/NACL/ルートDNS/名前解決
  • セキュリティ:IAMロール/IMDSv2/鍵管理SSMで踏み台レス。
  • スケーリング:ASG台数・ポリシーヘルスチェックデプロイ方式(Rolling/Blue-Green/Canary)
  • 監視:メトリクス/ログ収集/ダッシュボード/アラートトレースの要否。
  • コスト:Rightsizing/停止スケジュール/Spot適用範囲Savings Plans/RIの方針
  • 変更管理:IaC(例:Terraform/CloudFormation/Bicep/DM)レビュー手順
  • 退出計画:AMI/スナップショット/データ移行DNS/証明書/監視のクリーンアップ

16. 運用Runbook(インシデント初動の型)

  1. 検知:アラート内容と影響範囲(AZ/ASG/ターゲット)を即確認。
  2. 自動復旧の確認:ASGの置換が進行しているか、LBの健全ターゲット数を確認。
  3. 一時緩和:スケールアウト閾値を一段下げ、追加キャパシティを投入。
  4. 原因切り分け:直近デプロイ/AMI/ユーザーデータ/外部依存(DB/Cache)を比較。
  5. 恒久対策ヘルスチェックの改善、リソース制限(ulimit)観測点追加を反映。
  6. ふりかえりダッシュボード/Runbookに学びを記録し、タグ/命名/ポリシーを更新。

17. ケーススタディ(3例)

17.1 スタートアップのAPI基盤(短納期)

  • 構成:ALB → ASG(t系汎用) → RDS(マネージド)→ CloudWatch。
  • ポイントAMIベイク+ユーザーデータで再現性。夜間停止でコスト最適化。
  • 他クラウド:GCEはMIG+HTTP(S) LB+Cloud SQL、AzureはVMSS+AppGW+Azure Database

17.2 画像処理バッチ(低コスト重視)

  • 構成:SQS(キュー)→ Spotインスタンス群 → 処理結果はS3へ。
  • ポイント中断ハンドリングリトライチェックポイントをS3に保存。
  • 他クラウド:GCE/AzureのSpot VM+キュー(Pub/Sub/Storage Queue)で同様に実装。

17.3 社内基幹の段階移行(安全重視)

  • 構成:ASG(最小1/最大1)で自己回復→負荷増に応じて段階的に複数AZ
  • ポイントSSMで踏み台レス、パッチ基準日を定義。監査ログは別アカウントに保管。
  • 他クラウド:GCEのOS Config/Shielded VM、AzureのUpdate Management/Defender for Cloudで同水準を維持。

18. 3クラウド比較まとめ(実務の視点)

  • 設計のわかりやすさ:GCE(カスタムタイプが明快) ≧ EC2(型が豊富) ≧ Azure(選択肢が広く設計力次第)
  • 企業ガバナンス/ネットワーク親和性:Azure > EC2 ≧ GCE
  • スケール自動化の成熟度:EC2(ASGの成熟+豊富な実例) ≧ GCE(MIG簡潔) ≧ Azure(VMSS機能充実)
  • 運用の一貫性(踏み台レス/証跡):EC2(SSM/CloudTrail) ≧ Azure(JIT/Bastion/Activity) ≧ GCE(OS Login/IAP/Audit Logs)
  • コスト最適化の柔軟性:EC2(Savings Plans/Spotの組合せ) ≧ GCE(Committed/Sustained/Spot) ≧ Azure(Reserved/Spot)

19. 想定読者と到達ゴール(具体的に)

  • 情報システム部門(オンプレVM移行):EC2へ同等移行→自己回復化→監視/パッチ/証跡の標準化までを、ASG+SSMの型で定着。
  • Web/業務アプリ開発者ステートレスAPI+外部状態分離の原則を身につけ、ローリング/カナリアで安全に出せる。
  • SRE/インフラエンジニアVPC/SG/IMDSv2/ログ集約を前提に、SLOベースのアラートを組める。
  • セキュリティ/ガバナンス担当鍵を置かない・踏み台レス・証跡保存のガードレールを組織標準として定義。
  • スタートアップ技術リーダー最小構成→型化→IaCの順で、小さく始め広く伸びる基盤を短期間で構築。

20. まとめ:EC2は“型”で使うとブレない

Amazon EC2は、ASG+ELB+Launch Templateという再現性の高い型で運用することで、可用性・性能・コストのバランスが取りやすくなります。ストレージはEBS中心に、状態は外部へ退避、アクセスはSSMで踏み台レス。この原則を守るほど、障害時も置換して回復でき、デプロイとスケーリングが怖くなくなります。
マルチクラウドでも、MIG/VMSSに読み替えるだけで同じ設計思想を貫けます。まずは最小構成をIaC化し、計測→権利サイズ最適化→割引適用の順でコストを整えましょう。


付録A:cloud-init(最小Webサーバー)

#cloud-config
package_update: true
packages:
  - nginx
write_files:
  - path: /var/www/html/healthz.html
    content: "ok"
runcmd:
  - systemctl enable nginx
  - systemctl start nginx
  - printf "location /healthz { return 200 'ok'; add_header Content-Type text/plain; }" \
      > /etc/nginx/snippets/healthz.conf
  - 'sed -i "/server_name _;/a include snippets/healthz.conf;" /etc/nginx/sites-available/default'
  - systemctl reload nginx

付録B:セキュリティグループ(最小、ALB経由のみ)

# アプリSG:ALBのSGからの80/TCPのみ許可
APP_SG=$(aws ec2 create-security-group --group-name app-sg --description "app" --vpc-id vpc-xxx --query GroupId --output text)
ALB_SG=$(aws ec2 create-security-group --group-name alb-sg --description "alb" --vpc-id vpc-xxx --query GroupId --output text)
aws ec2 authorize-security-group-ingress --group-id $APP_SG --protocol tcp --port 80 --source-group $ALB_SG
aws ec2 authorize-security-group-ingress --group-id $ALB_SG --protocol tcp --port 80 --cidr 0.0.0.0/0

付録C:Rightsizingの簡易手順(週次)

  1. CloudWatch/MonitoringCPU/メモリ/ディスク/ネットワークを可視化(Agent導入)。
  2. 連続2週間CPU p95 < 40%かつメモリp95 < 60%なら1サイズ縮小を候補化。
  3. 負荷テストで余裕を確認後に縮小。ASGのローリング更新で無停止適用。
  4. 3か月に1度、**割引モデル(Savings/RI/Committed/Reserved)**の適用率を棚卸し。

付録D:デプロイ戦略の雛形(Rolling/Blue-Green/Canary)

  • Rolling:ASGのMaxSurge相当を増やし順次置換。最小リスク。
  • Blue-Green:新ASGを別で用意→ターゲットグループ切替。ロールバック容易。
  • Canary1台→少数→全体。メトリクス/ログ/トレースで段階判断。
  • 共通ヘルスチェックURL/DBマイグレーション順序/Feature FlagをRunbookに明記。

付録E:今日できる3ステップ

  1. Launch Templateを作り、ユーザーデータにcloud-initを入れて再現可能な起動にする。
  2. **ASG(最小1/最大1)**で自己回復だけ先に確保。ALBは次の段階で。
  3. SSM Agent+Session Managerを有効化し、踏み台と鍵配布を廃止。ログ収集も同時に整える。

――これで、EC2の“第二歩”は万全です。次回はAWS Lambdaを予定し、Cloud Functions/Azure Functionsまで横断で比較します。どうぞお楽しみに。

投稿者 greeden

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)