AWS Auto Scaling

EC2 インスタンスや ECS タスクなどのリソース数を需要に応じて自動的に増減させ、可用性とコスト効率を両立するサービス

概要

AWS Auto Scaling は、アプリケーションの負荷に応じてコンピューティングリソースを自動的にスケールアウト (増加) ・スケールイン (削減) するサービスです。EC2 Auto Scaling が最も広く使われますが、ECS サービス、DynamoDB テーブル、Aurora レプリカ、Lambda の同時実行数など、複数のリソースタイプに対応しています。CPU 使用率やリクエスト数などのメトリクスに基づくターゲット追跡スケーリング、スケジュールに基づく定時スケーリング、予測スケーリングの 3 つのポリシーを組み合わせることで、トラフィックの急増にも過剰なプロビジョニングにも対応できます。

3 つのスケーリングポリシーの選び方

Auto Scaling のポリシー選択は、トラフィックパターンによって最適解が変わります。ターゲット追跡スケーリングは「CPU 使用率を 60% に維持」のように目標値を指定するだけで、Auto Scaling が自動的にインスタンス数を調整します。設定が簡単で多くのワークロードに適しますが、急激なスパイクには追従が遅れることがあります。ステップスケーリングはメトリクスの閾値ごとに追加するインスタンス数を細かく制御でき、段階的な負荷増加に対応しやすい反面、設定が複雑です。予測スケーリングは過去 14 日間のメトリクスパターンを機械学習で分析し、需要を先読みしてスケールアウトするため、毎日同じ時間帯にトラフィックが増加するワークロードに最適です。

スポットインスタンスとの混合フリート構成

Auto Scaling のコスト最適化で最も効果が大きいのが、混合インスタンスポリシーです。ベースラインの負荷にはリザーブドインスタンスを割り当て、Auto Scaling で追加されるインスタンスにはスポットインスタンスを使うことで、オンデマンド比で 60-90% のコスト削減が可能です。Azure の Virtual Machine Scale Sets も Spot VM をサポートしていますが、EC2 Auto Scaling はスポットとオンデマンドの混合比率、複数インスタンスタイプの優先順位、アベイラビリティゾーン間の分散をネイティブに制御でき、スポット中断時のキャパシティ確保の柔軟性が高い設計です。AWS インフラ設計の書籍 (Amazon) でコスト最適化の手法を詳しく学べます。

ヘルスチェックとウォームアップの落とし穴

Auto Scaling の運用で最もトラブルが多いのが、ヘルスチェックとクールダウン期間の設定ミスです。ELB ヘルスチェックを有効にすると、アプリケーションレベルで異常を検知したインスタンスを自動的に置き換えますが、デプロイ直後のウォームアップ中に誤って異常と判定されないよう、ヘルスチェックの猶予期間 (Health Check Grace Period) を十分に確保する必要があります。猶予期間が短すぎると、新しいインスタンスが起動するたびに異常判定 → 終了 → 新規起動のループに陥ります。また、スケールイン時にはクールダウン期間を設定し、メトリクスが安定する前に過剰にインスタンスを削除しないよう制御することが重要です。起動テンプレートでユーザーデータスクリプトの実行時間を把握し、それに見合った猶予期間を設定するのが確実なアプローチです。

共有するXB!