前回の記事では、ELB(Elastic Load Balancing)による負荷分散について解説しました。本記事では、EC2 Auto Scalingを使用した自動スケーリングについて解説します。Auto Scalingグループの概念、起動テンプレートの設定、各種スケーリングポリシーの使い分けを理解し、負荷に応じて自動的にスケールする高可用性なシステムを構築できるようになりましょう。

Amazon EC2 Auto Scalingとは

Amazon EC2 Auto Scalingは、EC2インスタンスの数を自動的に増減させるサービスです。トラフィックの変動やシステム負荷に応じて適切な数のインスタンスを維持し、可用性の向上とコスト最適化を両立します。

Auto Scalingの主な特徴

Auto Scalingには以下の特徴があります。

特徴 説明
自動スケーリング 需要に応じてインスタンスを自動的に増減
高可用性 インスタンス障害時に自動的に新しいインスタンスを起動
コスト最適化 必要な分だけのインスタンスを維持し、無駄を削減
ELB連携 ロードバランサーと連携してトラフィックを自動分散
複数AZ対応 複数のアベイラビリティゾーンに分散配置

なぜAuto Scalingが必要か

Webアプリケーションのトラフィックは時間帯や曜日、イベントによって大きく変動します。

graph TB
    subgraph "固定台数構成の問題"
        direction TB
        Fixed[EC2 3台固定]
        Fixed --> Problem1[ピーク時に<br/>処理しきれない]
        Fixed --> Problem2[閑散時に<br/>リソースの無駄]
    end
graph TB
    subgraph "Auto Scaling構成のメリット"
        direction TB
        ASG[Auto Scaling<br/>グループ]
        ASG --> Peak[ピーク時<br/>5台に自動増加]
        ASG --> Normal[通常時<br/>3台を維持]
        ASG --> Offpeak[閑散時<br/>2台に自動削減]
    end

Auto Scalingを導入することで、以下のメリットが得られます。

  • 可用性の向上: 負荷増大時に自動でスケールアウトし、サービスを安定稼働
  • 耐障害性: インスタンス障害時に自動で代替インスタンスを起動
  • コスト削減: 閑散時にスケールインし、不要なリソースコストを削減
  • 運用負荷軽減: 手動でのインスタンス増減作業が不要

Auto Scalingの構成要素

Auto Scalingは、以下の3つの主要コンポーネントで構成されます。

graph TB
    subgraph "Auto Scalingの構成要素"
        LT[起動テンプレート<br/>Launch Template] --> ASG[Auto Scalingグループ<br/>ASG]
        ASG --> Policy[スケーリングポリシー]
        
        LT --> |インスタンスの設定<br/>AMI、インスタンスタイプ等| ASG
        ASG --> |インスタンスの管理<br/>最小/最大/希望容量| EC2[EC2インスタンス群]
        Policy --> |スケーリングの条件<br/>いつ増減するか| ASG
    end

起動テンプレート(Launch Template)

起動テンプレートは、Auto Scalingグループが新しいインスタンスを起動する際の設定を定義します。

設定項目 説明
AMI 起動するインスタンスのベースイメージ
インスタンスタイプ CPU、メモリなどのスペック
キーペア SSH接続用のキーペア
セキュリティグループ ネットワークアクセス制御
IAMインスタンスプロファイル インスタンスに付与するIAMロール
ユーザーデータ 起動時に実行するスクリプト
EBSボリューム ストレージの設定
ネットワーク設定 サブネット、パブリックIP等

Auto Scalingグループ(ASG)

Auto Scalingグループは、インスタンスの集合を管理する論理的なグループです。

設定項目 説明
最小容量(Minimum) 常に維持するインスタンスの最小数
最大容量(Maximum) スケールアウト時の上限数
希望容量(Desired) 現在維持したいインスタンス数
アベイラビリティゾーン インスタンスを配置するAZ
ターゲットグループ 連携するELBのターゲットグループ
ヘルスチェック インスタンスの正常性確認方法

