FOR PRACTITIONERS実務向け

Jコンテナとサーバーレス基盤段3基盤層設計

ECS か EKS か、それとも EC2 か Lambda か|コンテナ基盤の判断を「何を自分で持ちたいか」で決める

ECS か EKS か、それとも EC2 か Lambda か|コンテナ基盤の判断を「何を自分で持ちたいか」で決める

「新しいシステムはコンテナで」と決まったあと、実務で必ず出るのが「ECS か EKS か」です。そしてその手前には、「そもそもコンテナにするのか、EC2 のままでいいのか、Lambda にできないのか」があります。ネットには「EKS は本格的、ECS は簡単」のような言い方があふれていますが、それでは判断の根拠を人に説明できません。この記事は、この判断を「何を自分で持ちたいか」と「チームが持っている知識」の2軸で整理し、判断を記録として残すところまでを扱います。

この記事の結論

  • 判断の軸は2つ。運用で何を自分で持ちたいか(責任の範囲)と、チームがすでに持っている知識です。「どれが高機能か」では決まりません。
  • EC2 → ECS on EC2 → ECS on Fargate → Lambda の順に、自分で持つものが減り、自由度も減ります。
  • ECS と EKS の違いは「オーケストレータを誰の流儀で動かすか」です。ECS は AWS の流儀、EKS は Kubernetes の流儀。機能の差より、学習と運用のコストの差が大きい。
  • Kubernetes を選ぶ理由は「Kubernetes の資産・ツール・人がある」こと。無ければ ECS on Fargate から始めるのが執筆者の判断です。
  • 判断は ADR(Architecture Decision Record)として、「何を、なぜ、何を捨てて」を残します。あとで見直せない判断は、判断ではありません。

判断の軸は「何を自分で持ちたいか」

クラウドとは何かで書いた IaaS・PaaS の区分は、コンテナの判断でも同じ形で効きます。選択肢を「自分で持つもの」の多い順に並べます。

WHAT YOU OWN何を自分で持つか

下に行くほど持つものが減り、自由度も減る

  1. EC2

    OS・ミドルウェア・アプリ・スケールの仕組みを全部持つ

    既存のサーバーをそのまま移す、特殊な OS 設定

  2. ECS on EC2

    コンテナと、それを動かす EC2 を持つ

    GPU が要る、予約で安くしたい

  3. ECS on Fargate

    コンテナ(イメージ・タスク定義)だけを持つ

    一般的な Web・API・バッチ。小さいチームの最初の選択

  4. Lambda

    コードだけを持つ

    イベントに反応する短い処理。15 分の上限

迷ったら、いまのチームで「持てる」範囲の一番下を選ぶ
選択肢 自分で持つもの AWS が持つもの 向くもの
EC2 OS・ミドルウェア・アプリ・スケールの仕組み ハードウェア・仮想化 既存のサーバーをそのまま移す、特殊な OS 設定が要る
ECS on EC2 コンテナ、コンテナを動かす EC2(OS の更新・容量) オーケストレーション GPU や特定のインスタンスタイプが要る、EC2 の予約で安くしたい
ECS on Fargate コンテナ(イメージ・タスク定義) コンテナを動かす機械の全部 一般的な Web・API・バッチ。運用で持つものを最小にしたい
Lambda コード 実行環境の全部 イベントに反応する短い処理、負荷の波が大きい処理

下に行くほど、OS の更新・パッチ・容量の管理といった運用の仕事が減ります。その代わり、「この設定を変えたい」の自由度も減ります。迷ったら、いまのチームで「持てる」範囲の一番下を選ぶ。持てないものを持つと、運用で必ず破綻します。

LAYERS YOU OWN何を自分で持つか

右に行くほど、持つものが減る

EC2

  • ハードウェア
  • OS(更新・パッチ)
  • コンテナの実行環境
  • コンテナ(イメージ・タスク定義)
  • コード

ECS on EC2

  • ハードウェア
  • OS(更新・パッチ)
  • コンテナの実行環境
  • コンテナ(イメージ・タスク定義)
  • コード

ECS on Fargate

  • ハードウェア
  • OS(更新・パッチ)
  • コンテナの実行環境
  • コンテナ(イメージ・タスク定義)
  • コード

Lambda

  • ハードウェア
  • OS(更新・パッチ)
  • コンテナの実行環境
  • コンテナ(イメージ・タスク定義)
  • コード

自分で持つAWS が持つ

Lambda には実行時間の上限(15 分)や、起動時の遅延(コールドスタート)があります。常に一定の負荷がある処理や、長い処理は、Lambda より Fargate のほうが素直です。「サーバーレスだから運用が無い」ではなく、「サーバーの運用が無い代わりに、関数の運用がある」と理解します。

ECS と EKS の違いは「誰の流儀で動かすか」

