Amazon ECS
Docker コンテナのデプロイ、管理、スケーリングを行うフルマネージドなコンテナオーケストレーションサービスで、Fargate と EC2 の 2 つの起動タイプを提供する
概要
Amazon Elastic Container Service (ECS) は、Docker コンテナを大規模に実行・管理するためのフルマネージドなコンテナオーケストレーションサービスです。タスク定義でコンテナイメージ、CPU/メモリ要件、ネットワーク設定、ログ設定などを宣言的に定義し、サービスとしてデプロイすることで、指定した数のタスクが常に実行されるよう自動管理されます。Fargate 起動タイプではインフラ管理が不要で、EC2 起動タイプではインスタンスの詳細な制御が可能です。ALB や NLB との統合によるトラフィック分散、Auto Scaling によるタスク数の自動調整、ECR (Elastic Container Registry) からのコンテナイメージの取得、CloudWatch によるモニタリングとログ管理など、コンテナ運用に必要な機能が統合されています。ECS Exec を使えば、実行中のコンテナに直接接続してデバッグすることも可能です。
ECS のタスク定義とサービス設計
ECS のタスク定義は、1 つ以上のコンテナの実行方法を定義する JSON テンプレートです。各コンテナにはイメージ URI、CPU/メモリの割り当て、ポートマッピング、環境変数、ログドライバー、ヘルスチェックなどを設定します。サイドカーパターンを使えば、メインのアプリケーションコンテナに加えて、ログ収集 (Fluent Bit)、プロキシ (Envoy)、モニタリングエージェントなどの補助コンテナを同一タスク内で実行できます。ECS サービスはタスク定義に基づいて指定数のタスクを維持し、タスクが異常終了した場合は自動的に新しいタスクを起動します。ローリングアップデートにより、新しいバージョンのタスクを段階的にデプロイし、ダウンタイムなしでアプリケーションを更新できます。Blue/Green デプロイメントは CodeDeploy との統合で実現でき、トラフィックの段階的な切り替えとロールバックが可能です。
Azure Container Apps との比較
Azure で ECS に対応するサービスは Azure Container Apps と Azure Container Instances (ACI) です。Azure Container Apps は Kubernetes ベースのマネージドコンテナプラットフォームで、ECS と同様にコンテナのデプロイとスケーリングを簡素化します。ECS は AWS 独自のオーケストレーションエンジンを使用するのに対し、Azure Container Apps は内部的に Kubernetes (AKS) を使用しています。ECS の強みは、Fargate と EC2 の 2 つの起動タイプを柔軟に切り替えられる点です。Fargate でサーバーレス運用を行いつつ、GPU が必要なワークロードだけ EC2 起動タイプに切り替えるといった使い分けが可能です。Azure Container Apps にはこのような起動タイプの選択肢がなく、GPU ワークロードには AKS を使用する必要があります。料金面では、ECS 自体は無料で、Fargate または EC2 のリソース料金のみが発生します。Azure Container Apps は vCPU 秒あたり約 0.000024 ドル + メモリ GiB 秒あたり約 0.000003 ドルの課金です。