ECSでコンテナを動かすとき、最初に迫られるのがFargateかEC2起動タイプかの選択です。サーバ管理不要の手軽さと、高密度・特殊要件への対応力。どちらが正しいかは稼働パターンとコンプラ要件で決まります。本記事では現場の判断軸を整理します。

ECSでコンテナを本番運用する際、避けて通れないのが起動タイプの選定です。「とりあえずFargate」で始めた環境が、規模拡大とともにコスト面で疑問符が付くこともあれば、EC2起動タイプで組んだクラスターの運用負荷に情シスが疲弊することもあります。本記事では、EMWが実際の案件で使っている判断軸を、AWS一次情報と突き合わせながら整理します。

012つの起動タイプの本質的な違い

ECSには大きくFargateEC2の2つの起動タイプがあります(このほかオンプレ向けのExternalもありますが本稿では割愛します)。違いを一言でいえば「サーバというレイヤーを自分で持つかどうか」です。

AWS公式ドキュメントでは、EC2起動タイプは「環境のカスタマイズをより細かく制御できる一方、パッチ適用・インスタンスタイプ選定・ネットワーク・セキュリティの維持管理は利用者の責任」と明記されています。手軽さと制御性のトレードオフが、選定の出発点になります。

現場のコツ:「Fargateは割高」という先入観だけで判断しないでください。後述するとおり、EC2側の管理コスト(人件費・運用リスク)を含めて比較すると、小〜中規模ではFargateが総合的に安いケースが少なくありません。
Fargate 起動タイプ EC2 起動タイプ タスク定義 (vCPU / メモリ指定) タスク定義 (vCPU / メモリ指定) 利用者の責任範囲 コンテナ / アプリ IAM / ネットワーク設定 (サーバ管理は不要) 利用者の責任範囲 コンテナ / アプリ EC2インスタンス選定 / パッチ 容量管理 / スケーリング AWSが管理 サーバ / OS / 基盤 AWSが管理 物理ハードウェア / HV
図:FargateとEC2起動タイプにおける責任分界。EC2側はサーバ層が利用者の管理範囲に入る。

02コストの分岐点はどこにあるか

選定でもっとも問われるのがコストです。AWSのコンテナブログ「Theoretical cost optimization by Amazon ECS launch type」では、EC2インスタンスのリソース予約率(reservation rate)を軸にした比較が示されています。

つまり「EC2インスタンスをどれだけ隙間なく使い切れるか」がコスト分岐の本質です。Fargateはタスク単位課金なので、そもそも使った分しか払いません。一方EC2は、タスクが載っていない空きスロットの分も料金が発生します。同ブログも「Fargateはリソースがインスタンスキャパシティに近づくほど優位性が薄れる」と結論づけています。

現場のコツ:実務では「予約率100%」はまず達成できません。タスクのサイズとインスタンスのサイズがきれいに割り切れることは稀で、必ず端数の空きが出ます。EC2起動タイプで採算を取るには、複数サービスを同一クラスターに相乗りさせてビンパッキングを効かせる設計が前提になります。単一サービスをEC2で動かすなら、Fargateのほうが総合的に安いことが多いです。

03Savings PlansとSpotが分岐点を動かす

純粋なオンデマンド料金だけで比較すると話は単純ですが、実務では割引オプションが分岐点を大きく動かします。ここは押さえておくべき論点です。

重要なのは、「Fargateだから割引が効かない」という誤解を捨てることです。Compute Savings PlansはFargateにも効くため、常時稼働のベースライン分はFargateでもコミットメント割引を取れます。EC2 Instance Savings PlansのようにインスタンスファミリーやリージョンをまたいでもEC2に効く柔軟性まで求めるなら、EC2起動タイプに軍配が上がります。割引の具体的な料率はリージョンや期間で変わるため、必ず公式の料金ページで最新を確認してください。

04常時稼働 vs スパイク — 稼働パターンで見る

コストの議論を稼働パターンに翻訳すると、判断がしやすくなります。

