こんにちは。!
以前からAWSの学習をしておりましたが、特に学習初期の頃に「EC2 と ECS(Fargate) の違いって何?」と混乱したことがあったので、自分なりに調べて整理した内容をまとめます。
※こちらは専門家向けではなく、あくまでも初心者目線の記事です。
EC2 とは?
- 仮想サーバーを1台まるごと使えるサービス
- OS から自分で管理(セキュリティパッチ、スケーリング設定など)
- イメージは「オンプレでサーバーを借りる感覚」
メリット
- 自由度が高い
- 既存アプリをそのまま持ち込みやすい
デメリット
- 管理の手間が大きい(インフラ担当が必要になる)
ECS とは?
- Docker コンテナを管理するためのサービス
- コンテナをまとめて動かす「オーケストレーションツール」
ECS には2つの実行基盤ある:
- ECS on EC2 → EC2 インスタンス上でコンテナを動かす
- ECS on Fargate → サーバーレスでコンテナを動かす
Fargate とは?
- ECS の実行基盤のひとつ
- サーバーを意識せずにコンテナを実行できる(サーバーレス)
- 課金は「CPU とメモリのリソース単位」
- スケーリングも AWS が自動でやってくれる
使い分け方法
使う場面 | 向いているサービス |
---|---|
サーバーを細かくチューニングしたい | EC2 |
既存アプリをそのまま動かしたい | EC2 |
コンテナを使いたいがコスト抑えたい | ECS on EC2 |
サクッとコンテナを動かしたい | ECS on Fargate |
サーバー管理をやりたくない | Fargate |
短時間のジョブやイベント駆動処理 | Fargate |
本番環境と開発環境での使い分け
実際にシステムを運用するときは、開発環境 と 本番環境 で選択が変わるケースがある様です。
開発環境(Dev / Staging)
- 小規模で短時間のテストが多い
- サーバー管理に時間をかけたくない
- コストはなるべく抑えたい
→ Fargate が便利
- コンテナを簡単に立ち上げて削除できる
- サーバー設定やスケーリングを気にしなくてよい
- 必要な時だけ課金される
本番環境(Production)
- 常時稼働・安定性が最優先
- トラフィックに応じたスケーリングが必要
- コスト最適化も大事
→ 選択肢は以下の様な状況により異なりそう
- 小〜中規模サービス / 運用リソースが少ない場合 → Fargate
- 大規模サービス / 細かいチューニングやコスト最適化が必要な場合 → ECS on EC2
実務でのよくあるパターン
実際のプロジェクトでは、開発環境は EC2、本番環境は ECS という構成もよく見かけます。(私の現在参画しているプロジェクトもこれに当たります)
理由は、開発環境は「とりあえず動けばよい」ため EC2 の方がシンプルで安く済むからです。
一方で、理想的には開発環境も Fargate を使うとサーバー管理の手間が減るので、
「運用リソースに余裕があるチーム」なら Fargate を採用するのも良いかもしれません。
まとめ
-
EC2 → サーバーを自分で管理したい人向け
-
ECS on EC2 → コンテナ化はしたいけど自由度も欲しい人向け
-
ECS on Fargate → サーバー管理をしたくない人向け
-
開発環境 → サーバー管理レス・安く手軽に → Fargate 向き
-
本番環境 → 安定性やコスト最適化を重視 → Fargate or ECS on EC2 を状況で選択
調べた結果、個人的には、小規模なサービスや検証用なら Fargate が楽だと感じました。
逆に「大規模サービスでコストを最適化したい」なら ECS on EC2 のほうが良さそうな感じがします。