0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AWS SAA対策】Auto Scaling Group (ASG) まとめ ― スケーリングポリシー・終了ポリシー・設計パターンを整理する

0
Posted at

はじめに

AWS Solutions Architect Associate (SAA) の学習中に整理した Auto Scaling Group (ASG) 関連の知識をまとめました。
スケーリングポリシーの選び方から、スケールイン時の終了順序、高可用性のキャパシティ計算まで、試験で問われやすいポイントを網羅しています。

本記事は個人の学習ノートをベースにしています。誤りがあればコメントでご指摘いただけると助かります。


サービス概要

スケーリングポリシー

ポリシー 予測的 リアルタイム 主な用途
Predictive ✅(ML予測) 予測可能なパターン(事前スケール)
Target Tracking メトリクスをターゲット値に維持
Step Scaling 閾値ベースの段階的スケール
Simple Scaling ✅(遅い) 単一アクション + クールダウン
Scheduled Action 固定時間のスケール

試験では「どのスケーリングポリシーを使うか?」がよく問われます。判断のポイントは、予測可能か突発的か時間ベースかメトリクスベースかスパイクへの応答速度が求められるか の3つです。


デフォルト終了ポリシー(優先順位)

スケールイン時に「どのインスタンスが終了されるか」はデフォルト終了ポリシーで決まります。優先順位は次のとおりです。

  1. On-Demand vs Spot のアロケーション戦略
  2. Launch Configuration を使うインスタンスが優先的に終了(Launch Template より先)
  3. 最古の Launch Configuration / Template のインスタンス
  4. 次の課金時間に最も近いインスタンス(最後)

特に「Launch Configuration と Launch Template が混在している場合、Launch Configuration 側が先に終了される」という点は試験で問われやすいポイントです。


スケールイン時のフロー

実際のスケールイン処理は、以下の順序で進みます。

  1. インスタンス数が最も多い AZ から終了(AZ 間バランスを維持するため)
  2. アロケーション戦略
  3. 最古の Launch Template / Configuration
  4. 課金時間

ヘルスチェックタイプ

タイプ 判定基準
EC2(デフォルト) インスタンス状態(running / stopped)
ELB ALB / NLB のヘルスチェック結果

ALB + ASG 構成では、ASG のヘルスチェックタイプを ELB ベースに明示的に変更するのが推奨です。デフォルトの EC2 ヘルスチェックのままだと、ALB が unhealthy と判定してもASGは気づかず、インスタンスが置換されません。


ASG がインスタンスを終了しない主な理由

ASG が unhealthy なインスタンスを終了しないケースには、いくつかの原因があります。

  • Grace Period が未満了(起動直後はヘルスチェックが猶予される)
  • Impaired 状態(回復を待っている)
  • ヘルスチェックタイプの不一致(ASG が EC2 タイプなのに、ALB のヘルスチェックで unhealthy になっている)
  • Standby 状態のインスタンス
  • ReplaceUnhealthy プロセスが Suspended になっている

SQS キュー長に基づくスケーリング

SQS のキューの深さに応じてスケールしたい場合は、Target Tracking Policy + カスタムメトリクス を使います。

カスタムメトリクスは ApproximateNumberOfMessages ÷ InService インスタンス数(= backlog per instance)で算出します。


混合インスタンスポリシー

ASG では複数の購入オプション・インスタンスタイプを組み合わせることができます。

  • ベースライン → Reserved Instances
  • スパイク → Spot 優先、Spot が確保できない場合は On-Demand にフォールバック

高可用性の最小キャパシティ計算

「1つの AZ が障害で失われても、通常のワークロードを処理できる台数を維持する」という考え方です。

  • 必要台数 × AZ 数 で計算する
  • 例: 通常2台必要で、1AZ 障害に耐える場合 → 最小4台(2AZ × 2台)
  • ASG は AZ 間で均等に分散配置する

試験で問われる設計パターン

SAA の試験では「こういう要件のとき、どのスケーリング戦略・構成を選ぶか?」というシナリオ問題が出題されます。ここからは、ASG に関連する頻出シナリオを 「どんな状況で → 何を選ぶか → なぜか」 の形式で整理していきます。


スケーリングポリシー系

予測可能なピーク時間にスケールアウト → Scheduled Action + desired capacity

シナリオ: 毎月末の特定時間帯に EC2 が10台必要になります(通常は2台)。事前に分かっているこのピークに対応するには、どのスケーリング方法が最適でしょうか?

正解: Scheduled Action で desired capacity を 10 に設定

  • 発生時間が分かっている → Scheduled Action(時間ベース)
  • 正確なインスタンス数が決まっている → desired capacity を指定
  • Target Tracking や Simple Scaling は時間ベースのスケーリングには向かない

SQS キュー長に基づく Auto Scaling → Target Tracking + カスタムメトリクス

シナリオ: SQS キューにメッセージが溜まったらワーカーの EC2 を増やし、キューが空になったら減らしたいです。最も適切なスケーリングポリシーはどれでしょうか?

正解: Target Tracking + backlog per instance メトリクス

  • Simple Scaling はクールダウン期間があり、スパイクへの対応が遅れる
  • Scheduled は突発的なスパイクに対応できない
  • Step Scaling でも近い動作は可能だが、Target Tracking の方が正確にターゲット値を追従する