スケーリングポリシー

スケーリングポリシーは、いつ、どのようにインスタンス数を変更するかを定義します。

ポリシータイプ 説明 ユースケース
ターゲット追跡 メトリクスを目標値に維持 CPU使用率を50%に維持
ステップスケーリング メトリクスに応じた段階的な増減 負荷に応じて段階的に対応
シンプルスケーリング アラームに基づく単純な増減 基本的なスケーリング
スケジュールスケーリング 時間に基づく増減 予測可能な負荷変動
予測スケーリング 機械学習による予測に基づく増減 過去のパターンから予測

起動テンプレートの作成

起動テンプレートは、Auto Scalingグループでインスタンスを起動する際の設計図となります。

起動テンプレートと起動設定の違い

以前は「起動設定(Launch Configuration)」も使用されていましたが、現在は起動テンプレートの使用が推奨されています。

項目 起動テンプレート 起動設定
バージョン管理 対応 非対応
変更 新バージョンの作成で変更可能 変更不可(新規作成が必要)
複数インスタンスタイプ 対応 非対応
スポットインスタンス設定 詳細な設定が可能 基本的な設定のみ
T2/T3 Unlimited 対応 非対応
推奨度 推奨 非推奨(既存のみ)

起動テンプレートの作成手順

EC2コンソールから「起動テンプレート」→「起動テンプレートを作成」を選択します。

設定項目 説明 設定例
名前 テンプレートの識別名 web-server-template
説明 テンプレートの説明 Web server for production
AMI ベースイメージ Amazon Linux 2023
インスタンスタイプ スペック t3.medium
キーペア SSH用キー my-keypair
セキュリティグループ ネットワーク制御 web-server-sg
IAMプロファイル IAMロール WebServerRole

ユーザーデータの設定例

ユーザーデータを使用して、インスタンス起動時に自動的にWebサーバーをセットアップできます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash
# システムの更新
dnf update -y

# Webサーバーのインストール
dnf install -y nginx

# アプリケーションコードの取得
aws s3 cp s3://my-app-bucket/app.tar.gz /var/www/html/
cd /var/www/html && tar -xzf app.tar.gz

# Webサーバーの起動
systemctl enable nginx
systemctl start nginx

# CloudWatch Agentのインストールと設定
dnf install -y amazon-cloudwatch-agent
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl \
  -a fetch-config \
  -m ec2 \
  -s \
  -c ssm:AmazonCloudWatch-linux-config

起動テンプレートのバージョン管理

起動テンプレートはバージョン管理が可能です。設定変更時は新しいバージョンを作成します。

バージョン 変更内容 状態
v1 初期作成 使用可能
v2 インスタンスタイプをt3.largeに変更 使用可能
v3 AMIを最新版に更新 デフォルト

Auto Scalingグループでは、使用するバージョンを以下のように指定できます。

  • Latest: 常に最新バージョンを使用
  • Default: デフォルトに設定されたバージョンを使用
  • 特定のバージョン番号: 明示的にバージョンを指定

Auto Scalingグループの作成

Auto Scalingグループは、EC2インスタンスの集合を管理する中心的なコンポーネントです。

Auto Scalingグループの作成手順

EC2コンソールから「Auto Scalingグループ」→「Auto Scalingグループの作成」を選択します。

ステップ1: 起動テンプレートの選択

設定項目 説明 設定例
名前 ASGの識別名 web-server-asg
起動テンプレート 使用するテンプレート web-server-template
バージョン テンプレートのバージョン Latest

ステップ2: インスタンス起動オプション

設定項目 説明 設定例
VPC インスタンスを配置するVPC my-vpc
サブネット 配置するサブネット プライベートサブネット(複数AZ)
インスタンスタイプ 使用するインスタンスタイプ テンプレートの設定または複数指定

複数のサブネット(AZ)を選択することで、高可用性を実現できます。

