Konfigurowanie automatycznego skalowania przy użyciu programu PowerShell

Ustawienia autoskalowania pomagają zagwarantować, że masz uruchomioną odpowiednią ilość zasobów, aby obsłużyć zmienne obciążenie aplikacji. Autoskalowanie można skonfigurować przy użyciu szablonów Azure Portal, interfejsu wiersza polecenia platformy Azure, programu PowerShell lub usługi ARM lub Bicep.

W tym artykule pokazano, jak skonfigurować skalowanie automatyczne dla zestawu skalowania maszyn wirtualnych przy użyciu programu PowerShell, wykonując następujące kroki:

  • Tworzenie zestawu skalowania, który można skalować automatycznie
  • Tworzenie reguł skalowania w poziomie i skalowania w poziomie
  • Tworzenie profilu korzystającego z reguł
  • Stosowanie ustawień skalowania automatycznego
  • Aktualizowanie ustawień skalowania automatycznego za pomocą powiadomień

Wymagania wstępne

Aby skonfigurować skalowanie automatyczne przy użyciu programu PowerShell, potrzebne jest konto platformy Azure z aktywną subskrypcją. Możesz bezpłatnie utworzyć konto.

Konfigurowanie środowiska

#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"

Tworzenie zestawu skalowania maszyn wirtualnych

Utwórz zestaw skalowania przy użyciu następujących poleceń cmdlet. $resourceGroupName Ustaw zmienne i$vmssName, aby skonfigurować środowisko.

# create a new resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location "EastUS"

# Create login credentials for the VMSS
$Cred = Get-Credential
$vmCred = New-Object System.Management.Automation.PSCredential($Cred.UserName, $Cred.Password)


New-AzVmss `
 -ResourceGroupName $resourceGroupName `
 -Location "EastUS" `
 -VMScaleSetName $vmssName `
 -Credential $vmCred `
 -VirtualNetworkName "myVnet" `
 -SubnetName "mySubnet" `
 -PublicIpAddressName "myPublicIPAddress" `
 -LoadBalancerName "myLoadBalancer" `
 -OrchestrationMode "Flexible"

Tworzenie ustawień autoskalowania

Aby utworzyć ustawienie autoskalowania przy użyciu programu PowerShell, wykonaj poniższą sekwencję:

  1. Tworzenie reguł przy użyciu New-AzAutoscaleScaleRuleObject
  2. Tworzenie profilu przy użyciu polecenia New-AzAutoscaleProfileObject
  3. Tworzenie ustawień autoskalowania przy użyciu polecenia New-AzAutoscaleSetting
  4. Aktualizowanie ustawień przy użyciu polecenia Update-AzAutoscaleSetting

Tworzenie reguł

Utwórz reguły skalowania w poziomie i skalowania w poziomie, a następnie skojarz je z profilem. Reguły są tworzone przy użyciu elementu New-AzAutoscaleScaleRuleObject.

Poniższy skrypt programu PowerShell tworzy dwie reguły.

  • Skalowanie w poziomie, gdy procentowe użycie procesora CPU przekracza 70%
  • Skalowanie w poziomie, gdy procentowe użycie procesora CPU jest mniejsze niż 30%

$rule1=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "GreaterThan" `
    -MetricTriggerThreshold 70 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Increase" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))


