Konfigurieren der Autoskalierung mit PowerShell

Mithilfe der automatischen Skalierung können Sie sicherstellen, dass Sie über die richtige Anzahl von ausgeführten Ressourcen verfügen, um die wechselnde Auslastung Ihrer Anwendung zu bewältigen. Sie können die Autoskalierung mit den Vorlagen für Azure-Portal, Azure CLI, PowerShell oder ARM oder Bicep konfigurieren.

In diesem Artikel erfahren Sie, wie Sie die Autoskalierung für eine VM-Skalierungsgruppe mit PowerShell konfigurieren. Die Konfigurationen führen die folgenden Schritte aus:

  • Erstellen einer Skalierungsgruppe, die Sie automatisch skalieren können
  • Erstellen von Regeln zum Ab- und Aufskalieren
  • Erstellen eines Profils, das Ihre Regeln verwendet
  • Anwenden der Autoskalierungseinstellungen
  • Aktualisieren Ihrer Autoskalierungseinstellungen mit Benachrichtigungen

Voraussetzungen

Zum Konfigurieren der Autoskalierung mit PowerShell benötigen Sie ein Azure-Konto mit einem aktiven Abonnement. Sie können ein Konto kostenlos erstellen.

Erstellen Ihrer Umgebung

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

Erstellen einer VM-Skalierungsgruppe

Erstellen Sie mit den folgenden Cmdlets eine Skalierungsgruppe. Legen Sie die Variablen $resourceGroupName und $vmssName für Ihre Umgebung fest.

# 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"

Erstellen der Autoskalierungseinstellungen

Befolgen Sie diese Sequenz, um die Autoskalierungseinstellung mithilfe von PowerShell zu erstellen:

  1. Erstellen von Regeln mit New-AzAutoscaleScaleRuleObject
  2. Erstellen eines Profils mit New-AzAutoscaleProfileObject
  3. Erstellen der Autoskalierungseinstellungen mit New-AzAutoscaleSetting
  4. Aktualisieren der Einstellungen mit Update-AzAutoscaleSetting

Erstellen von Regeln

Erstellen Sie Regeln für das Ab- und Aufskalieren, und ordnen Sie diese dann einem Profil zu. Regeln werden mithilfe des New-AzAutoscaleScaleRuleObject erstellt.

Das folgende PowerShell-Skript erstellt zwei Regeln.

  • Aufskalieren, wenn der CPU-Prozentsatz 70 % überschreitet
  • Abskalieren, wenn der CPU-Prozentsatz 30 % unterschreitet

$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))

In der folgenden Tabelle werden die Parameter beschrieben, die im New-AzAutoscaleScaleRuleObject Cmdlet verwendet werden.

