Azure での自動スケーリングの概要
この記事では、Azure Monitor での自動スケーリング機能とその利点について説明します。
自動スケーリングでは、多くのリソースの種類がサポートされています。 サポートされているリソースの詳細については、サポートされているリソースの自動スケーリングに関するセクションを参照してください。
注意
可用性セット は、サポートが限られている仮想マシンの以前のスケーリング機能です。 より高速で信頼性の高い自動スケーリングのサポートを得るために、Azure 仮想マシン スケール セットに移行することをお勧めします。
自動スケーリングとは
自動スケーリングは、アプリケーションの負荷に応じてリソースを自動的に追加および削除するために使用できるサービスです。
アプリケーションの負荷が高くなると、負荷の増加に対応するために、自動スケーリングによってリソースが追加されます。 負荷が低い場合は、自動スケーリングによってリソースの数が減らされ、コストが削減されます。 CPU 使用率、キューの長さ、使用可能なメモリなどのメトリックに基づいてアプリケーションをスケーリングできます。 スケジュールに基づいてスケーリングすることもできます。 メトリックとスケジュールはルールで設定されます。 ルールには、アプリケーションを実行するために必要なリソースの最小レベルと、それを超えない最大レベルのリソースが含まれます。
たとえば、VM あたりの平均 CPU 使用率が 70% を超えると、VM を追加してアプリケーションをスケールアウトします。 CPU 使用率が 40% に低下したときに VM を削除してスケール バックします。
ルールの条件が満たされると、1 つ以上の自動スケール アクションがトリガーされ、VM の追加または削除が行われます。 メール、通知、Webhook の送信などの他のアクションを実行して、他のシステムのプロセスをトリガーすることもできます。
水平および垂直方向のスケーリング
自動スケーリングは、スケールインとスケールアウト、つまり水平方向にスケーリングします。 水平方向へのスケーリングは、リソース インスタンス数の増減です。 たとえば、仮想マシン スケール セットでは、スケールアウトは仮想マシンを追加することを意味します。 スケールインは、仮想マシンを削除することを意味します。 水平スケーリングは、クラウド環境では多数の VM を実行して負荷を処理できるため、柔軟性があります。
自動スケーリングでは、垂直方向のスケーリングはサポートされていません。 これに対し、スケールアップとスケールダウン、つまり垂直方向のスケーリングでは、同じ数のリソース インスタンスが一定に保たれますが、メモリ、CPU 速度、ディスク領域、ネットワークに関してそれらのインスタンスにより多くの容量が提供されます。 垂直スケーリングは、より大きなハードウェアの可用性によって制限され、最終的に上限に達します。 Azure で利用できるハードウェア サイズは、リージョンによって異なります。 垂直スケーリングでは、スケーリング プロセス中に VM の再起動が必要になる場合もあります。
ルールの条件が満たされると、1 つ以上の自動スケール アクションがトリガーされ、VM の追加または削除が行われます。 メール、通知、Webhook の送信などの他のアクションを実行して、他のシステムのプロセスをトリガーすることもできます。
予測自動スケーリング
予測自動スケーリングは、機械学習を使用して、周期的なワークロード パターンに基づく Virtual Machine Scale Sets の管理とスケーリングを促すものです。 過去の CPU 使用率パターンから、仮想マシン スケール セットの全体的な CPU 負荷を予測します。 その後、スケール セットを時間内にスケールアウトして、予測された需要を満たすことができます。
自動スケーリングの設定
以下を通じて、自動スケーリングを設定することができます。
リソース メトリック
リソースにより、スケール イベントをトリガーするために自動スケーリング ルールで使用されるメトリックが生成されます。 仮想マシン スケール セットでは、Azure 診断エージェントからのテレメトリ データを使用してメトリックが生成されます。 Azure App Service と Azure Cloud Services の Web Apps 機能のテレメトリは、Azure インフラストラクチャから直接取得されます。 一般的に使用されるメトリックには、CPU 使用率、メモリ使用量、スレッド数、キューの長さ、ディスク使用量などがあります。 使用可能なメトリックのリストについては、自動スケーリングの一般的なメトリックに関するページを参照してください。
カスタム メトリック
アプリケーションで生成される独自のカスタム メトリックを使用します。 メトリックを Application Insights に送信するようにアプリケーションを構成し、それらのメトリックを使用してスケーリングするタイミングを決定できるようにします。
Time
スケール イベントをトリガーするスケジュール ベースのルールを設定します。 負荷に時間パターンがあり、予想される負荷の変化が発生する前にスケーリングする場合は、スケジュール ベースのルールを使用します。
ルール
ルールにより、スケール イベントのトリガーに必要な条件、スケーリングの方向、スケールする量が定義されます。 CPU 使用率やキューの長さなど、異なるメトリックを使用して複数のルールを組み合わせます。 プロファイルごとに最大 10 個のルールを定義します。
次のルールが可能です。
- メトリックベース: メトリック値 (たとえば、CPU 使用率が 50% を超えた場合) に基づいてトリガーします。
- 時間ベース: スケジュール (毎週土曜日の午前 8 時など) に基づいてトリガーします。
"いずれかの" ルールが満たされた場合、自動スケーリングがスケールアウトされます。 "すべての" ルールが満たされた場合のみ、自動スケーリングがスケールインされます。 論理演算子については、複数の規則でスケールアウトする場合に OR 演算子を使います。 AND 演算子は、複数のルールを使用してスケーリングする場合に使用されます。
アクションと自動化
ルールで 1 つ以上のアクションをトリガーできます。 "アクション" に含まれている項目:
- スケール: リソースをスケールインまたはスケールアウトします。
- 電子メール: サブスクリプションの管理者、共同管理者、その他の任意のメール アドレスのいずれかまたはすべてにメールを送信します。
- Webhook: Azure の内部または外部で複数の複雑なアクションをトリガーする Webhook を呼び出します。 Azure では、次のことができます。
- Azure Automation Runbook を開始する。
- Azure 関数を呼び出す。
- Azure Logic App をトリガーする。
自動スケールの設定
オートスケール設定には、ルール、制限、スケジュールと通知を定義するスケール条件が含まれます。 この設定で 1 つ以上のスケール条件と、1 つの通知設定を定義します。
自動スケーリングでは、次の用語と構造が使用されています。
UI | JSON/CLI | 説明 |
---|---|---|
スケール条件 | profiles | メトリックまたは時間に基づくルール、インスタンスの制限、スケジュールのコレクション。 1 つ以上のスケール条件またはプロファイルを定義できます。 自動スケーリング設定ごとに最大 20 個のプロファイルを定義します。 |
ルール | rules | スケール アクションをトリガーする時間またはメトリックに基づく一連の条件。 スケールインとスケールアウトの両方のアクションに対して、1 つ以上のルールを定義できます。 プロファイルごとに最大 10 個のルールを定義します。 |
インスタンスの制限 | capacity | スケール条件またはプロファイルごとに、そのプロファイルで実行できるインスタンスのデフォルト数、最大数、最小数が定義されます。 |
スケジュール | recurrence | オートスケールはこのスケール条件またはプロファイルが有効にされるタイミングを示します。 複数のスケール条件を使用して、さまざまな重複する要件を処理できます。 たとえば、時間帯や曜日ごとに異なるスケール条件を設定できます。 |
通知 | 通知 (notification) | 自動スケーリング イベントが発生したときに送信する通知を定義します。 自動スケーリングでは、1 つ以上の Webhook を使用して、1 つ以上のメール アドレスに通知したり、電話をかけたりすることができます。 JSON では複数の Webhook を構成できますが、UI では 1 つしか構成できません。 |
構成可能なフィールドと説明の完全な一覧については、 自動スケール REST APIに関するページを参照してください。
コード例については、次を参照してください。
自動スケールでサポートされているサービス
自動スケーリングでは、次のサービスがサポートされています。
サービス | スキーマとドキュメント |
---|---|
Azure 仮想マシン スケール セット | Azure 仮想マシン スケール セットでの自動スケールの概要 |
Azure App Service の Web Apps の機能 | Web アプリのスケーリング |
Azure API Management サービス | Azure API Management インスタンスを自動的にスケーリングする |
Azure Data Explorer クラスター | 需要の変化に対応するために Azure Data Explorer のクラスターのスケーリングを管理する |
Azure Stream Analytics | ストリーミング ユニットの自動スケーリング (プレビュー) |
Azure SignalR Service (Premium レベル) | Azure SignalR Service のユニットを自動的にスケーリングする |
Azure Machine Learning ワークスペース | オンライン エンドポイントを自動スケーリングする |
Azure Spring Apps | アプリケーションの自動スケーリングを設定する |
Azure Media Services | Media Services での自動スケーリング |
Azure Service Bus | Azure Service Bus 名前空間のメッセージング ユニットを自動的に更新する |
次のステップ
自動スケーリングの詳細については、次のリソースを参照してください。