スケーリングの制御についても差があります。EC2起動タイプではインスタンスのAuto Scalingとタスクのスケーリングを二段で設計する必要があり、Auto Scaling設計の勘所が問われます。Fargateはタスクを増減させるだけで基盤が追従するため、設計がシンプルです。

05高密度・GPU・特殊要件はEC2の独壇場

コストと稼働パターンを脇に置いても、EC2起動タイプでなければ実現できない要件があります。ここは選定の「効かない側」を消す作業として重要です。

現場のコツ:「一部のサービスだけGPUが要る」というケースでは、全体をEC2に寄せる必要はありません。同一クラスター内でFargateとEC2のキャパシティを混在させ、GPUが要るサービスだけEC2キャパシティプロバイダーに割り当てる構成が現実的です。次のセクションで触れます。

06コンプラ要件 — ホストを触れるかどうか

エンタープライズ案件で見落とせないのがコンプライアンス要件です。Fargateはサーバ層が隠蔽されるため、以下のような要件がある場合は注意が必要です。

逆に言えば、Fargateはホストのパッチ管理をAWSに委ねられるため、パッチ適用のSLA遵守という観点ではむしろコンプラ上有利に働くこともあります。PCI DSSなどの認証範囲を狭めたい場合、管理対象からOS層が外れるFargateが評価されるケースもあります。要件を「ホストを触る必要があるか」で切り分けるのが実務的です。認証範囲の設計はマルチアカウント統制とあわせて検討すると整理しやすくなります。

07キャパシティプロバイダーとECS Managed Instances

ここまで「起動タイプ」の話をしてきましたが、AWSは現在、起動タイプよりもキャパシティプロバイダーでの容量構成を推奨しています。公式ドキュメントでは「キャパシティプロバイダーは、従来の起動タイプと比べて推奨される容量構成の方法」と明記されています。

実務上重要なのは移行の可否です。公式ドキュメントによれば、起動タイプ同士の直接切り替え(EC2起動タイプ↔Fargate起動タイプ)はサポートされていません。EC2からFargateに移したい場合は、Fargateキャパシティプロバイダーへ移行する形を取ります。将来の柔軟性を考えると、新規構築時から起動タイプ直指定ではなくキャパシティプロバイダーで組んでおくのが得策です。

現場のコツ:既存のEC2起動タイプ環境を「Fargateに寄せたい」という相談は多いのですが、直接の切り替えはできません。タスク定義のrequiresCompatibilitiesにFargateを追加し、キャパシティプロバイダー戦略へ切り替える段取りが必要です。稼働中サービスはUpdateServiceでキャパシティプロバイダーへ移行し、検証しながら比率を調整するのが安全です。

08決定表 — 迷ったらここに戻る

これまでの論点を、実務で使う決定表にまとめます。上から順に「効かない側を消す」形で読んでください。

コンテナのオーケストレーション自体をECSにするかEKSにするかで迷っている場合は、ECS vs EKS選定を先にお読みください。起動タイプの議論はその後の話です。

まとめ

Fargateか EC2起動タイプかの選定は、突き詰めると3つの軸に集約されます。(1)EC2インスタンスをどれだけ使い切れるか(予約率)というコスト分岐、(2)常時稼働か変動かという稼働パターン、(3)GPU・専有・ホスト制御といったコンプラ/特殊要件です。特殊要件で先にEC2が確定しないかを消し、次に稼働パターンとコスト分岐で判断するのが実務の順序です。

そして現在のAWSは、起動タイプ直指定よりもキャパシティプロバイダーでの構成を推奨しています。新規構築なら最初からキャパシティプロバイダーで組み、Fargateで身軽に始めて、実測データをもとにEC2やSpotへ最適化していくのが、手戻りの少ない進め方です。数値や割引率はバージョン・リージョンで変わるため、最終判断の前に必ず公式の最新情報を確認してください。EMWでは既存ECS環境の予約率棚卸しからコスト最適化までご支援しています。導入事例もあわせてご覧ください。

参考(一次情報)

起動タイプ選定やコスト最適化でお悩みの際は、お問い合わせください。既存ECS環境の棚卸しからご支援します。

相談する
← ブログ一覧へ戻る