Amazon ECSとは?AWSのコンテナオーケストレーション
Amazon ECS (Elastic Container Service) は、コンテナを実行しスケールするためのAWSネイティブのオーケストレーターで、あなたが管理するEC2インスタンス上か、サーバーレスのFargate上で動きます。
ECSは "コンテナイメージがある、これをスケールで確実に実行したい" というニーズへのAWSの答えです。computeキャパシティ全体にコンテナをスケジュールし、望ましい数のコピーを実行し続け、load balancerと統合し、rolling updatesを処理します。Kubernetesより導入がシンプルでありながら、なお本番グレードです。
ECSの中核概念
- Task definition - コンテナ、イメージ、CPU、メモリを記述するblueprint。
- Task - task definitionの実行中のインスタンス。
- Service - 望ましい数のtasksを健全に、load balancerの背後に保つ。
- Cluster - tasksが実行されるキャパシティの論理的なグループ化。
EC2対Fargateのlaunch type
EC2 launch typeでは、tasksをホストするインスタンスのフリートを管理します。Fargateでは、AWSがtaskごとにcomputeをプロビジョニングし、あなたはサーバーを一切見ません。Fargateは、nodeを管理しない利便性のために、いくらかのコストと制御をトレードオフします。
ECSがどう更新をデプロイするか
新しいtask definitionのリビジョンを登録してserviceを更新すると、ECSはrolling deploymentを実行します: 新しいtasksを起動し、health checksを待ち、それから古いものをドレインして停止します。blue-green rolloutのためにCodeDeployを組み込むこともできます。
networkingとload balancing
ECS serviceは通常、トラフィックを分配しhealth checksを実行するApplication Load Balancerの背後に配置されます。tasksはVPC内で独自のネットワークインターフェースを持つので、EC2と同じようにsecurity groupsとsubnetsを制御します。
CI/CDでの役割
pipelineがDockerイメージをbuildしてECRにpushし、そのイメージタグを指す新しいtask definitionを登録し、update-serviceを呼んでrolling deployをトリガーします。GitHub Actionsは公式のaws-actionsツールでこれを行い、OIDC role経由で認証します。CIを同じAWS regionのrunnerで実行すること (Latchkeyがそうするように) が、ECRへのpushとdeployを高速に保ちます。
重要なポイント
- ECSは、task definitions、tasks、servicesを中心に構築されたAWSのコンテナオーケストレーターです。
- 自己管理のEC2キャパシティ上、またはサーバーレスのFargate上で実行されます。
- pipelineは、ECRにイメージをpushしてECS serviceを更新することでデプロイします。