graph TB
    subgraph "マルチAZ構成"
        ASG[Auto Scaling<br/>グループ]
        subgraph "AZ-a"
            EC2A[EC2-A1]
            EC2B[EC2-A2]
        end
        subgraph "AZ-c"
            EC2C[EC2-C1]
            EC2D[EC2-C2]
        end
        ASG --> EC2A
        ASG --> EC2B
        ASG --> EC2C
        ASG --> EC2D
    end

ステップ3: ロードバランサーの連携

設定項目 説明 設定例
ロードバランサー 連携するELB 既存のALBを選択
ターゲットグループ トラフィック転送先 web-target-group
ヘルスチェックタイプ 正常性確認方法 ELB

ELBと連携することで、新しく起動したインスタンスが自動的にターゲットグループに登録されます。

ステップ4: グループサイズとスケーリング

設定項目 説明 設定例
希望容量 通常時のインスタンス数 2
最小容量 インスタンスの下限 2
最大容量 インスタンスの上限 10
graph LR
    subgraph "容量設定の考え方"
        Min[最小容量: 2] --> Desired[希望容量: 4] --> Max[最大容量: 10]
    end

ヘルスチェックの設定

Auto Scalingグループは、インスタンスの正常性を監視し、異常なインスタンスを自動的に置き換えます。

ヘルスチェックタイプ 説明 推奨ケース
EC2 EC2インスタンスのステータスチェック ELBを使用しない場合
ELB ELBのヘルスチェック結果 ELBと連携する場合(推奨)
設定項目 説明 推奨値
ヘルスチェックの猶予期間 起動後ヘルスチェックを開始するまでの待機時間 300秒(アプリ起動時間を考慮)

猶予期間が短すぎると、アプリケーションの起動が完了する前にインスタンスが異常と判定され、無限ループに陥る可能性があります。

インスタンス配分戦略

Auto Scalingグループは、AZへのインスタンス配分を自動的に行います。

配分戦略 説明
デフォルト 各AZにインスタンスを均等に配分
スポット配分 スポットインスタンスを最適なプールから取得
graph TB
    subgraph "AZ間の均等配分"
        ASG2[ASG<br/>希望容量: 4]
        ASG2 --> AZa[AZ-a: 2台]
        ASG2 --> AZc[AZ-c: 2台]
    end

1つのAZに障害が発生した場合、残りのAZでインスタンスを起動し、希望容量を維持します。

スケーリングポリシー

スケーリングポリシーは、Auto Scalingグループがいつ、どのようにスケールするかを定義します。

ターゲット追跡スケーリングポリシー

ターゲット追跡スケーリングは、指定したメトリクスを目標値に維持するようにインスタンス数を調整します。最も推奨されるスケーリング方式です。

graph TB
    subgraph "ターゲット追跡の動作"
        CW[CloudWatch<br/>CPU使用率] --> Check{CPU > 50%?}
        Check -->|はい| ScaleOut[スケールアウト]
        Check -->|いいえ| Check2{CPU < 50%?}
        Check2 -->|はい| ScaleIn[スケールイン]
        Check2 -->|いいえ| Keep[現状維持]
    end
事前定義メトリクス 説明 一般的な目標値
ASGAverageCPUUtilization 平均CPU使用率 50-70%
ASGAverageNetworkIn 平均受信バイト数 ワークロードによる
ASGAverageNetworkOut 平均送信バイト数 ワークロードによる
ALBRequestCountPerTarget ターゲットあたりのリクエスト数 1000リクエスト/分など

ターゲット追跡スケーリングポリシーの設定例を示します。

設定項目
メトリクスタイプ ASGAverageCPUUtilization
ターゲット値 50
ウォームアップ時間 300秒
スケールインの無効化 無効(スケールインを許可)

ターゲット追跡の特徴

  • CloudWatchアラームを自動的に作成・管理
  • スケールアウトとスケールインの両方を自動で実行
  • 複数のターゲット追跡ポリシーを組み合わせ可能

