AWS Fargate によるサーバーレスコンテナ運用 - ECS と EKS での活用パターン
インスタンス管理不要のサーバーレスコンテナで、ECS と EKS での使い分けとタスクサイジングによるコスト最適化を紹介します。
Fargate の仕組みと EC2 起動タイプとの違い
Fargate は ECS と EKS のサーバーレスコンピューティングエンジンです。EC2 起動タイプではコンテナを実行する EC2 インスタンスのプロビジョニング、スケーリング、パッチ適用を自分で管理しますが、Fargate ではこれらの管理を AWS に任せられます。タスク定義で 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 は通常の Fargate の料金から最大 70% 割引で利用でき、中断時に SIGTERM シグナルが送られてからコンテナが強制停止されるまでの猶予は既定で 30 秒です。キューベースのワーカーやバッチ処理など、中断耐性のあるワークロードに適しています。Compute Savings Plans は Fargate、Lambda、EC2 に横断的に適用でき、1 年または 3 年のコミットメントで Fargate の利用に最大 50% の割引を受けられます。
設計のベストプラクティスと落とし穴
タスクの 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 (新規顧客の受け付けを終了) は、ソースコードまたはコンテナイメージからビルド / デプロイ / スケーリングを自動で行うコンテナサービスです。既に利用している場合は、VPC 設定やタスク定義なしで Web アプリケーションや API を公開する使い方もあります。一方 Fargate は VPC 内の配置、セキュリティグループの細かい制御、サイドカーコンテナ、複数コンテナのタスク定義、EFS マウントなど高度なネットワーキングとカスタマイズが可能です。バッチ処理 / マルチコンテナ構成 / VPC 内リソースへの直接アクセスが必要なワークロードには ECS on Fargate が適し、定常トラフィックの Web API は App Runner の既存の利用者の選択肢になります。EKS on Fargate は既存の Kubernetes マニフェストやツールチェインを流用したいケースで選択します。
まとめ
Fargate はコンテナ運用のインフラ管理を AWS 側に移すサーバーレスコンピューティングエンジンです。ECS on Fargate でシンプルに始め、Kubernetes が必要になったら EKS on Fargate に移行できます。コスト面では Fargate Spot と Savings Plans が選択肢になり、リソース使用率は Container Insights で継続的にモニタリングします。サブネットの IP 枯渇、vCPU/メモリの有効な組み合わせ、ヘルスチェック設定といった典型的な落とし穴を理解しておくことが、安定した本番運用の土台になります。
参考資料 (AWS 公式)
本ページの一次情報は AWS 公式サイトと公式ドキュメントです。最新の仕様と料金は次の公式ページで確認できます。
本ページと公式ドキュメントの記述が食い違う場合は、公式ドキュメントを正としてください。