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の設定項目が何を指しているかわかりやすくなる。