Konfigurowanie automatycznego skalowania przy użyciu Azure PowerShell

Automatyczne skalowanie gwarantuje, że masz uruchomioną odpowiednią ilość zasobów do obsługi zmieniającego się obciążenia aplikacji. Skalowanie automatyczne można skonfigurować przy użyciu portalu Azure, Azure CLI, Azure PowerShell lub ARM lub szablonów Bicep.

W tym artykule pokazano, jak skonfigurować skalowanie automatyczne dla zestawu skalowania maszyn wirtualnych przy użyciu programu PowerShell. Konfiguracje umożliwiają wykonanie następujących kroków:

  • Utwórz zestaw skalowania, który można skalować automatycznie.
  • Tworzenie reguł skalowania w górę i skalowania w dół.
  • Utwórz profil, który używa Twoich reguł.
  • Zastosuj ustawienia skalowania automatycznego.
  • Zaktualizuj ustawienia automatycznego skalowania z powiadomieniami.

Wymagania wstępne

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

Konfigurowanie środowiska

Note

Uruchom przykłady w tej samej sesji programu PowerShell z wybraną docelową subskrypcją.

# Set variables
$resourceGroupName = "<ResourceGroupName>"
$vmssName = "<VirtualMachineScaleSetName>"
$autoscaleName = "<AutoscaleSettingName>"
$azureRegion = "<AzureRegion>"
$virtualNetworkName = "<VirtualNetworkName>"
$subnetName = "<SubnetName>"
$publicIpAddressName = "<PublicIpAddressName>"
$loadBalancerName = "<LoadBalancerName>"

# Get the subscription ID from the current Azure PowerShell context
$subscriptionId = (Get-AzContext).Subscription.Id

# Build virtual machine scale set resource ID
$vmssPath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$vmssProvider = "Microsoft.Compute/virtualMachineScaleSets/$vmssName"
$vmssResourceId = "$vmssPath/providers/$vmssProvider"

Tworzenie zestawu skalowania maszyn wirtualnych

W poniższym przykładzie Azure PowerShell użyto poleceń cmdlet New-AzResourceGroup i New-AzVmss.

Note

W tym przykładzie użyj dedykowanej grupy zasobów, aby można było usunąć jej zasoby po zakończeniu pracy.

W przykładzie zostanie utworzony publiczny adres IP. W przypadku dostępu do zarządzania użyj Azure Bastion zamiast wystawiać porty RDP lub SSH do Internetu.

# Create the resource group
New-AzResourceGroup -ResourceGroupName $resourceGroupName -Location $azureRegion

# Get credentials for the virtual machine scale set
$vmCredential = Get-Credential

# Define parameters for New-AzVmss
$newAzVmssParams = @{
    ResourceGroupName   = $resourceGroupName
    Location            = $azureRegion
    VMScaleSetName      = $vmssName
    Credential          = $vmCredential
    VirtualNetworkName  = $virtualNetworkName
    SubnetName          = $subnetName
    PublicIpAddressName = $publicIpAddressName
    LoadBalancerName   = $loadBalancerName
    OrchestrationMode  = "Flexible"
}

# Create the virtual machine scale set
New-AzVmss @newAzVmssParams

Tworzenie ustawień autoskalowania

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

  1. Utwórz reguły przy użyciu polecenia New-AzAutoscaleScaleRuleObject.
  2. Utwórz profil przy użyciu polecenia New-AzAutoscaleProfileObject.
  3. Utwórz ustawienia autoskalowania przy użyciu polecenia New-AzAutoscaleSetting.
  4. Zaktualizuj ustawienia przy użyciu polecenia Update-AzAutoscaleSetting.

Tworzenie reguł

Utwórz reguły skalowania w głąb i skalowania wszerz, a następnie skojarz je z profilem.

Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleScaleRuleObject.

Note

Tworzy dwie reguły:

  • Skaluj w poziomie, gdy procentowe użycie procesora CPU przekracza 70%.
  • Skaluj w głąb, gdy wartość procentowa procesora CPU jest mniejsza niż 30%.
# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
    MetricTriggerMetricName        = "Percentage CPU"
    MetricTriggerMetricResourceUri  = $vmssResourceId
    MetricTriggerTimeGrain          = New-TimeSpan -Minutes 1
    MetricTriggerStatistic         = "Average"
    MetricTriggerTimeWindow         = New-TimeSpan -Minutes 5
    MetricTriggerTimeAggregation    = "Average"
    MetricTriggerOperator          = "GreaterThan"
    MetricTriggerThreshold         = 70
    MetricTriggerDividePerInstance = $false
    ScaleActionDirection           = "Increase"
    ScaleActionType                = "ChangeCount"
    ScaleActionValue               = "1"
    ScaleActionCooldown            = New-TimeSpan -Minutes 5
}
$scaleOutRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams

# Define parameters for New-AzAutoscaleScaleRuleObject
$newAzAutoscaleScaleRuleObjectParams = @{
    MetricTriggerMetricName        = "Percentage CPU"
    MetricTriggerMetricResourceUri  = $vmssResourceId
    MetricTriggerTimeGrain          = New-TimeSpan -Minutes 1
    MetricTriggerStatistic         = "Average"
    MetricTriggerTimeWindow         = New-TimeSpan -Minutes 5
    MetricTriggerTimeAggregation    = "Average"
    MetricTriggerOperator          = "LessThan"
    MetricTriggerThreshold         = 30
    MetricTriggerDividePerInstance = $false
    ScaleActionDirection           = "Decrease"
    ScaleActionType                = "ChangeCount"
    ScaleActionValue               = "1"
    ScaleActionCooldown            = New-TimeSpan -Minutes 5
}
$scaleInRule = New-AzAutoscaleScaleRuleObject @newAzAutoscaleScaleRuleObjectParams

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

Parametr Opis
MetricTriggerMetricName Ustawia wyzwalającą metrykę automatycznego skalowania
MetricTriggerMetricResourceUri Określa zasób, do którego należy metryka MetricTriggerMetricName. MetricTriggerMetricResourceUri może być dowolnym zasobem, a nie tylko zasobem, który jest skalowany. Można na przykład skalować zestawy skalowania maszyn wirtualnych na podstawie metryk utworzonych przez moduł równoważenia obciążenia, bazę danych lub sam zestaw skalowania. Element MetricTriggerMetricName musi 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 MetricTriggerTimeGrain = PT1M"* oznacza, ż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 mechanizm autoskalowania analizuje dane metryczne wstecz, aby je zagregować. Ta wartość musi być większa niż opóźnienie w 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 zapytania do metryk w ciągu ostatnich 10 minut. Ta funkcja umożliwia stabilizację metryk i unikanie reagowania na przejściowe skoki.
MetricTriggerThreshold Określa wartość metryki wyzwalającą zdarzenie skalowania.
MetricTriggerOperator Określa logiczne działanie porównawcze do użycia podczas oceniania wartości metryki.
MetricTriggerDividePerInstance Po ustawieniu, true dzieli metrykę wyzwalacza przez łączną liczbę wystąpień. Jeśli na przykład 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 w górę lub w dół. Prawidłowe wartości to Increase i Decrease.
ScaleActionType Skalowanie według określonej liczby wystąpień, skalowanie do określonej liczby wystąpień lub skalowanie według wartości procentowej liczby bieżących wystąpień. Prawidłowe wartości to ChangeCount, ExactCounti PercentChangeCount.
ScaleActionCooldown Minimalny czas, jaki musi upłynąć po operacji skalowania, zanim ta reguła będzie mogła zainicjować kolejną akcję skalowania. Autoskalowanie sprawdza okres karencji każdej reguły niezależnie. Okres wyciszenia pozwala metrykom się ustabilizować i zapobiega zjawisku flappingu.

Tworzenie domyślnego profilu autoskalowania i kojarzenie reguł

Po zdefiniowaniu reguł skalowania utwórz profil. Profil określa domyślne, górne i niższe limity liczby wystąpień oraz czasy zastosowania skojarzonych reguł.

Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleProfileObject.

Note

Ponieważ ten profil jest profilem domyślnym, nie ma żadnych parametrów harmonogramu. Profil domyślny jest aktywny w czasie, gdy nie są aktywne żadne inne profile.

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name            = "default"
    CapacityDefault = "1"
    CapacityMaximum = "10"
    CapacityMinimum = "1"
    Rule            = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

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

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ń dla 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 rozdzielonych przecinkami reguł.
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 od niedzieli do soboty. Aby uzyskać więcej informacji na temat harmonogramów cyklicznych, zobacz Cykliczne profile przy użyciu programu PowerShell.
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 ma obowiązywać.
ScheduleTimeZone Strefa czasowa godzin profilu.

Stosowanie ustawień skalowania automatycznego

Po zdefiniowaniu reguł i profilu zastosuj ustawienia skalowania automatycznego. Aby zaktualizować istniejące ustawienie autoskalowania, użyj polecenia Update-AzAutoscaleSetting.

Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleSetting.

# Define parameters for New-AzAutoscaleSetting
$newAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Location          = $azureRegion
    Profile           = @($defaultProfile)
    Enabled           = $true
    PropertiesName    = $autoscaleName
    TargetResourceUri = $vmssResourceId
}

# Create the autoscale setting
New-AzAutoscaleSetting @newAzAutoscaleSettingParams

Dodawanie powiadomień do ustawień autoskalowania

Dodaj powiadomienia do ustawienia autoskalowania, aby wywołać webhook lub wysłać powiadomienia e-mail po wystąpieniu zdarzenia skalowania.

Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleWebhookNotificationObject.

# Set variables
$webhookUri = "<WebhookUri>"

# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri

Poniższy przykład Azure PowerShell używa polecenia cmdlet New-AzAutoscaleNotificationObject do konfigurowania powiadomień webhook i e-mail.

Note

Użyj endpointu HTTPS dla webhooka.

# Set variables
$notificationEmail = "<NotificationEmail>"

# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
    EmailCustomEmail                      = @($notificationEmail)
    EmailSendToSubscriptionAdministrator   = $true
    EmailSendToSubscriptionCoAdministrator = $true
    Webhook                               = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams

Poniższy przykład Azure PowerShell używa polecenia cmdlet Update-AzAutoscaleSetting w celu zastosowania powiadomienia.

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Notification      = @($notification)
}

# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Przeglądanie ustawień automatycznego skalowania

W poniższym przykładzie Azure PowerShell użyto Get-AzAutoscaleSetting polecenia cmdlet do pobrania ustawienia autoskalowania.

# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
    ResourceGroupName = $resourceGroupName
    Name              = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *

Poniższy przykład Azure PowerShell używa polecenia cmdlet Get-AzAutoscaleHistory.

Note

Wykonuje zapytanie dotyczące historii ustawienia autoskalowania, a nie identyfikatora zasobu zestawu skalowania.

# Build autoscale setting resource ID
$autoscalePath = "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName"
$autoscaleProvider = "Microsoft.Insights/autoscaleSettings/$autoscaleName"
$autoscaleResourceId = "$autoscalePath/providers/$autoscaleProvider"

# Retrieve the autoscale history
Get-AzAutoscaleHistory -ResourceId $autoscaleResourceId

Profile planowane i cykliczne

Note

Podczas aktualizacji Profiledołącz każdy profil, który chcesz zachować. Poniższe przykłady dodają profile do konfiguracji utworzonej wcześniej w tym artykule. Zachowaj inne profile podczas dostosowywania ich do innego ustawienia autoskalowania.

Dodaj zaplanowany profil dla wydarzenia specjalnego

Skonfiguruj profile skalowania automatycznego w celu skalowania w inny sposób pod kątem określonych zdarzeń. Na przykład w przypadku dnia, w których zapotrzebowanie będzie wyższe niż zwykle, utwórz profil ze zwiększonymi limitami maksymalnego i minimalnego wystąpienia.

W poniższym przykładzie Azure PowerShell użyto poleceń cmdlet New-AzAutoscaleProfileObject i Update-AzAutoscaleSetting.

Note

W poniższym przykładzie użyto tych samych reguł co zdefiniowany wcześniej profil domyślny, 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. Wartości początkowe i końcowe używają znaczników czasu ISO 8601 w formacie UTC.

# Set variables
$startTime = "<StartTime>"
$endTime = "<EndTime>"

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name              = "High-demand-day"
    CapacityDefault   = "7"
    CapacityMaximum   = "30"
    CapacityMinimum   = "5"
    FixedDateEnd      = [datetime]::Parse($endTime)
    FixedDateStart    = [datetime]::Parse($startTime)
    FixedDateTimeZone = "UTC"
    Rule              = @($scaleOutRule, $scaleInRule)
}
$highDemandDay = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Profile           = @($defaultProfile, $highDemandDay)
}

# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Dodaj zaplanowany profil cykliczny

Profile cykliczne umożliwiają zaplanowanie profilu skalowania powtarzanego co tydzień.

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 uruchamiany po zakończeniu poprzedniego profilu cyklicznego.

W poniższym przykładzie Azure PowerShell używa poleceń cmdlet New-AzAutoscaleProfileObject i Update-AzAutoscaleSetting.

Note

Na przykład skaluj do pojedynczego wystąpienia w weekend, od piątkowego wieczoru do poniedziałkowego ranka. Aby skonfigurować profil weekendowy rozpoczynający się w piątkowe wieczory 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 rozpoczynającymi się w poniedziałek rano.

Tworzy profil weekendowy i cykliczny profil domyślny, aby zakończyć profil weekendowy, zachowując profile domyślne i profile o stałych datach z wcześniejszych kroków.

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name                = "Weekend"
    CapacityDefault     = "1"
    CapacityMaximum     = "1"
    CapacityMinimum     = "1"
    RecurrenceFrequency = "Week"
    ScheduleDay         = @("Friday")
    ScheduleHour        = @(22)
    ScheduleMinute      = @(0)
    ScheduleTimeZone    = "Pacific Standard Time"
    Rule                = @($scaleOutRule, $scaleInRule)
}
$fridayProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
    Name                = "default recurring profile"
    CapacityDefault     = "2"
    CapacityMaximum     = "10"
    CapacityMinimum     = "2"
    RecurrenceFrequency = "Week"
    ScheduleDay         = @("Monday")
    ScheduleHour        = @(0)
    ScheduleMinute      = @(0)
    ScheduleTimeZone    = "Pacific Standard Time"
    Rule                = @($scaleOutRule, $scaleInRule)
}
$defaultRecurringProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams

# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
    Name              = $autoscaleName
    ResourceGroupName = $resourceGroupName
    Profile           = @(
        $defaultProfile
        $highDemandDay
        $defaultRecurringProfile
        $fridayProfile
    )
}

# Update the autoscale profiles
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Aby uzyskać więcej informacji na temat zaplanowanych profili, zobacz Automatyczne skalowanie z wieloma profilami.

Inne komendy autoskalowania

Pełną listę poleceń cmdlet programu PowerShell dotyczących automatycznego skalowania można znaleźć w przeglądarce modułów programu PowerShell.

Czyszczenie zasobów

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

Poniższy przykład Azure PowerShell używa polecenia cmdlet Remove-AzResourceGroup.

# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName