ECS Fargate
AWSが提供するサーバーレスのコンテナ実行環境。コンテナオーケストレーションの仕組みを持ちながら、ホストマシンの管理が不要な点が特徴。
概念モデル
ECS Fargateのリソースは3層で捉えると理解しやすい:
┌─────────────────────────────────────────┐
│ トラフィック層 │
│ Route53 → ALB → TargetGroup │
├─────────────────────────────────────────┤
│ コンテナ層 │
│ Cluster → Service → Task → Container │
├─────────────────────────────────────────┤
│ 基盤層 │
│ VPC, Subnet, SG, IAM, ECR, Logs │
└─────────────────────────────────────────┘
このインフラの層構造は依存関係の方向を示しており、下から順に構築する。
主要概念
コンテナ層のリソース
- Cluster: タスクとサービスを論理的にグループ化する「箱」
- Task Definition: コンテナの設計図。CPU/メモリ、イメージ、ログ設定などを定義。リビジョン管理される
- Service: タスクを指定数だけ実行し続ける責務を持つ。ローリングアップデートも担当
- Task: 実際に起動するコンテナの実行単位
FargateではnetworkMode: awsvpcが固定であり、各タスクがENI(Elastic Network Interface)を持つ。
2つのIAMロール
ECSではIAMロールの責務分離パターンを採用している:
| ロール | 使用者 | 用途 |
|---|---|---|
| Task Execution Role | ECSエージェント(AWS管理) | ECRからのイメージ取得、CloudWatch Logsへの書き込み |
| Task Role | コンテナ内のアプリケーション | S3、DynamoDB等のAWSリソースアクセス |
この分離により、コンテナ基盤の権限とアプリケーションの権限を独立して管理できる。最小権限の原則に基づき、Task Roleはアプリが必要とする最小限のポリシーを付与する。
ユースケース別の構成
| ユースケース | 特徴 |
|---|---|
| Webアプリ | ALB → Service → Task。複数AZ・オートスケーリング |
| バッチ処理 | EventBridge → RunTask。完了後にタスクが終了 |
| 内部API | Service Connect or Cloud Map でサービス名解決 |
| ワーカー | SQSポーリング。キュー深さに応じてAuto Scaling |
Fargateとサーバーレスの違い
Fargateは「コンテナのサーバーレス」ではあるが、Lambda等のFunction as a Serviceとは異なる:
- 常時起動するサービスを維持できる
- コンテナイメージをそのまま実行できる
- コールドスタートが比較的遅い