$rule2=New-AzAutoscaleScaleRuleObject `
    -MetricTriggerMetricName "Percentage CPU" `
    -MetricTriggerMetricResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  `
    -MetricTriggerTimeGrain ([System.TimeSpan]::New(0,1,0)) `
    -MetricTriggerStatistic "Average" `
    -MetricTriggerTimeWindow ([System.TimeSpan]::New(0,5,0)) `
    -MetricTriggerTimeAggregation "Average" `
    -MetricTriggerOperator "LessThan" `
    -MetricTriggerThreshold 30 `
    -MetricTriggerDividePerInstance $false `
    -ScaleActionDirection "Decrease" `
    -ScaleActionType "ChangeCount" `
    -ScaleActionValue 1 `
    -ScaleActionCooldown ([System.TimeSpan]::New(0,5,0))

W poniższej tabeli opisano parametry używane w poleceniu New-AzAutoscaleScaleRuleObject cmdlet .

Parametr Opis
MetricTriggerMetricName Ustawia metryki wyzwalacza automatycznego skalowania
MetricTriggerMetricResourceUri Określa zasób, do którego MetricTriggerMetricName należy metryka. MetricTriggerMetricResourceUri może to być dowolny zasób, a nie tylko zasób, który jest skalowany. Możesz na przykład skalować Virtual Machine Scale Sets na podstawie metryk utworzonych przez moduł równoważenia obciążenia, bazę danych lub sam zestaw skalowania. Musi MetricTriggerMetricName istnieć dla określonego MetricTriggerMetricResourceUrielementu .
MetricTriggerTimeGrain Częstotliwość próbkowania metryki monitorowanej przez regułę. MetricTriggerTimeGrain Musi być jedną ze wstępnie zdefiniowanych wartości dla określonej metryki i musi należeć do przedziału od 12 godzin do 1 minuty. Na przykład PT1M"* oznacza, MetricTriggerTimeGrain = że metryki są próbkowane co 1 minutę i agregowane przy użyciu metody agregacji określonej w MetricTriggerStatistic.
MetricTriggerTimeAggregation Metoda agregacji w okresie timeGrain. Na przykład statystyka = "Średnia" i timeGrain = "PT1M" oznacza, że metryki są agregowane co 1 minutę, biorąc średnią.
MetricTriggerStatistic Metoda agregacji używana do agregowania przykładowych metryk. Na przykład timeAggregation = "Average" agreguje próbkowane metryki, przyjmując średnią.
MetricTriggerTimeWindow Czas, przez jaki aparat autoskalowania wraca do agregowania metryki. Ta wartość musi być większa niż opóźnienie kolekcji metryk, które różni się w zależności od zasobu. Musi to być od 5 minut do 12 godzin. Na przykład 10 minut oznacza, że za każdym razem, gdy jest uruchamiane automatyczne skalowanie, wysyła zapytanie do metryk w ciągu ostatnich 10 minut. Ta funkcja umożliwia stabilizację metryk i unikanie reagowania na przejściowe skoki.
MetricTriggerThreshold Definiuje wartość metryki, która wyzwala zdarzenie skalowania.
MetricTriggerOperator Określa logiczne porównawcze działanie do użycia podczas oceniania wartości metryki.
MetricTriggerDividePerInstance Po ustawieniu wartości w celu true podzielenia metryki wyzwalacza przez łączną liczbę wystąpień. Na przykład jeśli liczba komunikatów wynosi 300 i jest uruchomionych 5 wystąpień, obliczona wartość metryki to 60 komunikatów na wystąpienie. Ta właściwość nie ma zastosowania do wszystkich metryk.
ScaleActionDirection Określ skalowanie do lub na wyjęcie. Prawidłowe wartości to Increase i Decrease.
ScaleActionType Skaluj według określonej liczby wystąpień, skaluj do określonej liczby wystąpień lub skaluj według wartości procentowej liczby bieżących wystąpień. Prawidłowe wartości to ChangeCount, ExactCounti PercentChangeCount.
ScaleActionCooldown Minimalny czas oczekiwania między operacjami skalowania. Ma to na celu stabilizację metryk i uniknięcie flappingu. Jeśli na przykład ScaleActionCooldown wynosi 10 minut i właśnie wystąpiła operacja skalowania, skalowanie automatyczne nie będzie próbowało przeprowadzić skalowania ponownie przez 10 minut.

Tworzenie domyślnego profilu autoskalowania i kojarzenie reguł

Po zdefiniowaniu reguł skalowania utwórz profil. Profil określa domyślne, górne i dolne limity liczby wystąpień oraz czasy zastosowania skojarzonych reguł. Użyj polecenia cmdlet , New-AzAutoscaleProfileObject aby utworzyć nowy profil autoskalowania. Ponieważ jest to profil domyślny, nie ma żadnych parametrów harmonogramu. Profil domyślny jest aktywny w czasie, gdy żaden inny profil nie jest aktywny

$defaultProfile=New-AzAutoscaleProfileObject `
    -Name "default" `
    -CapacityDefault 1 `
    -CapacityMaximum 10 `
    -CapacityMinimum 1 `
    -Rule $rule1, $rule2