ステップスケーリングポリシー

ステップスケーリングは、メトリクスの値に応じて段階的にインスタンス数を調整します。

graph TB
    subgraph "ステップスケーリングの動作"
        CW2[CloudWatch<br/>CPU使用率] --> Step1{40-60%}
        Step1 -->|該当| Action1[変更なし]
        CW2 --> Step2{60-80%}
        Step2 -->|該当| Action2[+2台追加]
        CW2 --> Step3{80%以上}
        Step3 -->|該当| Action3[+4台追加]
    end

ステップスケーリングの設定例(スケールアウト)を示します。

CPU使用率 調整タイプ 調整値
60% ≤ CPU < 75% 容量を追加 +1
75% ≤ CPU < 85% 容量を追加 +2
85% ≤ CPU 容量を追加 +4

ステップスケーリングの設定例(スケールイン)を示します。

CPU使用率 調整タイプ 調整値
CPU < 30% 容量を削除 -1
CPU < 20% 容量を削除 -2

ステップスケーリングの特徴

  • 細かい制御が可能
  • CloudWatchアラームを手動で作成する必要がある
  • スケールアウトとスケールインを別々に定義

シンプルスケーリングポリシー

シンプルスケーリングは、CloudWatchアラームに基づいて単一のスケーリングアクションを実行します。

設定項目 説明
CloudWatchアラーム スケーリングのトリガー
調整タイプ 変更方法(容量変更、パーセント変更、固定値設定)
クールダウン 次のスケーリングまでの待機時間

シンプルスケーリングの制限

シンプルスケーリングには「クールダウン期間」があり、スケーリングアクション実行後は次のスケーリングまで待機が必要です。そのため、急激な負荷変動への対応が遅れる可能性があります。

graph LR
    subgraph "シンプルスケーリングのクールダウン"
        Scale1[スケールアウト] --> Cool[クールダウン<br/>300秒] --> Next[次の評価]
    end

新規の構成では、シンプルスケーリングよりもターゲット追跡スケーリングを推奨します。

スケーリングポリシーの比較

項目 ターゲット追跡 ステップ シンプル
設定の容易さ 簡単 中程度 簡単
柔軟性 中程度 高い 低い
推奨度 推奨 特殊要件時 非推奨
アラーム管理 自動 手動 手動
クールダウン 不要 不要 必要

スケジュールされたスケーリング

スケジュールされたスケーリングは、予測可能な負荷変動に対応するために、特定の時間にインスタンス数を変更します。

ユースケース

graph TB
    subgraph "日次パターンの例"
        Morning[朝 9時<br/>スケールアウト<br/>最小: 4台]
        Evening[夜 21時<br/>スケールイン<br/>最小: 2台]
        Morning --> Daytime[日中は高負荷]
        Evening --> Nighttime[夜間は低負荷]
    end

スケジュールされたスケーリングが有効なシナリオを示します。

  • 日次パターン: 業務時間帯は高負荷、夜間は低負荷
  • 週次パターン: 平日は高負荷、週末は低負荷
  • イベント対応: 計画されたキャンペーンやセール期間
  • バッチ処理: 定期的なバッチ処理の実行時間帯

スケジュールの設定

設定項目 説明 設定例
名前 スケジュールの識別名 scale-out-morning
希望容量 変更後の希望インスタンス数 4
最小容量 変更後の最小インスタンス数 4
最大容量 変更後の最大インスタンス数 10
繰り返し Cron式または1回限り 0 9 * * 1-5(平日9時)
タイムゾーン スケジュールのタイムゾーン Asia/Tokyo

Cron式の書式は以下のとおりです。

分 時 日 月 曜日
説明
0 9 * * 1-5 平日の9:00
0 21 * * 1-5 平日の21:00
0 0 * * 6,0 土日の0:00
0 8 1 * * 毎月1日の8:00

