AWS ECSスケーリングの極意:Fargate/EC2の境界線と「運用を劇的に楽にする」高度な設定群

AWS

AWSでコンテナを運用する際、最も重要なのが「スケーリング」の設計です。「Fargateは楽、EC2は大変」というイメージの裏側に、具体的にどのような仕組みの違いがあるのか。基本から実務で必須となる「Capacity Provider」の高度な設定まで、丁寧に解説します。


結論

FargateとEC2、それぞれのスケーリング管理の境界線は以下の通りです。

起動タイプ基盤(インフラ)のスケーリングECSタスクのスケーリング
ECS on Fargate不要(AWSがフルマネージド)必要(Service Auto Scalingを使用)
ECS on EC2必要(Auto Scaling Groupを使用)必要(Service Auto Scalingを使用)

ポイント)
ECS on EC2では「タスク」と「基盤(EC2)」の2重のスケーリング管理が必要になる、という点が最大の相違点です。

認識)ECS on Fargate と ECS on EC2 の構成の違い

https://aws.amazon.com/jp/blogs/compute/aws-fargate-a-product-overview/


現場の司令塔:Service Auto Scaling(SAS)

基盤がどちらであっても、ECSタスクの数を増減させるのは「Service Auto Scaling」の役割です。この設定には、主に2つの戦略があります。

  1. ターゲット追跡スケーリング(Target Tracking)
    「エアコンの温度設定」のようなイメージです。
    • 仕組み:「平均CPU使用率を70%に保って」と設定するだけで、AWSが逆算してタスクの数を自動調整します。
    • メリット:設定が非常にシンプル。ほとんどのケースではこれで十分かと思います。
    • スケールアウト/イン判断基準のメトリクス
      • ECSServiceAverageCPUUtilization
        サービスの平均 CPU 使用率
      • ECSServiceAverageMemoryUtilization
        サービスのメモリ平均使用率
      • ALBRequestCountPerTarget
        Application Load Balancer ターゲットグループ内の ターゲットごと に完了したリクエストの数

  2. ステップスケーリング(Step Scaling)
    「マニュアル車のギアチェンジ」のようなイメージです。
    • 仕組み: 「CPUが70%を超えたら2個追加、80%を超えたらさらに5個追加」と、段階的なルールを定義します。
    • メリット: 負荷の急増に対して「一気に大量のタスクを増やす」といった、細かい制御が可能です。
    • スケールアウト/イン判断基準のメトリクス
      • ECSServiceAverageCPUUtilization
        サービスの平均 CPU 使用率
      • ECSServiceAverageMemoryUtilization
        サービスのメモリ平均使用率

知っておくべき知識:CPUなどの使用率の正体
SASが見ているのは、サービス内の全タスクの平均値です。

例)
平均使用率 = 全タスクの実使用CPU合計 ➗ 全タスクの予約CPU合計 ✖️ 100

特定のタスクだけに負荷が偏っている場合は、全体の平均がしきい値を超えない限りスケールアウトしない可能性があるため、ロードバランサーでの均等な分散が重要になります。


EC2の「2重スケーリング」を解決する3つの設定の違い

EC2を基盤にする場合、タスクが増えても「それを載せるEC2」が足りなければエラーになります。この「インフラ側の管理」を自動化し、Fargateに近い運用感を実現するのがCapacity Providersの以下の機能です。

  • Managed Scaling(マネージド型スケーリング)
    「タスクを増やしたいのに、EC2に空きがない!」という状況を検知し、裏側のAuto Scaling Group(ASG)を自動で動かしてEC2を補充します。
  • Managed Instance Termination Protection(終了保護)
    スケーリングで「EC2を減らす」とき、「まだ仕事中のタスクが載っているEC2」が勝手に消されるのを防ぎます。 安全なスケールインには必須の設定です。
  • Managed Draining(マネージド型ドレイニング)
    EC2を入れ替える際などに、「今載っているタスクを、別の健康なインスタンスへ安全に引っ越しさせる」機能です。リクエスト処理中のタスクを強制終了させず、優しく「退去」させてからインスタンスを停止させます。


Fargateの場合:スケーリング設定は不要、でも「戦略」は必要

Fargateには「EC2インスタンス」という概念がないため、先ほどのスケーリングや終了保護の設定は不要です。しかし、FargateにもCapacity Providerの設定があるのは、「コストと信頼性のバランス(戦略)」を決めるためです。

  • FARGATE:信頼性重視(システムの継続)
  • FARGATE_SPOT:コスト重視(最大70%オフだが、中断の可能性あり)

これらを組み合わせ、「基本の2個は通常タイプ、増える分はスポットを8割使う」といった重量(Weight)ベースの配分ができるのが、FargateにおけるCapacity Providerの役割です。

AWS Fargate の料金
https://aws.amazon.com/jp/fargate/pricing/


まとめ

項目FargateEC2 (Capacity Provider活用)
タスクのスケーリングSASで自動化SASで自動化
インフラの補充不要(AWSが管理)Managed Scaling で自動化
安全な撤去不要Termination Protection / Draining
OSの運用管理不要(フルマネージド)必要(ユーザー責任)

最後に
「EC2 = 管理が大変」という認識は正しいですが、今回紹介した機能をフル活用することで、「スケーリングの苦労」はFargateと遜色ないレベルまで下げることができます。

  • 運用コストを最小化したいFargate
  • インスタンスコストを抑えつつ、運用を自動化したいEC2 + Capacity Providers

それぞれの特徴を理解して、プロジェクトに最適な基盤を選んでいきましょう!


参考記事(AWS公式)

コメント

タイトルとURLをコピーしました