Parameter BESCHREIBUNG
MetricTriggerMetricName Legt die Metrik des Triggers für die Autoskalierung fest
MetricTriggerMetricResourceUri Gibt die Ressource an, zu der die MetricTriggerMetricName-Metrik gehört. MetricTriggerMetricResourceUri kann eine beliebige Ressource und nicht nur die Ressource sein, die skaliert wird. Beispielsweise können Sie Ihre VM-Skalierungsgruppen basierend auf Metriken skalieren, die von einem Lastenausgleich, einer Datenbank oder der Skalierungsgruppe selbst erstellt wurden. Die MetricTriggerMetricName muss für die angegebene MetricTriggerMetricResourceUrivorhanden sein.
MetricTriggerTimeGrain Die Probenhäufigkeit der Metrik, die von der Regel überwacht wird. MetricTriggerTimeGrain muss einer der vordefinierten Werte für die angegebene Metrik sein und zwischen 12 Stunden und 1 Minute betragen. MetricTriggerTimeGrain = Pt1M"* bedeutet beispielsweise, dass die Metriken alle 1 Minute erfasst und mithilfe der in MetricTriggerStatistic angegebenen Aggregationsmethode aggregiert werden.
MetricTriggerTimeAggregation Dies ist die Aggregationsmethode innerhalb des timeGrain-Zeitraums. Beispiel: statistic = "Average" und timeGrain = "PT1M" bedeutet, dass die Metriken jede Minute anhand des Durchschnitts aggregiert werden.
MetricTriggerStatistic Die Aggregationsmethode, die zum Aggregieren der Stichprobenmetriken verwendet wird. Beispiel: Mit TimeAggregation = "Average" werden die Stichprobenmetriken aggregiert, indem der Durchschnittswert herangezogen wird.
MetricTriggerTimeWindow Die Zeitspanne, die die Autoskalierungs-Engine zurückschaut, um die Metrik zu aggregieren. Dieser Wert muss größer sein als die Verzögerung bei der Metrikerfassung, die je nach Ressource unterschiedlich ist. Der Wert muss zwischen fünf Minuten und zwölf Stunden liegen. Beispiel: „10 Minuten“ bedeutet, dass bei jeder Ausführung der Autoskalierung die Metriken der letzten zehn Minuten abgefragt werden. Durch dieses Feature können sich Ihre Metriken stabilisieren, und es wird vermieden, auf vorübergehende Ausschläge zu reagieren.
MetricTriggerThreshold Definiert den Wert der Metrik, die ein Skalierungsereignis auslöst.
MetricTriggerOperator Gibt die logische Vergleichsoperation an, die bei der Auswertung des Metrikwertes verwendet werden soll.
MetricTriggerDividePerInstance Wenn true festgelegt ist, wird die Triggermetrik durch die Gesamtzahl der Instanzen dividiert. Wenn beispielsweise die Nachrichtenanzahl 300 beträgt und 5 Instanzen ausgeführt werden, beträgt der berechnete Metrikwert 60 Nachrichten pro Instanz. Diese Eigenschaft gilt nicht für alle Metriken.
ScaleActionDirection Legen Sie Ab- oder Aufskalieren fest. Gültige Werte sind Increase und Decrease.
ScaleActionType Skalieren Sie um eine bestimmte Anzahl von Instanzen, skalieren Sie auf eine bestimmte Anzahl von Instanzen oder skalieren Sie nach Prozent der aktuellen Instanzanzahl. Zu den gültigen Werten zählen ChangeCount, ExactCount und PercentChangeCount.
ScaleActionCooldown Die minimale Wartezeit zwischen Skalierungsvorgängen. Dadurch können die Metriken stabilisiert werden, und Fluktuation wird vermieden. Wenn beispielsweise ScaleActionCooldown 10 Minuten beträgt und gerade ein Skalierungsvorgang aufgetreten ist, versucht die Autoskalierung 10 Minuten lang nicht erneut zu skalieren.

Erstellen eines Standardprofils für Autoskalierung und Zuordnen der Regeln

Nachdem Sie die Skalierungsregeln definiert haben, erstellen Sie ein Profil. Das Profil gibt die Standard-, Ober- und Untergrenze für die Instanzanzahl sowie die Zeiten an, zu denen die zugeordneten Regeln angewendet werden können. Verwenden Sie das New-AzAutoscaleProfileObject Cmdlet, um ein neues Autoskalierungsprofil zu erstellen. Da es sich um ein Standardprofil handelt, verfügt es über keine Zeitplanparameter. Das Standardprofil ist zu Zeiten aktiv, in denen keine anderen Profile aktiv sind.

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

In der folgenden Tabelle werden die Parameter beschrieben, die im New-AzAutoscaleProfileObject Cmdlet verwendet werden.

Parameter BESCHREIBUNG
CapacityDefault Die Anzahl von Instanzen, falls keine Metriken zur Auswertung verfügbar sind. Der Standard wird nur verwendet, wenn die aktuelle Instanzanzahl niedriger als der Standardwert ist.
CapacityMaximum Die maximale Anzahl von Instanzen für die Ressource. Die Höchstanzahl der Instanzen wird weiter durch die Anzahl der Kerne beschränkt, die im Abonnement verfügbar sind.
CapacityMinimum Die Mindestanzahl von Instanzen für die Ressource.
FixedDateEnd Die Endzeit für das Profil im ISO 8601-Format.
FixedDateStart Die Startzeit für das Profil im ISO 8601-Format.
Rule Eine Auflistung von Regeln, die die Trigger und Parameter für die Skalierungsaktion bereitstellen, wenn das Profil aktiv ist. Es können maximal 10 kommagetrennte Regeln angegeben werden.
RecurrenceFrequency Wie oft das geplante Profil wirksam wird. Dieser Wert muss week sein.
ScheduleDay Eine Auflistung von Tagen, an denen das Profil in Kraft tritt, wenn ein wiederkehrender Zeitplan angegeben ist. Mögliche Werte sind Sonntag bis Samstag. Weitere Informationen zu wiederkehrenden Zeitplänen finden Sie unter Hinzufügen eines wiederkehrenden Profils mit CLI
ScheduleHour Eine Auflistung von Stunden, an denen das Profil in Kraft tritt. Die unterstützten Werte sind 0 bis 23.
ScheduleMinute Eine Auflistung von Minuten, in denen das Profil in Kraft tritt.
ScheduleTimeZone Die Zeitzone für die Stunden des Profils.

