Fargate

コンテナのためのサーバーレスコンピューティングエンジン

AWSコンテナ

Fargate とは

AWS Fargate は、ECS および EKS のコンテナをサーバーレスで実行するコンピューティングエンジンである。EC2 インスタンスのプロビジョニング、パッチ適用、スケーリングが不要で、コンテナの CPU とメモリを指定するだけでタスクが実行される。

EC2 起動タイプとの比較

観点 Fargate EC2 起動タイプ
インフラ管理 不要 EC2 の管理が必要
スケーリング タスク単位で自動 Auto Scaling Group の設定
コスト vCPU + メモリの秒課金 EC2 インスタンス時間課金
GPU 非対応 対応
カスタマイズ 制限あり OS レベルで自由
起動速度 数十秒 インスタンス起動 + タスク配置

Fargate は運用負荷が低い代わりに、同等スペックの EC2 より単価が高い。常時稼働で高負荷なワークロードは EC2 起動タイプ + Savings Plans の方がコスト効率が良い場合がある。

Lambda との使い分け

観点 Lambda Fargate
実行時間 最大 15 分 無制限
メモリ 最大 10 GB 最大 120 GB
コンテナイメージ 10 GB まで 制限なし
同時実行 1000 (デフォルト) タスク数で制御
コールドスタート あり (100ms〜数秒) タスク起動 (数十秒)
課金 リクエスト + 実行時間 vCPU + メモリ (秒)
適用場面 短時間の API、イベント処理 長時間バッチ、常駐サービス

15 分以内で完了するイベント駆動の処理は Lambda、それ以上の長時間処理や常駐サービスは Fargate が適する。

Fargate Spot

Fargate Spot は、AWS の余剰キャパシティを使って最大 70% 割引でタスクを実行する。中断される可能性があるため、バッチ処理やキューワーカーなど中断耐性のあるワークロードに適する。

ECS on Fargate の構成

[ALB][ECS Service (Fargate)]
              ├── Task A (vCPU: 0.5, Memory: 1GB)
              ├── Task B (vCPU: 0.5, Memory: 1GB)
              └── Task C (vCPU: 0.5, Memory: 1GB)

ECS Service がタスクの数を維持し、ALB がトラフィックを分散する。タスク定義で CPU、メモリ、コンテナイメージ、環境変数を指定する。

よくある落とし穴

  • ENI の制限: Fargate タスクは 1 つの ENI を使用する。VPC のサブネットに十分な IP アドレスが必要
  • イメージプルの時間: 大きなコンテナイメージはタスク起動が遅くなる。ECR にイメージを置き、マルチステージビルドでイメージを軽量化する
  • ログの設定漏れ: awslogs ログドライバーを設定しないと、コンテナのログが消失する

関連書籍も参考になる。

関連用語