ECS

AWS のマネージドコンテナオーケストレーションサービスで、Docker コンテナを実行・管理する

AWSコンテナ

ECS とは

Amazon ECS (Elastic Container Service) は、Docker コンテナを実行・管理するマネージドコンテナオーケストレーションサービスである。Fargate (サーバーレス) または EC2 上でコンテナを実行する。

Fargate vs EC2

観点 Fargate EC2
サーバー管理 不要 必要 (OS パッチ等)
スケーリング タスク単位 インスタンス + タスク
コスト vCPU + メモリ時間課金 インスタンス時間課金
GPU 非対応 対応
推奨 ほとんどのケース GPU、大量コンテナ

ECS の構成要素

ECS はクラスター (コンテナの実行環境)、タスク定義 (コンテナの設定: イメージ、CPU、メモリ)、タスク (タスク定義のインスタンス、実行中のコンテナ)、サービス (タスクの数を維持し ALB と連携) で構成される。

タスク定義

{
  "family": "my-api",
  "cpu": "256",
  "memory": "512",
  "containerDefinitions": [{
    "name": "app",
    "image": "123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/myapp:latest",
    "portMappings": [{ "containerPort": 3000 }],
    "logConfiguration": {
      "logDriver": "awslogs",
      "options": {
        "awslogs-group": "/ecs/my-api",
        "awslogs-region": "ap-northeast-1"
      }
    }
  }]
}

Lambda との使い分け

観点 Lambda ECS (Fargate)
実行時間 最大 15 分 無制限
スケーリング ミリ秒 (自動) 分 (Auto Scaling)
コスト (低トラフィック) 安い 高い (常時稼働)
コスト (高トラフィック) 高くなる場合あり 安定
用途 API、イベント処理 常時稼働サービス、バッチ

EKS との使い分け

観点 ECS EKS
学習コスト 低い 高い (Kubernetes)
エコシステム AWS 固有 Kubernetes 標準
ポータビリティ AWS のみ マルチクラウド
推奨 AWS に閉じたプロジェクト K8s の知識があるチーム

デプロイ

# AWS Copilot でデプロイ (最もシンプル)
copilot svc deploy

# SAM + ECS (CloudFormation)
sam deploy

ECS の関連書籍も参考になる。

関連用語