AWS Fargate によるサーバーレスコンテナ運用 - ECS と EKS での活用パターン
インスタンス管理不要のサーバーレスコンテナで、ECS と EKS での使い分けとタスクサイジングによるコスト最適化を紹介します。
Fargate の仕組みと EC2 起動タイプとの違い
Fargate は ECS と EKS のサーバーレスコンピューティングエンジンです。EC2 起動タイプではコンテナを実行する EC2 インスタンスのプロビジョニング、スケーリング、パッチ適用を自分で管理しますが、Fargate ではこれらが完全に抽象化されます。タスク定義で vCPU (0.25 から 16) とメモリ (0.5 GiB から 120 GiB) を指定するだけで、AWS がコンテナの実行環境を自動的にプロビジョニングします。各タスクは Firecracker ベースの独立した microVM で実行されるため、タスク間のカーネル共有がなく、セキュリティ分離が強化されています。ホスト OS へのアクセスは不可能で、特権コンテナも実行できません。プラットフォームバージョン (ECS) で OS カーネルとランタイムのバージョンを管理し、LATEST を指定すれば自動的に最新の安定版が適用されます。
ECS on Fargate と EKS on Fargate の使い分け
ECS on Fargate は AWS ネイティブのコンテナオーケストレーションで、タスク定義、サービス、クラスタの 3 つの概念でシンプルに運用できます。ALB との統合、Service Connect によるサービスメッシュ、CloudMap によるサービスディスカバリが標準で提供されます。ECS Exec でタスク内のコンテナにインタラクティブシェルを接続し、本番環境のデバッグが可能です。EKS on Fargate は Kubernetes の Pod を Fargate 上で実行します。Fargate Profile で名前空間とラベルセレクタを定義し、条件に一致する Pod が自動的に Fargate にスケジュールされます。Kubernetes のエコシステム (Helm、Argo CD、Prometheus など) を活用したい場合や、マルチクラウドでの Kubernetes 標準化を進めている場合に選択します。ただし、EKS on Fargate では DaemonSet が使用できない、EBS ボリュームがマウントできない (EFS は可)、GPU インスタンスが利用できない、Pod ごとに ENI が割り当てられるため起動が EC2 ノードより遅いなどの制約があります。
コスト最適化
Fargate の料金は vCPU 秒とメモリ GB 秒の従量課金です。タスクのサイジングを適切に行うことがコスト最適化の鍵です。CloudWatch Container Insights で実際の CPU・メモリ使用率を計測し、過剰にプロビジョニングされたタスクのリソースを削減します。Fargate Spot はオンデマンドの最大 70% 割引で利用でき、中断時に SIGTERM シグナルが送信されてから 30 秒の猶予があります。キューベースのワーカーやバッチ処理など、中断耐性のあるワークロードに適しています。Compute Savings Plans は Fargate、Lambda、EC2 に横断的に適用でき、1 年コミットメントで最大 50% の割引を受けられます。 Fargate について体系的に学びたい方は、関連書籍 (Amazon)も参考になります。
設計のベストプラクティスと落とし穴
タスクの vCPU とメモリの組み合わせには有効な値のマトリクスが存在し、任意の組み合わせは指定できません (例: 0.25 vCPU では 0.5/1/2 GiB のみ選択可)。ヘルスチェックの猶予期間 (healthCheckGracePeriodSeconds) を適切に設定しないと、起動の遅いコンテナがヘルスチェック失敗で即座に停止・再起動を繰り返す無限ループに陥ります。タスクのエフェメラルストレージはデフォルト 20 GiB (最大 200 GiB) で、タスク終了時に消失するため永続データには EFS または S3 を使用します。awsvpc ネットワークモードは必須であり、各タスクに ENI が割り当てられるため、サブネットの IP アドレス枯渇に注意が必要です。大量のタスクを実行する場合は /19 以上の CIDR を確保するか、ENI Trunking を有効化してください。
Fargate と App Runner の比較
App Runner は Fargate よりさらに抽象度が高いコンテナサービスで、ソースコードまたはコンテナイメージから自動的にビルド・デプロイ・スケーリングを行います。VPC 設定やタスク定義が不要で、Web アプリケーションや API を最短でデプロイできます。一方 Fargate は VPC 内の配置、セキュリティグループの細かい制御、サイドカーコンテナ、複数コンテナのタスク定義、EFS マウント、GPU (EC2 起動タイプ) など高度なネットワーキングとカスタマイズが可能です。定常トラフィックの Web API であれば App Runner、バッチ処理・マルチコンテナ構成・VPC 内リソースへの直接アクセスが必要なワークロードでは ECS on Fargate が適しています。EKS on Fargate は既存の Kubernetes マニフェストやツールチェインを流用したいケースで選択します。
まとめ
Fargate はコンテナ運用からインフラ管理を排除するサーバーレスコンピューティングエンジンです。ECS on Fargate でシンプルに始め、Kubernetes が必要になったら EKS on Fargate に移行できます。Fargate Spot と Savings Plans を活用してコストを最適化し、Container Insights でリソース使用率を継続的にモニタリングすることが重要です。サブネットの IP 枯渇、vCPU/メモリの有効な組み合わせ、ヘルスチェック設定といった典型的な落とし穴を理解しておくことで、安定した本番運用が実現します。