終了ポリシー系

デフォルト終了ポリシーの優先順位を問う問題

シナリオ: ASG に以下のインスタンスがあります。スケールインで1台終了する場合、どれが先に終了されるでしょうか?

  • A: 最古の Launch Template で起動
  • B: 最古の Launch Configuration で起動
  • C: 最新の Launch Configuration で起動
  • D: 次の課金時間に最も近い

正解: Instance B(最古の Launch Configuration)

  • Launch Configuration を使っているインスタンスは、Launch Template より優先的に終了される
  • 同じ Launch Configuration 同士なら「最古」が先
  • 「次の課金時間」は最後の判定基準

AZ 間バランスを考慮したスケールイン

シナリオ: AZ-A に3台、AZ-B に4台のインスタンスがある ASG でスケールインが発生します。どのインスタンスが終了されるでしょうか?

正解: AZ-B(インスタンス数が多い方)から、最古の Launch Template / Configuration を持つインスタンスが終了

  • Step 1: AZ 間のバランスを取るため、インスタンス数が多い AZ から終了
  • Step 2 以降: 通常の終了ポリシー(アロケーション戦略 → 最古の Launch Template/Configuration → 課金時間)

高可用性 + コスト最適化系

HA + スケール + コスト最適の ASG 設定

シナリオ: 3つの AZ にまたがる ASG を構成しています。アイドル時間もあります。高可用性を維持しつつ、スケールもでき、コストも最適化したい場合、最小キャパシティと購入オプションはどうすべきでしょうか?(2つ選択)

正解:

  1. 最小キャパシティ = 2(2つの AZ に1台ずつ)
  2. 最小キャパシティ分を Reserved Instances で確保
  • 3AZ でも最小2台で十分な HA を確保できる(1AZ 障害時に ASG が3つ目の AZ に自動配置)
  • 常時稼働する分は RI、スパイク分は On-Demand / Spot で対応

クリティカルアプリ + 高可用性 → 最小4台(2AZ × 2台)

シナリオ: クリティカルなアプリケーションを ASG で運用しています。通常時は2台でワークロードを処理でき、ピーク時は最大6台まで拡張します。信頼性が極めて重要な場合、最小・最大キャパシティはどう設定すべきでしょうか?

正解: 最小4台(2AZ × 2台)、最大6台

  • 1AZ が障害で失われても通常の2台を維持するには、各 AZ に2台ずつ必要 → 最小4台
  • 最小2台では、1AZ 障害時に1台しか残らず、通常のワークロードを処理できない
  • ASG はリージョンをまたげない点にも注意

ヘルスチェック系

ALB が unhealthy と判定するが直接アクセスは可能

シナリオ: ALB 配下の EC2 インスタンスが unhealthy と表示されますが、EC2 に直接アクセスするとアプリケーションは正常に動作しています。原因として考えられるものを2つ選んでください。

正解:

  1. EC2 のセキュリティグループが ALB のセキュリティグループからのトラフィックを許可していない
  2. ヘルスチェックのルートが誤って設定されている
  • 直接アクセスは OK なのに ALB 経由で unhealthy → ネットワーク経路(SG)ヘルスチェック設定 の問題
  • EBS やランタイムの問題であれば直接アクセスでも異常が出るはず

ASG が unhealthy インスタンスを終了しない理由

シナリオ: ALB は一部のインスタンスを unhealthy と判定してトラフィックから除外していますが、ASG がそのインスタンスを新しいものに置換してくれません。考えられる原因を3つ選んでください。

正解:

  1. Grace Period がまだ満了していない
  2. インスタンスが Impaired 状態(回復待ち)
  3. ELB ヘルスチェックが失敗しているが、ASG のヘルスチェックタイプが EC2 に設定されている
  • ASG のデフォルトは EC2 ヘルスチェックなので、ELB ベースに明示的に変更しないと ALB の判定結果が反映されない
  • Spot インスタンスでもヘルスチェック失敗時は終了対象になる
  • カスタムヘルスチェックで SetInstanceHealth API を呼べば手動で終了させることも可能

ALB が unhealthy を除外するが ASG が置換しない → ヘルスチェックタイプの不一致

シナリオ: ALB + ASG 構成で運用しています。ALB は一部のインスタンスを unhealthy としてトラフィックから除外しましたが、ASG はそのインスタンスを healthy とみなしたまま置換しません。何が原因でしょうか?

正解: ASG のヘルスチェックタイプが EC2 に設定されており、ALB のヘルスチェック結果を参照していない

  • ALB は独自の HTTP ヘルスチェックしか使えない(EC2 ベースのヘルスチェックは使えない)
  • ASG は EC2 / ELB ベースを選択できる
  • ASG + ALB 構成では、ASG のヘルスチェックタイプを ELB ベースに変更すべき

おわりに

ASG は EC2 と密接に関連しており、スケーリングポリシーの選択・終了ポリシーの理解・ヘルスチェックの設定が試験で頻出します。特に「ヘルスチェックタイプの不一致」と「高可用性の最小キャパシティ計算」は見落としがちなので、しっかり押さえておくと試験で差がつきます。

間違いや補足があればぜひコメントで教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?