スケジュールスケーリングとポリシーの組み合わせ

スケジュールスケーリングと動的スケーリングポリシーを組み合わせることで、より効果的なスケーリングが実現できます。

graph TB
    subgraph "組み合わせ戦略"
        Schedule[スケジュールスケーリング<br/>9時: 最小4台に変更]
        Target[ターゲット追跡ポリシー<br/>CPU 50%を維持]
        Schedule --> Base[ベースラインを確保]
        Target --> Dynamic[負荷に応じて調整]
        Base --> Combined[効果的なスケーリング]
        Dynamic --> Combined
    end

この組み合わせにより、以下のメリットが得られます。

  • 予測可能な負荷増加に事前対応(スケジュール)
  • 予測外の負荷変動にも自動対応(ターゲット追跡)

予測スケーリング

予測スケーリングは、過去のトラフィックパターンを機械学習で分析し、将来の負荷を予測してスケーリングを行います。

予測スケーリングの仕組み

graph LR
    subgraph "予測スケーリングの流れ"
        History[過去14日間の<br/>メトリクス] --> ML[機械学習<br/>モデル]
        ML --> Forecast[48時間先の<br/>負荷予測]
        Forecast --> Action[事前に<br/>スケールアウト]
    end
設定項目 説明
メトリクス 予測に使用するメトリクス(CPU、リクエスト数など)
ターゲット使用率 維持したい使用率
予測のみモード 予測結果の確認のみ(スケーリングは実行しない)
スケーリングモード 予測と動的スケーリングの組み合わせ

予測スケーリングの利点

  • 先回りのスケーリング: 負荷増加前にインスタンスを準備
  • ウォームアップ時間の考慮: インスタンスの起動時間を考慮した事前対応
  • 定期的なパターンへの対応: 日次・週次の負荷パターンを自動学習

予測スケーリングを有効にするには、少なくとも1日分の履歴データが必要です。より正確な予測には、2週間以上の履歴データが推奨されます。

インスタンスのウォームアップとクールダウン

スケーリング時のインスタンスの準備期間について理解することが重要です。

ウォームアップ期間

ウォームアップ期間は、新しく起動したインスタンスがメトリクスに含まれるまでの待機時間です。

graph LR
    subgraph "ウォームアップの必要性"
        Launch[インスタンス起動] --> Boot[OS起動<br/>30秒]
        Boot --> App[アプリ起動<br/>60秒]
        App --> Ready[サービス開始<br/>30秒]
        Ready --> Metrics[メトリクス安定<br/>60秒]
    end
設定項目 説明 推奨値
デフォルトのウォームアップ ASG全体のデフォルト値 300秒
ポリシー別のウォームアップ ポリシーごとの設定 アプリの起動時間 + バッファ

ウォームアップ期間中のインスタンスは、スケーリングの判断に使用されるメトリクスから除外されます。これにより、起動直後の不安定な状態がスケーリング判断に影響を与えることを防ぎます。

クールダウン期間(シンプルスケーリング)

クールダウン期間は、シンプルスケーリングポリシーにおいて、スケーリングアクション後に次のスケーリングを待機する時間です。

設定項目 説明 デフォルト値
デフォルトクールダウン ASGのデフォルト値 300秒
スケールアウトクールダウン スケールアウト後の待機時間 デフォルト値を使用
スケールインクールダウン スケールイン後の待機時間 デフォルト値を使用

ターゲット追跡スケーリングとステップスケーリングでは、クールダウンの代わりにウォームアップ期間が使用されます。

インスタンスの終了ポリシー

スケールイン時に、どのインスタンスを終了するかを決定するポリシーです。

終了ポリシーの種類

ポリシー 説明
Default デフォルトの終了ポリシー(下記の順序で適用)
OldestInstance 最も古いインスタンスを終了
NewestInstance 最も新しいインスタンスを終了
OldestLaunchConfiguration 最も古い起動設定のインスタンスを終了
OldestLaunchTemplate 最も古い起動テンプレートのインスタンスを終了
ClosestToNextInstanceHour 次の課金時間に最も近いインスタンスを終了
AllocationStrategy スポットインスタンスの配分戦略に基づく

