SJ blog
backend
A

信頼度ランク

S 公式ソース確認済み
A 成功実績多数・失敗例少数
B 賛否両論
C 動作未確認・セキュリティリスク高
Z 個人所感

ECS vs EKS — コンテナオーケストレーション選択基準

Amazon ECSとEKSの設計哲学の違い、管理オーバーヘッド、スケーリング機能、ネットワーキング、コスト、ポータビリティの観点での比較と選択基準を解説。

一言結論

ECSはAWS専用でコントロールプレーン無料・学習コスト低のシンプルさが強みであり、EKSはKubernetesエコシステムとマルチクラウドポータビリティが強みだが月$73のコントロールプレーン費用がかかるため、チームのK8sスキルとマルチクラウド要件がない場合はECSが合理的な選択だ。

ECS と EKS の基本比較

特徴ECSEKS
オーケストレーターAWS独自Kubernetes
管理の複雑さシンプル高い(K8sの知識が必要)
コントロールプレーンマネージド(追加料金なし)マネージド($0.10/時間)
学習コスト
ポータビリティAWS専用マルチクラウド対応
エコシステムAWS統合に優れるKubernetesエコシステム
Fargate対応✅(Fargate Profile)

ECS のアーキテクチャ

ECSクラスター
  ├── EC2起動タイプ: ECS Agent がインストールされたEC2インスタンス
  │     → ユーザーがEC2を管理(AMI更新、パッチ等)

  └── Fargate起動タイプ: サーバーレス
        → インフラ管理不要
        → タスク定義でCPU/メモリを指定

ECSの特徴:
  - タスク定義 = Dockerコンテナの仕様書
  - サービス = タスクの実行数管理
  - クラスター = リソースのグループ
  - ELBとのネイティブ統合が容易

EKS のアーキテクチャ

EKSクラスター
  ├── コントロールプレーン(AWSマネージド): APIサーバー、etcd等

  └── データプレーン(ユーザー管理)
        ├── マネージドノードグループ(EC2)
        │     → EC2の管理をAWSが補佐
        ├── セルフマネージドノード
        │     → EC2をフルコントロール
        └── Fargate Profile
              → サーバーレスノード

EKSの主要コンポーネント:
  Pod: コンテナの最小デプロイ単位
  Deployment: Podのレプリカ管理
  Service: Pod群へのアクセスエンドポイント
  Ingress: L7ルーティング(ALBと統合)

ネットワーキングの違い

ECS(awsvpcモード):
  → タスクごとにENIを割り当て
  → AWSセキュリティグループを直接適用
  → シンプルなVPC統合

EKS:
  → Pod IPはVPC IPアドレスを使用(Amazon VPC CNI)
  → NetworkPolicyで細かいPod間通信制御
  → Calico/Cilium等のCNIプラグインも選択可能

EKS + ALB Ingress(AWS Load Balancer Controller):
  → K8s Ingressリソースが自動的にALBを作成
  → アノテーションでALBの設定を制御
# EKS Ingress の設定例
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
  - http:
      paths:
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: api-service
            port:
              number: 8080

スケーリングの違い

ECS のスケーリング:
  Application Auto Scaling → タスク数をスケーリング
  → CPU/メモリ/カスタムメトリクスでスケール
  
EKS のスケーリング:
  Horizontal Pod Autoscaler (HPA) → Podをスケーリング
  Cluster Autoscaler → ノード(EC2)をスケーリング
  KEDA → イベント駆動スケーリング(SQSキュー深度等)
  
Karpenter(EKS向け):
  → ノードプロビジョニングの自動化
  → Spot + On-Demand の混在が容易
  → より高速なスケールアウト

コスト比較

ECS:
  コントロールプレーン: 無料
  EC2起動タイプ: EC2インスタンス料金のみ
  Fargate: タスクのCPU/メモリに対して課金

EKS:
  コントロールプレーン: $0.10/時間 = 約$73/月/クラスター
  EC2ノード: EC2インスタンス料金
  Fargate: タスクのCPU/メモリに対して課金
  
開発環境でのEKSコスト削減:
  → 夜間にノードグループを0にスケールダウン
  → ただしコントロールプレーン費用は発生し続ける

選択ガイドライン

ECSを選ぶべきケース:
  ✅ AWS専用で開発・運用する場合
  ✅ Kubernetesの知識がないチーム
  ✅ シンプルさを優先する場合
  ✅ 小〜中規模のサービス
  ✅ コスト最小化(コントロールプレーン無料)

EKSを選ぶべきケース:
  ✅ マルチクラウドまたはオンプレミスへの移植性が必要
  ✅ Kubernetesエコシステム(Istio, Helm, Argo CD等)を活用したい
  ✅ 既存のKubernetesワークロードを移行する
  ✅ Service Meshが必要(Istio/App Mesh)
  ✅ 高度なカスタムスケーリング要件

試験頻出ポイント

シナリオ回答
AWSネイティブでシンプルなコンテナ実行ECS
KubernetesワークロードをAWSで実行EKS
コントロールプレーンの料金ECS: 無料、EKS: $0.10/時間
EKSでポッド間通信制御NetworkPolicy(Calico等)
サーバーレスでコンテナを実行ECS Fargate または EKS + Fargate Profile

まとめ

ECSはAWSネイティブでシンプルな管理、EKSはKubernetesの豊富なエコシステムと移植性を提供する。チームのスキル、マルチクラウド要件、エコシステム活用の必要性で選択する。コストを重視するならECSが有利だ。