W poniższej tabeli opisano parametry używane w poleceniu New-AzAutoscaleProfileObject cmdlet .

Parametr Opis
CapacityDefault Liczba wystąpień, które są, jeśli metryki nie są dostępne do oceny. Wartość domyślna jest używana tylko wtedy, gdy bieżąca liczba wystąpień jest niższa niż domyślna.
CapacityMaximum Maksymalna liczba wystąpień zasobu. Maksymalna liczba wystąpień jest dodatkowo ograniczona przez liczbę rdzeni dostępnych w subskrypcji.
CapacityMinimum Minimalna liczba wystąpień zasobu.
FixedDateEnd Godzina zakończenia profilu w formacie ISO 8601.
FixedDateStart Godzina rozpoczęcia profilu w formacie ISO 8601.
Rule Kolekcja reguł, które udostępniają wyzwalacze i parametry akcji skalowania, gdy ten profil jest aktywny. Można określić maksymalnie 10 reguł rozdzielonych przecinkami.
RecurrenceFrequency Częstotliwość efektu zaplanowanego profilu. Ta wartość musi mieć wartość week.
ScheduleDay Kolekcja dni, na które profil ma wpływ podczas określania harmonogramu cyklicznego. Możliwe wartości to niedziela do soboty. Aby uzyskać więcej informacji na temat harmonogramów cyklicznych, zobacz Dodawanie profilu cyklicznego przy użyciu interfejsu wiersza polecenia
ScheduleHour Kolekcja godzin, na które ma wpływ profil. Obsługiwane wartości to od 0 do 23.
ScheduleMinute Kolekcja minut, w których profil wchodzi w życie.
ScheduleTimeZone Strefa czasowa dla godzin profilu.

Stosowanie ustawień skalowania automatycznego

Po skończoniu reguł i profilu zastosuj ustawienia autoskalowania przy użyciu polecenia New-AzAutoscaleSetting. Aby zaktualizować istniejące ustawienie autoskalowania, użyj polecenia Update-AzAutoscaleSetting