デフォルト終了ポリシーの順序

デフォルトの終了ポリシーは、以下の順序で適用されます。

graph TB
    subgraph "デフォルト終了ポリシーの順序"
        Step1[1. AZのバランスを確認<br/>インスタンスが多いAZを選択]
        Step2[2. 古い起動設定/テンプレートを選択]
        Step3[3. 次の課金時間に近いインスタンスを選択]
        Step4[4. ランダムに選択]
        Step1 --> Step2 --> Step3 --> Step4
    end

スケールイン保護

特定のインスタンスをスケールインから保護することができます。

保護レベル 説明
インスタンスレベル 特定のインスタンスを保護
ASGレベル 新規インスタンスにデフォルトで保護を適用

保護されたインスタンスは、以下の場合でも終了されません。

  • スケールインアクション
  • 最大インスタンス数の削減
  • インスタンスの更新

ただし、以下の場合は終了されます。

  • 手動終了
  • ヘルスチェック失敗
  • スポットインスタンスの中断

ライフサイクルフック

ライフサイクルフックは、インスタンスの起動または終了時にカスタムアクションを実行するための仕組みです。

ライフサイクルフックの用途

graph TB
    subgraph "起動時のライフサイクルフック"
        Launch2[インスタンス起動] --> Pending[Pending:Wait]
        Pending --> Custom[カスタムアクション<br/>- 設定ファイル取得<br/>- ヘルスチェック確認<br/>- アプリ起動確認]
        Custom --> Complete[CONTINUE]
        Complete --> InService[InService]
    end
graph TB
    subgraph "終了時のライフサイクルフック"
        Term[終了開始] --> TermWait[Terminating:Wait]
        TermWait --> Custom2[カスタムアクション<br/>- ログの退避<br/>- セッションの移行<br/>- 登録解除処理]
        Custom2 --> Complete2[CONTINUE]
        Complete2 --> Terminated[Terminated]
    end

ライフサイクルフックの設定

設定項目 説明
名前 フックの識別名
ライフサイクルの移行 起動時(launch)または終了時(terminate)
ハートビートタイムアウト アクション完了までの待機時間
デフォルトの結果 タイムアウト時の動作(CONTINUE/ABANDON)
通知ターゲット SNSトピックまたはSQSキュー

ライフサイクルフックとの連携サービス

サービス 用途
Lambda カスタムスクリプトの実行
SNS 通知の送信
SQS メッセージキューイング
Systems Manager Run Commandの実行
EventBridge イベント駆動の処理

インスタンスの更新

Auto Scalingグループ内のインスタンスを新しい設定で更新する方法を説明します。

インスタンスの更新方法

方法 説明 ユースケース
インスタンスの更新 ローリングアップデート 通常のアプリケーション更新
手動での入れ替え 手動でインスタンスを終了 段階的な更新
最大インスタンス寿命 指定期間後に自動置き換え AMIの定期更新

インスタンスの更新(ローリングアップデート)

インスタンスの更新機能を使用すると、ダウンタイムを最小限に抑えながらインスタンスを更新できます。

設定項目 説明 推奨値
最小ヘルシー割合 更新中に維持する正常インスタンスの割合 90%
インスタンスウォームアップ 新インスタンスの準備時間 300秒
チェックポイント 更新を一時停止する割合 なし(連続更新)または50%
スキップマッチング 既に最新のインスタンスをスキップ 有効
graph LR
    subgraph "ローリングアップデートの流れ"
        Start[更新開始] --> New1[新インスタンス1起動]
        New1 --> Health1[ヘルスチェック]
        Health1 --> Old1[旧インスタンス1終了]
        Old1 --> New2[新インスタンス2起動]
        New2 --> Repeat[繰り返し...]
        Repeat --> Complete3[完了]
    end

