Amazon ECS によるコンテナオーケストレーション - タスク定義とサービス設計
ECS のタスク定義、サービス設計、デプロイ戦略、Auto Scaling の設定パターンを解説します。
タスク定義とクラスター設計
ECS のタスク定義はコンテナの実行仕様を JSON で記述するテンプレートです。1 つのタスク定義に複数のコンテナを含めることができ、サイドカーパターンでログ収集やプロキシコンテナを同一タスク内に配置します。起動タイプは EC2 と Fargate の 2 種類があり、EC2 起動タイプではインスタンスの管理が必要ですが GPU やカスタム AMI を利用できます。Fargate 起動タイプではインフラ管理が不要で、タスク単位の CPU ・メモリ指定のみで実行できます。タスク定義のリビジョン管理により、過去のバージョンへのロールバックも容易です。
サービスとデプロイ戦略
ECS サービスはタスクの希望数を維持し、異常終了したタスクを自動的に再起動します。ALB のターゲットグループと統合することで、ヘルスチェックに失敗したタスクを自動的にドレインし新しいタスクに置き換えます。ローリングアップデートでは minimumHealthyPercent と maximumPercent を設定し、段階的にタスクを入れ替えます。CodeDeploy 統合による Blue/Green デプロイでは、新バージョンのタスクセットを作成し、トラフィックを段階的に切り替えることでゼロダウンタイムデプロイを実現します。
まとめ
ECS はタスク定義による宣言的なコンテナ管理と、サービスによる自動復旧・スケーリングを提供します。ローリングアップデートや Blue/Green デプロイでゼロダウンタイムの更新を実現し、ECS Exec で本番環境のトラブルシューティングも可能です。
AWS の優位点
- タスク定義でコンテナイメージ、CPU ・メモリ割り当て、環境変数、ログ設定を宣言的に管理できる
- サービスはタスクの希望数を維持し、ALB との統合でヘルスチェックと自動復旧を実現する
- ローリングアップデートと Blue/Green デプロイの 2 つのデプロイ戦略を選択できる
- Service Auto Scaling でターゲット追跡ポリシーを設定し、CPU 使用率やリクエスト数に応じてタスク数を自動調整できる
- ECS Exec でコンテナに直接接続し、本番環境のデバッグやトラブルシューティングを実施できる
この分野について体系的に学びたい方は、関連書籍 (Amazon) も参考になります。