New-AzAutoscaleSetting `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Location eastus `
    -Profile $defaultProfile `
    -Enabled `
    -PropertiesName "vmss-autoscalesetting1" `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"

Dodawanie powiadomień do ustawień autoskalowania

Dodaj powiadomienia do ustawienia sprzedaży, aby wyzwolić element webhook lub wysłać powiadomienia e-mail po wystąpieniu zdarzenia skalowania. Aby uzyskać więcej informacji na temat powiadomień elementu webhook, zobacz New-AzAutoscaleWebhookNotificationObject

Ustaw element webhook przy użyciu następującego polecenia cmdlet;


  $webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"

Skonfiguruj powiadomienie przy użyciu elementu webhook i skonfiguruj powiadomienie e-mail przy użyciu New-AzAutoscaleNotificationObject polecenia cmdlet :


    $notification1=New-AzAutoscaleNotificationObject `
    -EmailCustomEmail "jason@contoso.com" `
    -EmailSendToSubscriptionAdministrator $true `
    -EmailSendToSubscriptionCoAdministrator $true `
    -Webhook $webhook1

Aktualizowanie ustawień autoskalowania w celu zastosowania powiadomienia


Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Przeglądanie ustawień skalowania automatycznego

Aby przejrzeć ustawienia autoskalowania, załaduj ustawienia do zmiennej, a Get-AzAutoscaleSetting następnie wyprowadź zmienną w następujący sposób:

    $autoscaleSetting=Get-AzAutoscaleSetting  -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1 
    $autoscaleSetting | Select-Object -Property *

Uzyskiwanie historii skalowania automatycznego przy użyciu polecenia AzAutoscaleHistory

Get-AzAutoscaleHistory -ResourceId  /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName

Profile zaplanowane i cykliczne

Dodawanie zaplanowanego profilu dla wydarzenia specjalnego

Skonfiguruj profile skalowania automatycznego w celu skalowania w różny sposób dla określonych zdarzeń. Na przykład w przypadku dnia, w przypadku gdy zapotrzebowanie będzie wyższe niż zwykle, utwórz profil ze zwiększonymi limitami maksymalnej i minimalnej liczby wystąpień.

W poniższym przykładzie użyto tych samych reguł co profil domyślny zdefiniowany powyżej, ale ustawia nowe limity wystąpień dla określonej daty. Można również skonfigurować różne reguły do użycia z nowym profilem.

$highDemandDay=New-AzAutoscaleProfileObject `
    -Name "High-demand-day" `
    -CapacityDefault 7 `
    -CapacityMaximum 30 `
    -CapacityMinimum 5 `
    -FixedDateEnd ([System.DateTime]::Parse("2023-12-31T14:00:00Z")) `
    -FixedDateStart ([System.DateTime]::Parse("2023-12-31T13:00:00Z")) `
    -FixedDateTimeZone "UTC" `
    -Rule $rule1, $rule2

Update-AzAutoscaleSetting  `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultProfile, $highDemandDay `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Dodawanie profilu zaplanowanego cyklicznie

Profile cykliczne umożliwiają zaplanowanie profilu skalowania powtarzanego co tydzień. Na przykład przeprowadź skalowanie do pojedynczego wystąpienia w weekend od piątkowego wieczoru do poniedziałkowego poranka.

Chociaż zaplanowane profile mają datę początkową i końcową, profile cykliczne nie mają czasu zakończenia. Profil pozostaje aktywny do czasu rozpoczęcia następnego profilu. W związku z tym podczas tworzenia profilu cyklicznego należy utworzyć cykliczny profil domyślny, który rozpoczyna się, gdy chcesz, aby poprzedni profil cykliczny został ukończony.

Aby na przykład skonfigurować profil weekendowy rozpoczynający się w piątkowe noce i kończący się w poniedziałek rano, utwórz profil rozpoczynający się w piątek wieczorem, a następnie utwórz profil cykliczny z ustawieniami domyślnymi, które rozpoczynają się w poniedziałek rano.

Poniższy skrypt tworzy profil weekendowy i dodatkowy profil domyślny, aby zakończyć profil weekendowy.

$fridayProfile=New-AzAutoscaleProfileObject `
    -Name "Weekend" `
    -CapacityDefault 1 `
    -CapacityMaximum 1 `
    -CapacityMinimum 1 `
    -RecurrenceFrequency week  `
    -ScheduleDay "Friday" `
    -ScheduleHour 22  `
    -ScheduleMinute 00  `
    -ScheduleTimeZone  "Pacific Standard Time" `
    -Rule $rule1, $rule2


$defaultRecurringProfile=New-AzAutoscaleProfileObject `
    -Name "default recurring profile" `
    -CapacityDefault 2 `
    -CapacityMaximum 10 `
    -CapacityMinimum 2 `
    -RecurrenceFrequency week  `
    -ScheduleDay "Monday" `
    -ScheduleHour 00  `
    -ScheduleMinute 00  `
    -ScheduleTimeZone  "Pacific Standard Time" `
    -Rule $rule1, $rule2

New-AzAutoscaleSetting  `
    -Location eastus `
    -Name vmss-autoscalesetting1 `
    -ResourceGroupName $resourceGroupName `
    -Profile $defaultRecurringProfile, $fridayProfile `
    -Notification $notification1 `
    -TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"  

Aby uzyskać więcej informacji na temat profilów zaplanowanych, zobacz Autoskaluj z wieloma profilami

Inne polecenia skalowania automatycznego

Aby uzyskać pełną listę poleceń cmdlet programu PowerShell do automatycznego skalowania, zobacz Przeglądarkę modułów programu PowerShell

Czyszczenie zasobów

Aby wyczyścić zasoby utworzone w tym samouczku, usuń utworzoną grupę zasobów. Następujące polecenie cmdlet usuwa grupę zasobów i wszystkie jej zasoby.


Remove-AzResourceGroup -Name $resourceGroupName