Auto ScalingとELBの連携設定

Auto ScalingとELBを連携させることで、トラフィックの自動分散と自動スケーリングを実現します。

連携の仕組み

graph TB
    subgraph "Auto Scaling + ELB連携"
        Internet[インターネット] --> ALB[ALB]
        ALB --> TG[ターゲットグループ]
        TG --> ASG3[Auto Scalingグループ]
        
        ASG3 -->|新規起動| New[新インスタンス]
        New -->|自動登録| TG
        
        ASG3 -->|終了| Old[終了インスタンス]
        Old -->|自動登録解除| TG
        
        CloudWatch2[CloudWatch] -->|スケーリング判断| ASG3
    end

連携時の設定ポイント

設定項目 説明 推奨設定
ヘルスチェックタイプ インスタンスの正常性確認 ELB
ヘルスチェック猶予期間 起動後の待機時間 アプリ起動時間 + バッファ
登録解除の遅延 終了前の待機時間 300秒
ターゲットグループ トラフィック転送先 ALBのターゲットグループ

Connection Draining

インスタンスの終了時、既存の接続を適切に処理するためにConnection Draining(登録解除の遅延)を設定します。

graph LR
    subgraph "Connection Drainingの流れ"
        Terminate[スケールイン開始] --> Draining[Draining状態<br/>新規リクエスト停止]
        Draining --> Wait[既存接続の完了待ち<br/>最大300秒]
        Wait --> Complete4[インスタンス終了]
    end

Auto Scalingのベストプラクティス

Auto Scalingを効果的に活用するためのベストプラクティスを紹介します。

容量設計

項目 推奨事項
最小容量 1台のAZ障害でもサービス継続できる台数
最大容量 コスト上限を考慮した上限設定
希望容量 通常負荷を処理できる台数

スケーリングポリシー

項目 推奨事項
ポリシータイプ ターゲット追跡スケーリングを優先
メトリクス CPU使用率50-70%、またはリクエスト数ベース
複数ポリシー スケールアウトは積極的に、スケールインは慎重に
ウォームアップ アプリケーションの起動時間を考慮

高可用性

graph TB
    subgraph "高可用性構成の推奨"
        ASG4[Auto Scalingグループ]
        ASG4 --> AZ1[AZ-a: 2台以上]
        ASG4 --> AZ2[AZ-c: 2台以上]
        ASG4 --> AZ3[AZ-d: 2台以上]
    end
項目 推奨事項
AZ数 3つ以上のAZを使用
最小容量 AZ数 × 各AZの最低必要台数
ELB連携 必ずELBと連携してヘルスチェックを実施

コスト最適化

項目 推奨事項
購入オプション オンデマンドとスポットの混合フリートを活用
スケジュールスケーリング 予測可能な負荷パターンには事前にスケール
適切なインスタンスタイプ ワークロードに適したタイプを選択
モニタリング CloudWatchで実際の使用状況を監視

まとめ

本記事では、Amazon EC2 Auto Scalingの基本概念から、起動テンプレート、Auto Scalingグループ、各種スケーリングポリシーまでを解説しました。

重要なポイントをまとめます。

  • Auto Scalingの目的: 可用性向上、コスト最適化、運用負荷軽減を実現
  • 起動テンプレート: インスタンス設定の設計図、バージョン管理が可能
  • Auto Scalingグループ: 最小/最大/希望容量でインスタンス数を制御
  • ターゲット追跡スケーリング: 最も推奨されるスケーリング方式
  • スケジュールスケーリング: 予測可能な負荷変動に事前対応
  • ELB連携: ヘルスチェックと自動登録/登録解除で高可用性を実現

Auto ScalingとELBを組み合わせることで、負荷に応じて自動的にスケールする高可用性なシステムを構築できます。次回の記事では、CloudWatchによるAWSリソースの監視について解説します。

参考リンク