コンテナにすると決めたら、次はオーケストレータ(複数のコンテナをどこで何個動かし、落ちたら立て直す仕組み)を選びます。AWS には2つあります。

  • ECS(Elastic Container Service)は、AWS が独自に作ったオーケストレータです。概念は「クラスター・サービス・タスク定義・タスク」の4つで、IAM・ALB・CloudWatch との統合が最初から組み込まれています。
  • EKS(Elastic Kubernetes Service)は、Kubernetes の制御プレーン(API サーバーなど)を AWS が運用してくれるサービスです。中身は Kubernetes そのもので、概念は「Pod・Deployment・Service・Ingress」など Kubernetes の語彙です。
項目 ECS EKS
流儀 AWS 独自 Kubernetes(オープンソース、他のクラウドやオンプレと共通)
覚える概念の数 少ない(4つ) 多い(Kubernetes 本体+AWS との連携部分)
AWS サービスとの統合 組み込み アドオンやコントローラを入れて設定する
制御プレーンの料金 無料(動かすタスクの分だけ) クラスターごとに時間課金がある
持ち運び AWS の中だけ Kubernetes が動く場所ならどこでも
エコシステム AWS の範囲 Helm・Operator・多数の OSS ツール
運用で自分が持つもの タスク定義とサービスの設定 上に加えて、Kubernetes 自体のバージョン更新、アドオンの更新、マニフェストの管理

機能の差で選ぼうとすると決まりません。どちらでも Web サービスは動きます。差が出るのは、学習と運用にかかるコストと、それを払う理由があるかです。

ECS VS EKS誰の流儀で動かすか

機能の差ではなく、学習と運用のコストの差

ECS

AWS 独自の流儀

  • 覚える概念は4つ(クラスター・サービス・タスク定義・タスク)
  • IAM・ALB・CloudWatch との統合が組み込み
  • 制御プレーンは無料
  • 持ち運びは AWS の中だけ

EKS

Kubernetes の流儀

  • Kubernetes 本体+AWS との連携部分を覚える
  • アドオンやコントローラを入れて設定する
  • クラスターごとに時間課金
  • Helm・Operator・多数の OSS。他のクラウドでも同じ流儀
出典: Amazon ECS 開発者ガイド・Amazon EKS ユーザーガイド

CHECK 1ここまでの確認

EC2・ECS on EC2・ECS on Fargate・Lambda を並べたとき、「自分で持つもの」が一番少ないのはどれ?

答えと解説

答え: 3. Lambda

Lambda はコードだけを持ちます。その代わり実行時間の上限やコールドスタートがあり、常に一定の負荷がある処理は Fargate のほうが素直です。

Kubernetes を選ぶ理由と、選ばない理由

執筆者が EKS を選ぶのは、次のどれかがあるときです。

EKS(Kubernetes)を選ぶ理由

  • すでに Kubernetes で動いている資産があり、それを AWS に移す
  • Helm チャートや Operator で配布されているツールに依存している(データ基盤や ML 基盤に多い)
  • 複数のクラウドやオンプレと同じ流儀で動かす必要がある
  • チームに Kubernetes を運用できる人がすでにいて、その知識を活かしたい

逆に、これらが無いのに EKS を選ぶと、「Kubernetes を学ぶこと」自体が仕事になり、本来のサービスの開発と運用にかける時間が減ります。Kubernetes は、それを使う理由がある組織には強力ですが、「本格的だから」「流行っているから」で選ぶと、運用で持つものが一気に増えます。

ECS on Fargate を最初に選ぶ理由は、その逆です。運用で持つものが一番少なく、IAM・ALB・CloudWatch との統合が素直で、覚える概念が4つ。小さいチームが最初に選ぶ形として、執筆者はこれを勧めます。あとで Kubernetes が要る理由が出てきたら、そのときに移ればよく、コンテナイメージはそのまま使えます。

TWO AXES2軸で決める

小さいチームの最初の選択は ECS on Fargate

自分で持てる運用の範囲 →

ECS on EC2

資産は無いが、GPU や予約で機械を持つ理由がある

EKS on EC2

資産があり、機械も持てる

ECS on Fargate

資産が無く、持つものを最小に。ここから始める

EKS on Fargate

資産はあるが、機械は持ちたくない

Kubernetes の資産・ツール・人 →

Fargate と EC2 起動タイプ

ECS でも EKS でも、コンテナを動かす「機械」を Fargate(AWS が持つ)にするか、EC2(自分が持つ)にするかを選べます。

  • Fargate は、OS もインスタンスも見えません。タスクに CPU とメモリを指定すれば、AWS が機械を用意します。OS の更新・容量の管理が要らない代わりに、GPU や特定のインスタンスタイプは使えず、同じ性能あたりの単価は EC2 より高めです。
  • EC2 起動タイプ は、コンテナを動かす EC2 を自分で用意します。GPU が要る、予約(Savings Plans / RI)で安くしたい、インスタンスの中に入って調べたい、といった理由があるときに選びます。その代わり、EC2 の運用(EC2 とは何かで書いた OS の更新・容量)が戻ってきます。

