Cloud Service
Amazon EC2 Auto Scaling
需要の増減に合わせて EC2 インスタンス数を自動調整し、可用性とコスト効率を両立させるマネージドサービス。
- 1.需要に応じて EC2 台数を自動で増減させ、過不足のないキャパシティを保つ
- 2.Auto Scaling グループと起動テンプレートで対象インスタンスの構成を定義する
- 3.目標追跡やステップなどのスケーリングポリシーで増減のトリガーを制御する
Amazon EC2 Auto Scaling は、アプリケーションの需要変動に合わせて EC2 インスタンスの台数を自動的に増減させるサービスです。手動でのキャパシティ管理から解放され、可用性の維持とコスト最適化を同時に実現できます。
解決する課題
固定台数の EC2 で運用すると、ピーク時に合わせると平常時に過剰なリソースを抱えてコストが無駄になり、平常時に合わせるとピーク時に性能不足や障害を招きます。需要を正確に予測することは難しく、アクセス急増やスパイク的な負荷に手動で対応していては遅れが生じます。
EC2 Auto Scaling は、この需要と供給のミスマッチを自動化された仕組みで解消します。負荷が増えればインスタンスを追加し、負荷が落ち着けば不要なインスタンスを削除します。また、インスタンスが異常になった場合は自動で置き換えるため、最小限の正常な台数を常に維持できます。これにより、人手による監視と判断を介さずに可用性とコストのバランスを保てます。
主要概念と用語
- Auto Scaling グループ(ASG): スケーリング対象となる EC2 インスタンスの論理的なまとまり。最小・最大・希望容量を定義し、グループ全体としてキャパシティを管理する。
- 起動テンプレート: 起動するインスタンスの構成(AMI、インスタンスタイプ、キーペア、セキュリティグループ、ユーザーデータなど)を定義するテンプレート。バージョン管理に対応し、推奨される構成方法。
- 起動設定: 起動テンプレートの前身にあたる古い構成方法。バージョン管理や新しい機能に対応しないため、新規利用では起動テンプレートが推奨される。
- 希望容量(Desired Capacity): グループが維持しようとするインスタンス数。スケーリングポリシーによって最小と最大の範囲内で増減する。
- 最小容量・最大容量: グループが取りうるインスタンス数の下限と上限。スケーリングはこの範囲内でのみ行われる。
- スケーリングポリシー: いつ、どれだけインスタンスを増減させるかを定義するルール。目標追跡、ステップ、シンプル、スケジュールなどの種類がある。
- ヘルスチェック: インスタンスの正常性を判定する仕組み。EC2 ステータスチェックに加え、ロードバランサーのヘルスチェック結果も利用できる。
- ライフサイクルフック: インスタンスの起動時や終了時に処理を差し込み、一時停止して初期化や後処理を実行できる仕組み。
- ウォームアップ(インスタンスウォームアップ): 新しいインスタンスがメトリクスに寄与し始めるまでの待機時間。起動直後の不安定なメトリクスによる過剰なスケーリングを防ぐ。
- クールダウン: スケーリングアクション後に次のアクションを抑制する待機時間。連続した過剰反応を防ぐ。
仕様・制限・クォータ
EC2 Auto Scaling はリージョン単位のサービスで、1 つの ASG は同一リージョン内の複数のアベイラビリティーゾーン(AZ)にまたがって展開できます。複数 AZ にインスタンスを分散させることで、特定 AZ の障害に対する耐性が高まります。
ASG の数や 1 グループあたりのインスタンス数などにはアカウント・リージョンごとのクォータが設定されています。多くのクォータは引き上げ申請が可能です。実際の上限値は変動しうるため、最新の数値は AWS のドキュメントとアカウントの Service Quotas で確認してください。
スケーリングは最小容量と最大容量の範囲内でのみ行われ、希望容量がこの範囲を外れることはありません。インスタンスタイプの混在(複数インスタンスタイプ・複数購入オプションの併用)にも対応しており、オンデマンドとスポットを組み合わせた構成を取れます。なお、EC2 Auto Scaling 自体に追加料金はかからず、課金対象は起動された EC2 インスタンスや関連リソースです。
内部の仕組み
ASG は希望容量と現在の実行台数を常に比較し、差分を埋めるようにインスタンスの起動・終了を行います。スケーリングポリシーや CloudWatch アラーム、スケジュールに基づくトリガーが発火すると希望容量が変更され、その変更に追随してインスタンス数が調整されます。
目標追跡ポリシーでは、CPU 使用率やリクエスト数などのメトリクスに対して目標値を設定すると、その値を維持するように必要な希望容量が自動計算されます。内部的には CloudWatch アラームが生成され、メトリクスの推移に応じて段階的に台数を調整します。ステップスケーリングでは、メトリクスの逸脱度合いに応じて複数の段階を定義し、逸脱が大きいほど一度に多くのインスタンスを増減できます。
新しいインスタンスを終了する際には、終了ポリシーに従って削除対象が選ばれます。既定ではAZ間のバランスを保ちつつ、古い起動テンプレートや起動設定を使うインスタンスなどを優先して終了します。ライフサイクルフックを設定すると、インスタンスが稼働状態になる前や終了する前に一時停止し、アプリケーションの初期化やログ退避といった処理を挟めます。ヘルスチェックで異常と判定されたインスタンスは自動的に終了され、希望容量を満たすために新しいインスタンスが起動されます。
設計パターン / ベストプラクティス
複数 AZ にまたがる ASG を構成し、Elastic Load Balancing と組み合わせるのが基本パターンです。ロードバランサーのヘルスチェックを ASG のヘルスチェックに利用することで、アプリケーション層の異常まで検知して置き換えられます。
スケーリングポリシーは、まず目標追跡から検討するのが扱いやすく、CPU 使用率やリクエスト数といった代表的なメトリクスを目標値として運用します。予測可能な定期的負荷にはスケジュールスケーリングを併用し、想定されるピーク前にあらかじめ容量を確保しておくと反応遅れを避けられます。インスタンスの起動に時間がかかる場合は、ウォームアップを適切に設定し、初期化中のインスタンスが過剰なスケールアウトを引き起こさないようにします。
スケールイン時にインスタンスはいつでも終了されうるため、セッションやファイルなどの状態はインスタンス内に保持せず、外部のデータストアやキャッシュに逃がしておくことが重要です。これにより、台数の増減がユーザー体験に影響しなくなります。
スポットインスタンスを混在させてコストを下げる場合は、複数のインスタンスタイプを許可してキャパシティの確保性を高め、スポット中断に備えてオンデマンドを一定割合で確保する構成が有効です。
運用・監視
CloudWatch メトリクスでグループの稼働台数や希望容量、スケーリングアクティビティを監視します。スケーリングが頻繁に発生して台数が振動する場合は、クールダウンやウォームアップ、目標値の見直しを行います。
スケーリング履歴(アクティビティ履歴)を確認すると、いつ・なぜインスタンスが起動・終了したかを追跡できます。インスタンスの更新が必要な場合は、インスタンスリフレッシュ機能で起動テンプレートの新しいバージョンへ段階的に置き換えられ、ローリング更新を安全に実行できます。
最小容量をゼロに近づけすぎると、コストは下がる一方でスパイク的な負荷に対する初動が遅れます。可用性要件を踏まえ、常時必要な最低限の台数を最小容量として確保しておくことを検討してください。
コスト
EC2 Auto Scaling の利用そのものに追加料金は発生せず、課金されるのは実際に起動された EC2 インスタンスとそれに付随するリソース(EBS ボリューム、データ転送、ロードバランサーなど)です。したがって、不要なインスタンスを需要に応じて自動で終了させることが、そのままコスト削減につながります。
コスト最適化の観点では、平常時の台数を抑えつつピーク時にスケールアウトする運用が基本です。スポットインスタンスやさまざまな購入オプションを混在させることで、さらにコストを下げられます。なお、具体的な料金は購入オプションやリージョンによって変動するため、断定的な金額は示せません。最新の料金は公式の料金ページで確認してください。
セキュリティ
ASG が起動するインスタンスには、起動テンプレートで指定した IAM インスタンスプロファイル、セキュリティグループ、サブネットが適用されます。最小権限の原則に従い、インスタンスに付与するロールの権限は必要最小限に絞ります。
EC2 Auto Scaling の操作自体は IAM ポリシーで制御し、ASG の作成・変更・削除といった操作を権限のある主体のみに限定します。起動テンプレートのユーザーデータに機密情報を直接書き込むことは避け、Secrets Manager や Systems Manager パラメータストアといった仕組みから安全に取得する構成が望ましいです。
Well-Architected の観点
信頼性の観点では、複数 AZ への分散とヘルスチェックによる自動置き換えにより、単一障害点を避けつつ目標とする台数を維持できます。パフォーマンス効率の観点では、需要に追随したスケーリングによって必要なときに必要なだけの処理能力を確保できます。コスト最適化の観点では、過剰なプロビジョニングを避け、需要が低いときに台数を減らすことで無駄な支出を抑えられます。これらを組み合わせることで、可用性とコストのトレードオフを設計上の意図に沿ってバランスさせられます。
試験で問われるポイント
- 起動テンプレートと起動設定の違い。新規構成では起動テンプレートが推奨され、バージョン管理や新機能に対応する点。
- 最小容量・最大容量・希望容量の関係。スケーリングは最小と最大の範囲内でのみ行われ、希望容量がその範囲を超えないこと。
- スケーリングポリシーの種類。目標追跡・ステップ・シンプル・スケジュールの使い分けと、予測可能な負荷にはスケジュールスケーリングが適すること。
- 複数 AZ への分散と ELB ヘルスチェックの利用による可用性向上。
- クールダウンとウォームアップの役割。過剰なスケーリングや振動を防ぐための待機時間であること。
- EC2 Auto Scaling 自体は無料で、課金対象は起動された EC2 インスタンスなどであること。
関連サービス・比較
EC2 Auto Scaling は EC2 インスタンス単位のスケーリングを担うのに対し、AWS Auto Scaling はより広い対象を横断的にスケーリングする上位の枠組みです。両者の関係を整理します。
| 観点 | EC2 Auto Scaling | AWS Auto Scaling |
|---|---|---|
| 対象 | EC2 インスタンスとスポットフリート | EC2 やDynamoDB、ECS など複数サービス横断 |
| 設定単位 | Auto Scaling グループごと | アプリケーション全体をまとめて設定 |
| 主な用途 | EC2 台数の増減制御 | 複数リソースの統合的なスケーリング計画 |
| 位置づけ | 個別サービスのスケーリング機能 | 横断的なスケーリングの管理レイヤー |
ハンズオン / CLI例
起動テンプレートを指定して、複数 AZ にまたがる Auto Scaling グループを作成する例です。
aws autoscaling create-auto-scaling-group \
--auto-scaling-group-name web-asg \
--launch-template "LaunchTemplateName=web-launch-template,Version=1" \
--min-size 2 \
--max-size 6 \
--desired-capacity 2 \
--vpc-zone-identifier "subnet-aaaaaaaa,subnet-bbbbbbbb" \
--health-check-type ELB \
--health-check-grace-period 300
# CPU 使用率を目標値に保つ目標追跡ポリシーを設定する
aws autoscaling put-scaling-policy \
--auto-scaling-group-name web-asg \
--policy-name cpu-target-tracking \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ASGAverageCPUUtilization"
},
"TargetValue": 50.0
}'
AWS Service
Amazon EC2 Auto Scalingを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
コンピューティング
比較で見る軸
クラウド: AWS / カテゴリ: コンピューティング / 難易度: basic
導入後に効く点
Auto Scaling グループと起動テンプレートで対象インスタンスの構成を定義する
先に潰すリスク
サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。
- クラウド
- AWS
- カテゴリ
- コンピューティング
- 難易度
- basic
- 関連資格
- SAA-C03 / SOA-C02
- 設計柱
- reliability / cost / performance
判断チェックリスト
- 自社の用途が「コンピューティング / reliability」に近いか確認する。
- 強みである「需要に応じて EC2 台数を自動で増減させ、過不足のないキャパシティを保つ」が本当に評価軸になるか確認する。
- 注意点の「サービス単体ではなく、権限、ネットワーク、監視、課金、バックアップを含めて設計する必要がある。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。