Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 automatische Skalierung mithilfe des Azure Portals, Azure CLI, Azure PowerShell oder ARM- oder Bicep-Vorlagen 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 Sie eine Skalierungsgruppe, die Sie automatisch skalieren können.
- Erstellen Sie Regeln zum Hoch- und Herunterskalieren.
- Erstellen Sie ein Profil, das Ihre Regeln verwendet.
- Wenden Sie die Einstellungen für die automatische Skalierung an.
- Aktualisieren Sie Ihre Einstellungen für die automatische Skalierung 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.
Richten Sie Ihre Umgebung ein
Verwenden Sie PowerShell in Azure Cloud Shell.
Note
Führen Sie die Beispiele in derselben PowerShell-Sitzung aus, in der Ihr beabsichtigtes Abonnement ausgewählt ist.
# 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"
Erstellen eines Virtual Machine Scale Set
Im folgenden Azure PowerShell Beispiel werden die New-AzResourceGroup und New-AzVmss Cmdlets verwendet.
Note
Verwenden Sie eine dedizierte Ressourcengruppe für dieses Beispiel, damit Sie die Ressourcen löschen können, wenn Sie fertig sind.
Im Beispiel wird eine öffentliche IP-Adresse erstellt. Verwenden Sie für den Verwaltungszugriff Azure Bastion, anstatt RDP- oder SSH-Ports für das Internet freizugeben.
# 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
Erstellen der Autoskalierungseinstellungen
Befolgen Sie diese Sequenz, um die Autoskalierungseinstellung mithilfe von PowerShell zu erstellen:
- Regeln erstellen mithilfe von
New-AzAutoscaleScaleRuleObject. - Erstellen Sie ein Profil mithilfe von
New-AzAutoscaleProfileObject. - Erstellen Sie die Einstellungen für die automatische Skalierung mithilfe von
New-AzAutoscaleSetting. - Aktualisieren Sie die Einstellungen mithilfe von
Update-AzAutoscaleSetting.
Erstellen von Regeln
Erstellen Sie Scale-In- und Scaleout-Regeln, und ordnen Sie sie dann einem Profil zu.
Im folgenden Azure PowerShell Beispiel wird das New-AzAutoscaleScaleRuleObject Cmdlet verwendet.
Note
Es werden zwei Regeln erstellt:
- Skalieren Sie hoch, wenn die CPU-Auslastung 70 % überschreitet.
- Skalieren Sie einwärts, wenn der Prozentsatz der CPU kleiner als 30 % ist.
# 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
In der folgenden Tabelle werden die Parameter beschrieben, die im New-AzAutoscaleScaleRuleObject Cmdlet verwendet werden.
| Parameter | BESCHREIBUNG |
|---|---|
MetricTriggerMetricName |
Legt die Triggermetrik 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, auf die die Autoskalierungs-Engine zur Aggregation der Metrik zurückblickt. 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 Zeitspanne, die nach einem Skalierungsvorgang vergehen muss, bevor diese Regel eine weitere Skalierungsaktion auslösen kann. Autoscale prüft die Abklingzeit jeder Regel unabhängig. Der Cooldown ermöglicht es den Metriken, das Flapping zu stabilisieren und zu vermeiden. |
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.
Im folgenden Azure PowerShell Beispiel wird das New-AzAutoscaleProfileObject Cmdlet verwendet.
Note
Da es sich bei diesem Profil um ein Standardprofil handelt, gibt es keine Zeitplanparameter. Das Standardprofil ist zu Zeiten aktiv, in denen keine anderen Profile aktiv sind.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
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 |
Der Endzeitpunkt für das Profil im ISO 8601-Format für. |
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 angewendet 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 Recurring profiles using PowerShell. |
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 Profilstunden. |
Anwenden der Autoskalierungseinstellungen
Nachdem Sie die Regeln und das Profil definiert haben, wenden Sie die Einstellungen für die automatische Skalierung an. Zum Aktualisieren einer vorhandenen Autoskalierungseinstellung verwenden Sie Update-AzAutoscaleSetting.
Im folgenden Azure PowerShell Beispiel wird das New-AzAutoscaleSetting Cmdlet verwendet.
# 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
Hinzufügen von Benachrichtigungen zu Ihren Einstellungen für die Autoskalierung
Fügen Sie Ihrer Einstellung für die automatische Skalierung Benachrichtigungen hinzu, um einen Webhook auszulösen oder E-Mail-Benachrichtigungen zu senden, wenn ein Skalierungsereignis eintritt.
Im folgenden Azure PowerShell Beispiel wird das New-AzAutoscaleWebhookNotificationObject Cmdlet verwendet.
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Im folgenden Azure PowerShell Beispiel wird das New-AzAutoscaleNotificationObject Cmdlet zum Konfigurieren von Webhook- und E-Mail-Benachrichtigungen verwendet.
Note
Verwenden Sie einen HTTPS-Endpunkt für den Webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Im folgenden Azure PowerShell Beispiel wird das Update-AzAutoscaleSetting Cmdlet verwendet, um die Benachrichtigung anzuwenden.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Prüfen Ihrer Einstellungen für Autoskalierung
Im folgenden Azure PowerShell Beispiel wird das Get-AzAutoscaleSetting Cmdlet verwendet, um die Einstellung für die automatische Skalierung abzurufen.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Im folgenden Azure PowerShell Beispiel wird das Get-AzAutoscaleHistory Cmdlet verwendet.
Note
Sie fragt den Verlauf der Autoskaleneinstellung ab, nicht die Ressourcen-ID des Skalierungssatzes.
# 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
Geplante und wiederkehrende Profile
Note
Wenn Sie Profile aktualisieren, schließen Sie jedes Profil ein, das Sie behalten möchten. In den folgenden Beispielen werden der zuvor in diesem Artikel erstellten Einstellung Profile hinzugefügt. Behalten Sie alle anderen Profile bei, wenn Sie sie an eine andere Einstellung für die automatische Skalierung anpassen.
Fügen Sie ein geplantes Profil für ein Sonderereignis hinzu
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 Azure PowerShell Beispiel werden die Cmdlets New-AzAutoscaleProfileObject und Update-AzAutoscaleSetting verwendet.
Note
Im folgenden Beispiel werden die gleichen Regeln wie das zuvor definierte Standardprofil verwendet, aber neue Instanzenbeschränkungen für ein bestimmtes Datum festgelegt. Sie können auch unterschiedliche Regeln für die Verwendung mit dem neuen Profil konfigurieren. Die Start- und Endwerte verwenden ISO 8601-Zeitstempel in 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
Wiederkehrendes Zeitplanprofil hinzufügen
Mit wiederkehrenden Profilen können Sie ein Skalierungsprofil planen, das jede Woche wiederholt wird.
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.
Im folgenden Azure PowerShell Beispiel werden die New-AzAutoscaleProfileObject- und Update-AzAutoscaleSetting-Cmdlets verwendet.
Note
Skalieren Sie beispielsweise am Wochenende von Freitagabend bis Montagmorgen auf eine einzelne Instanz. Um 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, das am Montagmorgen beginnt, mit Ihren Standardeinstellungen.
Es erstellt ein Wochenendprofil und ein wiederkehrendes Standardprofil, um das Wochenendprofil zu beenden, während die Standard- und Festdatumsprofile aus den vorherigen Schritten beibehalten werden.
# 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
Weitere Informationen zu geplanten Profilen finden Sie unter AutoScale mit mehreren Profilen.
Andere Befehle für Autoskalierung
Eine vollständige Liste der PowerShell-Cmdlets für die automatische Skalierung finden Sie im PowerShell-Modulbrowser.
Bereinigen von Ressourcen
Um die in diesem Lernprogramm erstellten Ressourcen zu bereinigen, löschen Sie die dedizierte Ressourcengruppe, die Sie erstellt haben. Das folgende Cmdlet löscht die Ressourcengruppe und alle zugehörigen Ressourcen.
Im folgenden Azure PowerShell Beispiel wird das Remove-AzResourceGroup Cmdlet verwendet.
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName