自動スケーリング設定について
自動スケール設定を使用すると、アプリケーションの変動する負荷に対応するために適切な量のリソースを確実に実行できます。 負荷やパフォーマンスを示すメトリック、またはスケジュールされた日時にトリガーするメトリックに基づいてトリガーされるように自動スケーリング設定を構成できます。
この記事では、自動スケーリングの設定について説明します。
自動スケール設定のスキーマ
次の例は、これらの属性を持つ自動スケーリング設定を示しています。
- 1 つの既定のプロファイル。
- このプロファイルには 2 つのメトリック ルールがあります。1 つはスケールアウト用、もう 1 つはスケールイン用です。
- スケールアウト ルールは、仮想マシン スケール セットの平均 CPU 使用率メトリックが過去 10 分間に 85% を超えるとトリガーされます。
- スケールイン ルールは、仮想マシン スケール セットの平均が過去 1 分間に 60% 未満になるとトリガーされます。
Note
1 つの設定には複数のプロファイルを含めることができます。 詳細については、プロファイルに関するセクションを参照してください。 1 つのプロファイルに複数のスケールアウト ルールとスケールイン ルールが定義されている場合もあります。 これらが評価されるしくみについては、評価に関するセクションを参照してください。
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.Insights/autoscaleSettings",
"apiVersion": "2015-04-01",
"name": "VMSS1-Autoscale-607",
"location": "eastus",
"properties": {
"name": "VMSS1-Autoscale-607",
"enabled": true,
"targetResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"profiles": [
{
"name": "Auto created default scale condition",
"capacity": {
"minimum": "1",
"maximum": "4",
"default": "1"
},
"rules": [
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT10M",
"timeAggregation": "Average",
"operator": "GreaterThan",
"threshold": 85
},
"scaleAction": {
"direction": "Increase",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
},
{
"metricTrigger": {
"metricName": "Percentage CPU",
"metricResourceUri": "/subscriptions/abc123456-987-f6e5-d43c-9a8d8e7f6541/resourceGroups/rg-vmss1/providers/Microsoft.Compute/virtualMachineScaleSets/VMSS1",
"timeGrain": "PT1M",
"statistic": "Average",
"timeWindow": "PT10M",
"timeAggregation": "Average",
"operator": "LessThan",
"threshold": 60
},
"scaleAction": {
"direction": "Decrease",
"type": "ChangeCount",
"value": "1",
"cooldown": "PT5M"
}
}
]
}
]
}
}
次の表は、上記の自動スケーリング設定の JSON に含まれる要素について説明したものです。
セクション | 要素名 | ポータル名 | 説明 |
---|---|---|---|
設定 | id | 自動スケーリング設定のリソース ID。 自動スケール設定は、Azure Resource Manager リソースです。 | |
設定 | name | 自動スケーリング設定の名前。 | |
設定 | location | 自動スケーリング設定の場所。 この場所は、スケールするリソースの場所とは異なる場合があります。 | |
properties | targetResourceUri | スケールするリソースのリソース ID。 リソースごとに適用できる自動スケーリング設定は 1 つに限られます。 | |
properties | profiles | スケーリング条件 | 自動スケーリング設定は、1 つ以上のプロファイルで構成されます。 自動スケーリング エンジンが実行されるたびに、1 つのプロファイルが実行されます。 自動スケーリング設定ごとに最大 20 個のプロファイルを構成します。 |
profiles | name | プロファイルの名前。 プロファイルを識別できる任意の名前を選択できます。 | |
profiles | capacity.maximum | インスタンス制限 - 最大 | 許容される最大容量。 これにより、自動スケーリングがプロファイルを実行するときに、この数値を超えてリソースをスケーリングしないことが保証されます。 |
profiles | capacity.minimum | インスタンス制限 - 最小 | 許容される最小容量。 これにより、自動スケーリングがプロファイルを実行するときに、この数値を下回ってリソースをスケーリングしないことが保証されます。 |
profiles | capacity.default | インスタンス制限 - 既定値 | リソース メトリックの読み取りで問題が発生し、現在の容量が既定の容量を下回る場合は、自動スケーリングによって既定値にスケールアウトされます。 このアクションによってリソースの可用性が確保されます。 現在の容量が既定の容量を既に上回る場合、自動スケーリングではスケールインされません。 |
profiles | rules | ルール | 自動スケーリングでは、プロファイルのルールを使用して、最大と最小容量の間で自動的にスケーリングされます。 1 つのプロファイルに最大 10 個の個別ルールを定義します。 通常、ルールはペアで定義されます。1 つはスケール アウトするタイミングを決定し、もう 1 つはスケールインするタイミングを決定します。 |
ルール | metricTrigger | スケール ルール | ルールのメトリックの条件を定義します。 |
metricTrigger | metricName | メトリックの名前 | メトリックの名前。 |
metricTrigger | metricResourceUri | メトリックを生成するリソースのリソース ID。 ほとんどの場合、これはスケーリングされているリソースと同じになります。 場合によっては、別の値を指定できます。 たとえば、ストレージ キューのメッセージの数に基づいて仮想マシン スケール セットをスケールできます。 | |
metricTrigger | timeGrain | 時間グレイン (分) | メトリックのサンプリング期間。 たとえば、timeGrain = "PT1M" の場合、statistic 要素で指定された集計方法を使用して 1 分ごとにメトリックが集計されます。 |
metricTrigger | statistic | 統計時間単位 | timeGrain の期間内の集計方法。 たとえば、statistic = "Average" で timeGrain = "PT1M" の場合、1 分ごとにメトリックが平均して集計されます。 このプロパティによって、メトリックのサンプリング方法が決まります。 |
metricTrigger | timeWindow | 期間 | メトリックについてさかのぼる時間。 たとえば、timeWindow = "PT10M" の場合、自動スケーリングが実行されるたびに、過去 10 分間のメトリックが照会されます。 時間枠を使用することで、メトリックの正規化が可能になり、一時的なスパイクへの対応が回避されます。 |
metricTrigger | timeAggregation | 時間の集計 | サンプリングされたメトリックの集計に使用する集計方法。 たとえば、timeAggregation = "Average" の場合、サンプリングされたメトリックが平均して集計されます。 上記の例では、1 分間のサンプルを 10 個取り、それらを平均します。 |
ルール | scaleAction | アクション | ルールの metricTrigger がトリガーされたときに実行するアクション。 |
scaleAction | 方向 | 操作 | スケールアウトの場合は "Increase"、スケールインの場合は "Decrease" を指定します。 |
scaleAction | value | インスタンス数 | リソースの容量を増減する量。 |
scaleAction | cooldown | クールダウン (分) | スケール操作の後、再度スケールするまでの待機時間。 クールダウン期間は、スケールイン イベントまたはスケールアウト イベントの後に有効になります。 たとえば、cooldown = "PT10M" の場合、自動スケーリングの実行後 10 分間、スケーリングは再試行されません。 このクールダウンにより、インスタンスの追加または削除後にメトリックを一定に保つことができます。 |
自動スケール プロファイル
自動スケーリング設定ごとに最大 20 個の異なるプロファイルを定義します。
自動スケーリング プロファイルには、次の 3 種類があります。
既定のプロファイル: 特定の日付と時刻、または曜日に基づいてリソースをスケーリングする必要がない場合は、既定のプロファイルを使用します。 既定のプロファイルは、現在の日時に適用できるプロファイルが他に存在しない場合に実行されます。 既定のプロファイルは 1 つしか使用できません。
指定日プロファイル: 指定日プロファイルは、1 つの日付と時刻に関連します。 特定のイベントのスケーリング ルールを設定するには、指定日プロファイルを使用します。 プロファイルは、イベントの日付と時刻に 1 回だけ実行されます。 それ以外のすべての場合、自動スケーリングでは既定のプロファイルが使用されます。
... "profiles": [ { "name": " regularProfile", "capacity": { ... }, "rules": [ ... ] }, { "name": "eventProfile", "capacity": { ... }, "rules": [ ... ], "fixedDate": { "timeZone": "Pacific Standard Time", "start": "2017-12-26T00:00:00", "end": "2017-12-26T23:59:00" } } ]
定期プロファイル: 定期プロファイルは、1 日または一連の曜日に対して使用されます。 定期プロファイルのスキーマには、終了日は含まれません。 定期プロファイルの終了日時は、次のプロファイルの開始時刻によって設定されます。 ポータルを使用して定期プロファイルを構成すると、既定のプロファイルが自動的に更新され、定期プロファイルに対して指定した終了時刻に開始されるようになります。 複数のプロファイルの構成について詳しくは、「複数のプロファイルで自動スケーリングする」を参照してください
ここでの部分的なスキーマの例は、定期プロファイルを示しています。 土曜日と日曜日の 06:00 に開始し、19:00 に終了します。 既定のプロファイルは、土曜日と日曜日の 19:00 に開始されるように変更されています。
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", "contentVersion": "1.0.0.0", "resources": [ { "type": "Microsoft.Insights/ autoscaleSettings", "apiVersion": "2015-04-01", "name": "VMSS1-Autoscale-607", "location": "eastus", "properties": { "name": "VMSS1-Autoscale-607", "enabled": true, "targetResourceUri": "/subscriptions/ abc123456-987-f6e5-d43c-9a8d8e7f6541/ resourceGroups/rg-vmss1/providers/ Microsoft.Compute/ virtualMachineScaleSets/VMSS1", "profiles": [ { "name": "Weekend profile", "capacity": { ... }, "rules": [ ... ], "recurrence": { "frequency": "Week", "schedule": { "timeZone": "E. Europe Standard Time", "days": [ "Saturday", "Sunday" ], "hours": [ 6 ], "minutes": [ 0 ] } } }, { "name": "{\"name\":\"Auto created default scale condition\",\"for\":\"Weekend profile\"}", "capacity": { ... }, "recurrence": { "frequency": "Week", "schedule": { "timeZone": "E. Europe Standard Time", "days": [ "Saturday", "Sunday" ], "hours": [ 19 ], "minutes": [ 0 ] } }, "rules": [ ... ] } ], "notifications": [], "targetResourceLocation": "eastus" } } ] }
自動スケールの評価
自動スケーリング設定には、複数のプロファイルを含めることができます。 各プロファイルには、複数のルールを含めることができます。 自動スケーリング ジョブが実行されるたびに、その時刻に適用できるプロファイルがまず選択されます。 その後、プロファイルの最小値、最大値、メトリック ルールが評価され、スケール操作が必要かどうかが判断されます。 自動スケーリング ジョブは、リソースの種類に応じて 30 秒から 60 秒ごとに実行されます。 スケール アクションが発生した後、自動スケーリング ジョブはクールダウン期間を待ってから再びスケーリングします。 クールダウン期間は、スケールアウト アクションとスケールイン アクションの両方に適用されます。
自動スケーリングで使用されるプロファイル
このプロファイルは、自動スケーリング サービスが実行されるたびに次の順序で評価されます。
- 指定日プロファイル
- 定期的なプロファイル
- Default profile
最初に見つかった適切なプロファイルが使用されます。
自動スケーリングで複数のルールが評価されるしくみ
自動スケーリングでは、実行することになっているプロファイルを特定した後、そのプロファイルのスケールアウト ルール (つまり、direction = "Increase") が評価されます。 1 つ以上のスケールアウト ルールがトリガーされた場合、それぞれのルールに対して指定された scaleAction によって決定された新しい容量が計算されます。 複数のスケールアウト規則がトリガーされた場合、自動スケーリングでは、サービスの可用性を確保するために、指定された最大容量へのスケーリングが実行されます。
たとえば、2 つのルールがあって、ルール 1 では 3 インスタンスのスケールアウトが指定され、ルール 2 では 5 インスタンスのスケールアウトが指定されているとします。 両方のルールがトリガーされた場合、自動スケーリングでは 5 インスタンスのスケールアウトが実行されます。 同様に、あるルールで 3 インスタンスのスケールアウトが指定され、別のルールで 15% のスケールアウトが指定されている場合は、2 つのインスタンス数のうち数の多い方が使用されます。
スケールアウト ルールがトリガーされない場合は、スケールイン ルール (つまり、direction = "Decrease" のルール) が評価されます。 自動スケーリングでは、すべてのスケールイン ルールがトリガーされた場合にのみ、スケールインが実行されます。
それぞれのルールの scaleAction で指定された新しい容量が計算されます。 サービスの可用性を確保するために、自動スケーリングでは、できるだけ小さい数でスケールインして、指定された最大容量が達成されます。 たとえば、容量を 50% 減らすルールと、容量を 3 インスタンス減らすルールの 2 つのスケールイン ルールがあるとします。 1 つ目のルールだと 5 インスタンスになり、2 つ目のルールだと 7 インスタンスになるという場合、自動スケーリングでは 7 インスタンスへのスケールインが実行されます。
自動スケーリングでは、スケールイン アクションの結果を計算するたびに、そのアクションによってスケールアウト アクションがトリガーされるかどうかが評価されます。 スケール アクションによって反対のスケール アクションがトリガーされるシナリオは、フラッピングと呼ばれます。 自動スケーリングでは、フラッピングを回避するためにスケールイン アクションが延期されたり、ルールで指定された値よりも小さい数値でスケーリングが実行される場合があります。 フラッピングの詳細については、「自動スケーリングでのフラッピング」を参照してください
次の手順
自動スケーリングに関する詳細情報: