AWS ECS(Elastic Container Service)は、Dockerコンテナをクラウド上で動かすためのAWSのサービス。まずコンテナの概念から整理して、ECSの全体像を見ていく。
登場人物の整理
ECSには4つの重要な概念がある。
Container(コンテナ) は、アプリとその動作に必要なものをまとめてパッケージした箱。「どのマシンでも同じように動く」のが最大の特徴だ。
Task(タスク) は、1つ以上のコンテナをセットで動かす実行単位。たとえば「アプリ本体コンテナ」と「ログ収集コンテナ」をまとめて1つのタスクにする。
Task Definition(タスク定義) は、タスクの設計図。「このDockerイメージを使う」「CPUは0.5vCPU」「メモリは1GB」といった設定を事前に登録しておく。
Service(サービス) は、タスクを管理する仕組み。「このタスクを常に2つ動かし続ける」「1つ落ちたら自動で立ち上げ直す」という制御を担当する。
Task Definition(設計図)
↓ 設計図をもとに
Task(実行単位) ←── Serviceが管理
↓ タスクの中に
Container(コンテナ)が1つ以上
起動タイプの選択
ECSにはコンテナを動かすインフラの違いで2種類ある。
| Fargate | EC2起動タイプ | |
|---|---|---|
| サーバー管理 | 不要(AWSが担当) | 自分で管理 |
| 初期設定 | 少ない | 多い |
| 細かい制御 | 限定的 | 柔軟 |
| コスト | 使った分だけ | EC2インスタンス費用 |
Fargate はサーバーの管理が不要で、AWSが裏側のインフラをすべて面倒みてくれる。「どのサイズのサーバーを何台用意するか」を考えなくていいので、最初はこちらがおすすめ。
EC2起動タイプ は自分でEC2インスタンスを用意してその上でコンテナを動かす。細かい制御ができる分、サーバー管理の手間が増える。
よくある構成例
RailsアプリをFargateにデプロイする場合の典型的な構成。
ECR(コンテナイメージ保存)
↓
ECS Fargate
├── Service
│ └── Task(常時2台)
│ ├── Railsコンテナ
│ └── Nginxコンテナ
└── ALB(ロードバランサー)でアクセスを振り分け
一言でまとめると
「Dockerコンテナを、サーバーの面倒を見ながら安定して動かし続けてくれるサービス」 がECSだ。
RailsアプリをECS Fargateにデプロイするのが、現代のAWSでよく使われる構成。Task DefinitionでCPU・メモリを定義し、Serviceで冗長性を確保する——この流れを押さえておくと、ECSの設定項目が何を指しているかわかりやすくなる。