Anwenden der Autoskalierungseinstellungen

Nachdem Sie die Regeln und das Profil festgelegt haben, wenden Sie die Einstellungen für die Autoskalierung mithilfe von New-AzAutoscaleSetting an. Um vorhandene Einstellungen für die Autoskalierung zu aktualisieren, verwenden Sie 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"

Hinzufügen von Benachrichtigungen zu Ihren Einstellungen für die Autoskalierung

Fügen Sie Ihrer Verkaufseinstellung Benachrichtigungen hinzu, um einen Webhook auszulösen oder E-Mail-Benachrichtigungen zu senden, wenn ein Skalierungsereignis auftritt. Weitere Informationen zu Webhookbenachrichtigungen finden Sie unter New-AzAutoscaleWebhookNotificationObject

Legen Sie einen Webhook mit dem folgenden Cmdlet fest:


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

Konfigurieren Sie die Benachrichtigung mithilfe des Webhooks, und richten Sie die E-Mail-Benachrichtigung mithilfe des New-AzAutoscaleNotificationObject Cmdlets ein:


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

Aktualisieren Ihrer Einstellungen für Autoskalierung, um die Benachrichtigung anzuwenden


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

Prüfen Ihrer Einstellungen für Autoskalierung

Laden Sie die Einstellungen in eine Variable, und geben Sie dann die Variable mit Get-AzAutoscaleSetting aus, um die Einstellungen für die Autoskalierung zu überprüfen:

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

Abrufen des Verlaufs der Autoskalierung mit AzAutoscaleHistory

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

Geplante und wiederkehrende Profile

Hinzufügen eines geplanten Profils für ein besonderes Ereignis

Richten Sie die Autoskalierungsprofile so ein, dass sie für bestimmte Ereignisse unterschiedlich skaliert werden. Erstellen Sie beispielsweise für einen Tag, an dem die Nachfrage höher ist als üblich, ein Profil mit erhöhten maximalen und minimalen Instanzgrenzwerten.

Im folgenden Beispiel werden die gleichen Regeln wie das oben definierte Standardprofil verwendet, es werden jedoch neue Instanzgrenzwerte für ein bestimmtes Datum festgelegt. Sie können auch verschiedene Regeln für die Verwendung mit dem neuen Profil konfigurieren.

$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"  

Hinzufügen eines wiederkehrenden geplanten Profils

Mit wiederkehrenden Profilen können Sie ein Skalierungsprofil planen, das jede Woche wiederholt wird. Skalieren Sie beispielsweise am Wochenende von Freitagabend bis Montagmorgen auf eine einzelne Instanz.

Während geplante Profile über ein Start- und Enddatum verfügen, haben wiederkehrende Profile keine Endzeit. Ein Profil bleibt bis zum Startzeitpunkt des nächsten Profils aktiv. Daher müssen Sie beim Erstellen eines wiederkehrenden Profils ein wiederkehrendes Standardprofil erstellen, das beginnt, wenn das vorherige wiederkehrende Profil abgeschlossen werden soll.

Um beispielsweise ein Wochenendprofil zu konfigurieren, das am Freitagabend beginnt und am Montagmorgen endet, erstellen Sie ein Profil, das am Freitagabend beginnt, und erstellen Sie dann ein wiederkehrendes Profil mit Ihren Standardeinstellungen, das am Montagmorgen beginnt.

Das folgende Skript erstellt ein Wochenendprofil und ein zusätzliches Standardprofil, um das Wochenendprofil zu beenden.

$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"  

Weitere Informationen zum Konfigurieren mehrerer Profile finden Sie unter Autoskalierung mit mehreren Profilen.

Andere Befehle für Autoskalierung

Eine vollständige Liste der PowerShell-Cmdlets für Autoskalierung finden Sie im PowerShell-Modulbrowser.

Bereinigen von Ressourcen

Löschen Sie die erstellte Ressourcengruppe, um die in diesem Tutorial erstellten Ressourcen zu bereinigen. Das folgende Cmdlet löscht die Ressourcengruppe und alle zugehörigen Ressourcen.


Remove-AzResourceGroup -Name $resourceGroupName