判断は「機械を持つ理由があるか」の一点です。無ければ Fargate です。

CHECK 2ここまでの確認

ECS と EKS の一番の違いはどれ?

答えと解説

答え: 2. オーケストレータを AWS の流儀で動かすか、Kubernetes の流儀で動かすか

どちらでも Web サービスは動きます。差は機能ではなく、学習と運用のコストと、それを払う理由があるかです。

判断を記録として残す

この種の判断で一番大事なのは、決めることより「なぜそう決めたか」を残すことです。半年後に「なぜ EKS じゃないのか」と聞かれて答えられなければ、その判断は見直せません。

ADR(Architecture Decision Record)は、1つの判断を1枚の短い文書にする型です。

項目 書くこと 例
状況 何を決める必要があったか 新しい API 基盤のコンピュートを選ぶ
選択肢 検討したもの EC2 / ECS on Fargate / EKS / Lambda
決定 何を選んだか ECS on Fargate
理由 なぜか(軸で書く) チームに Kubernetes の運用経験が無い。持つものを最小にしたい。GPU は不要
捨てたもの 選ばなかったことで失うもの Kubernetes のエコシステム。他クラウドへの持ち運び
見直す条件 いつ再検討するか Kubernetes 依存のツールが必須になったとき。チームに運用できる人が入ったとき

「捨てたもの」と「見直す条件」を書くのが要点です。判断は正解を当てることではなく、捨てたものを分かったうえで選び、見直せるようにすることです。この考え方は、段4のトレードオフの考え方でさらに扱います。

CHECK 3ここまでの確認

この記事が挙げた、EKS(Kubernetes)を選ぶ理由に当てはまらないのはどれ?

答えと解説

答え: 3. 本格的で、流行っているから

「本格的だから」「流行っているから」で選ぶと、運用で持つものが一気に増えます。資産・ツール・人のどれかがあるときに選びます。

まとめ

コンテナ基盤の判断は、「何を自分で持ちたいか」と「チームが持っている知識」の2軸で決めます。EC2 → ECS on EC2 → ECS on Fargate → Lambda の順に持つものが減り、自由度も減ります。ECS と EKS は流儀の違いで、Kubernetes を選ぶ理由(資産・ツール・人)が無ければ ECS on Fargate から始めます。判断は ADR で「捨てたもの」と「見直す条件」まで残します。動かしたあとの「何を見るか」は、次の監視設計で扱います。

参照ソース

SCOREこの記事の確認テスト

0/3問 正解

各章の「ここまでの確認」に答えると、ここに集まります。結果はこの端末のブラウザにだけ残り、サーバには送りません。

HAND IT OVER人に渡すなら

一言で説明するなら

コンテナの置き場は、性能ではなく「どこまで自分で面倒を見たいか」で決めます。見たくないほどマネージド寄りに、細かく触りたいほど EC2 寄りに。

前提を持たない人にそのまま渡せる記事です。「後輩に説明する」「顧客に理由を伝える」の材料として。

FAQよくある質問

小さいチームで最初に選ぶなら ECS と EKS のどちらですか?

Kubernetes を使う明確な理由(既存の Kubernetes 資産、マルチクラウド、Helm や Operator に依存するツール)が無ければ、ECS on Fargate から始めるのが執筆者の判断です。理由は、運用で自分が持つものが一番少なく、AWS の他のサービス(IAM・ALB・CloudWatch)との統合が素直だからです。

Lambda にすればサーバーの運用は全部なくなりますか?

サーバーの運用はなくなりますが、関数の運用(同時実行数・タイムアウト・コールドスタート・バージョン管理・権限)は残ります。実行時間が長い処理(15 分の上限)や、常に一定の負荷がある処理は、Lambda よりコンテナや EC2 のほうが合うことがあります。

EKS を選んだら AWS の他のサービスは使えなくなりますか?

使えます。EKS は Kubernetes の制御プレーンを AWS が運用するもので、IAM との連携(Pod Identity)、ALB との連携(Load Balancer Controller)、CloudWatch への統合が用意されています。ただし、それらは「追加で入れて設定するもの」で、ECS のように最初から組み込まれてはいません。

SAME TRACK同じ領域の記事

監視設計|何を見るかは SLO から逆算する。4つのシグナルと、アラームを鳴らす基準の決め方
監視設計|何を見るかは SLO から逆算する。4つのシグナルと、アラームを鳴らす基準の決め方 段3 基盤設計