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 の関連書籍も参考になる。