Automatische schaalaanpassing configureren met Azure PowerShell

Automatische schaalaanpassing zorgt ervoor dat u de juiste hoeveelheid middelen hebt die draaien om de fluctuerende belasting van uw toepassing af te handelen. U kunt automatische schaalaanpassing configureren met behulp van Azure Portal, Azure CLI, Azure PowerShell of ARM- of Bicep-sjablonen.

In dit artikel leest u hoe u automatische schaalaanpassing configureert voor een virtuele-machineschaalset met PowerShell. De configuraties gebruiken de volgende stappen:

  • Maak een schaalset die u automatisch kunt laten schalen.
  • Regels maken om in te schalen en uit te schalen.
  • Maak een profiel dat gebruikmaakt van uw regels.
  • Pas de instellingen voor automatische schaalaanpassing toe.
  • Werk de instellingen voor automatische schaalaanpassing bij om meldingen in te stellen.

Vereisten

Als u automatische schaalaanpassing wilt configureren met behulp van PowerShell, hebt u een Azure-account met een actief abonnement nodig. U kunt gratis een account maken.

Uw omgeving instellen

Note

Voer de voorbeelden uit in dezelfde PowerShell-sessie met uw beoogde abonnement geselecteerd.

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

Een virtuele-machineschaalset maken

In het volgende Azure PowerShell voorbeeld worden de New-AzResourceGroup en New-AzVmss cmdlets gebruikt.

Note

Gebruik een toegewezen resourcegroep voor dit voorbeeld, zodat u de bijbehorende resources kunt verwijderen wanneer u klaar bent.

In het voorbeeld wordt een openbaar IP-adres gemaakt. Gebruik voor beheertoegang Azure Bastion in plaats van RDP- of SSH-poorten open te stellen voor het internet.

# 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

Instellingen voor automatisch schalen maken

Volg de onderstaande volgorde om de instelling voor automatisch schalen te maken met Behulp van PowerShell:

  1. Regels maken met behulp van New-AzAutoscaleScaleRuleObject.
  2. Maak een profiel met behulp van New-AzAutoscaleProfileObject.
  3. Maak de instellingen voor automatisch schalen met behulp van New-AzAutoscaleSetting.
  4. Werk de instellingen bij met behulp van Update-AzAutoscaleSetting.

Regels maken

Maak in- en uitschaalregels en koppel deze vervolgens aan een profiel.

In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleScaleRuleObject cmdlet gebruikt.

Note

Er worden twee regels gemaakt:

  • Uitschalen wanneer het cpu-percentage hoger is dan 70%.
  • Verkleinen wanneer het CPU-percentage kleiner is dan 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

In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleScaleRuleObject cmdlet worden gebruikt.

Kenmerk Beschrijving
MetricTriggerMetricName Hiermee stelt u de metrische waarde voor de trigger voor automatische schaalaanpassing in
MetricTriggerMetricResourceUri Hiermee geeft u de resource waartoe de MetricTriggerMetricName metrische waarde behoort. MetricTriggerMetricResourceUri kan elke resource zijn en niet alleen de resource die wordt geschaald. U kunt bijvoorbeeld uw virtuele-machineschaalsets schalen op basis van metrische gegevens die zijn gemaakt door een load balancer, database of de schaalset zelf. De MetricTriggerMetricName moet bestaan voor de opgegeven MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain De steekproeffrequentie van de metrische gegevens die door de regel worden bewaakt. MetricTriggerTimeGrain moet een van de vooraf gedefinieerde waarden voor de opgegeven metrische waarde zijn en moet tussen 12 uur en 1 minuut zijn. PT1M betekent bijvoorbeeld MetricTriggerTimeGrain =
MetricTriggerTimeAggregation De aggregatiemethode binnen de timeGrain-periode. Statistiek = "Average" en timeGrain = "PT1M" betekent bijvoorbeeld dat de metrische gegevens om de 1 minuut worden geaggregeerd door het gemiddelde te nemen.
MetricTriggerStatistic De aggregatiemethode die wordt gebruikt voor het aggregeren van de metrische steekproefgegevens. TimeAggregation = 'Average' aggregert bijvoorbeeld de metrische steekproefgegevens door het gemiddelde te nemen.
MetricTriggerTimeWindow De tijdsperiode waarop de autoscale-engine terugkijkt om de metriek te aggregeren. Deze waarde moet groter zijn dan de vertraging in het verzamelen van metrische gegevens, die per resource varieert. Het moet tussen 5 minuten en 12 uur zijn. 10 minuten betekent bijvoorbeeld dat elke keer dat automatische schaalaanpassing wordt uitgevoerd, metrische gegevens worden opgevraagd voor de afgelopen 10 minuten. Met deze functie kunnen uw metrische gegevens stabiliseren en voorkomen dat er op tijdelijke pieken wordt gereageerd.
MetricTriggerThreshold Definieert de waarde van de metrische waarde die een schaal gebeurtenis activeert.
MetricTriggerOperator Hiermee geeft u de logische vergelijkende werking die moet worden gebruikt bij het evalueren van de metrische waarde.
MetricTriggerDividePerInstance Wanneer deze optie is ingesteld, wordt de triggermetriek gedeeld door het totale aantal exemplaren. Als het aantal berichten bijvoorbeeld 300 is en er vijf exemplaren worden uitgevoerd, is de berekende metrische waarde 60 berichten per exemplaar. Deze eigenschap is niet van toepassing op alle metrische gegevens.
ScaleActionDirection Geef in- of uitschalen op. Geldige waarden zijn Increase en Decrease.
ScaleActionType Schaal op een bepaald aantal exemplaren, schaal naar een specifiek aantal exemplaren of schaal op percentage van het huidige aantal exemplaren. Geldige waarden zijn onder andere ChangeCount, ExactCounten PercentChangeCount.
ScaleActionCooldown De minimale tijd na een schaalbewerking die moet worden doorgegeven voordat deze regel in aanmerking komt voor het initiëren van een andere schaalactie. Autoscale controleert de afkoelperiode van elke regel afzonderlijk. De cooldown zorgt ervoor dat de metingen stabiliseren en voorkomt flapping.

Een standaardprofiel voor automatisch schalen maken en de regels koppelen

Nadat u de schaalregels hebt gedefinieerd, maakt u een profiel. In het profiel worden de standaard-, boven- en onderaantalslimieten opgegeven, evenals de tijden waarop de bijbehorende regels kunnen worden toegepast.

In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleProfileObject cmdlet gebruikt.

Note

Omdat dit profiel een standaardprofiel is, heeft het geen planningsparameters. Het standaardprofiel is actief op momenten dat er geen andere profielen actief zijn.

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

In de onderstaande tabel worden de parameters beschreven die in de New-AzAutoscaleProfileObject cmdlet worden gebruikt.

Kenmerk Beschrijving
CapacityDefault Het aantal exemplaren dat beschikbaar is als er geen metrieke gegevens beschikbaar zijn voor evaluatie. De standaardwaarde wordt alleen gebruikt als het huidige aantal exemplaren lager is dan de standaardwaarde.
CapacityMaximum Het maximum aantal exemplaren voor de resource. Het maximum aantal exemplaren wordt verder beperkt door het aantal kernen dat beschikbaar is in het abonnement.
CapacityMinimum Het minimale aantal exemplaren voor de resource.
FixedDateEnd De eindtijd voor het profiel in ISO 8601-indeling.
FixedDateStart De begintijd voor het profiel in ISO 8601-indeling.
Rule Een verzameling regels die de triggers en parameters voor de schaalactie bieden wanneer dit profiel actief is. Er kunnen maximaal 10 door komma's gescheiden regels worden opgegeven.
RecurrenceFrequency Hoe vaak het geplande profiel van kracht wordt. Deze waarde moet zijn week.
ScheduleDay Een verzameling dagen waarop het profiel van kracht wordt bij het opgeven van een terugkerend schema. Mogelijke waarden zijn zondag tot en met zaterdag. Zie Terugkerende profielen met Behulp van PowerShell voor meer informatie over terugkerende planningen.
ScheduleHour Een verzameling uren waarop het profiel van kracht wordt. Ondersteunde waarden zijn 0 tot 23.
ScheduleMinute Een verzameling minuten waarop het profiel van kracht wordt.
ScheduleTimeZone De tijdzone voor de uren van het profiel.

De instellingen voor automatisch schalen toepassen

Nadat u de regels en het profiel hebt gedefinieerd, past u de instellingen voor automatisch schalen toe. Als u een bestaande instelling voor automatische schaalaanpassing wilt bijwerken, gebruikt u Update-AzAutoscaleSetting.

In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleSetting cmdlet gebruikt.

# 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

Meldingen toevoegen aan uw instellingen voor automatisch schalen

Voeg meldingen toe aan uw instelling voor automatisch schalen om een webhook te activeren of e-mailmeldingen te verzenden wanneer er een schaalgebeurtenis plaatsvindt.

In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleWebhookNotificationObject cmdlet gebruikt.

# Set variables
$webhookUri = "<WebhookUri>"

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

In het volgende Azure PowerShell voorbeeld wordt de New-AzAutoscaleNotificationObject cmdlet gebruikt om webhook- en e-mailmeldingen te configureren.

Note

Gebruik een HTTPS-eindpunt voor de webhook.

# Set variables
$notificationEmail = "<NotificationEmail>"

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

In het volgende Azure PowerShell voorbeeld wordt de Update-AzAutoscaleSetting cmdlet gebruikt om de kennisgeving toe te passen.

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

# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Uw instellingen voor automatische schaalaanpassing controleren

In het volgende Azure PowerShell voorbeeld wordt de Get-AzAutoscaleSetting cmdlet gebruikt om de instelling voor automatische schaalaanpassing op te halen.

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

In het volgende Azure PowerShell voorbeeld wordt de Get-AzAutoscaleHistory cmdlet gebruikt.

Note

Er wordt een query uitgevoerd op de geschiedenis van de instelling voor automatische schaalaanpassing, niet op de resource-id van de schaalset.

# 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

Geplande en terugkerende profielen

Note

Wanneer u Profile bijwerkt, neemt u elk profiel op dat u wilt behouden. In de volgende voorbeelden worden profielen toegevoegd aan de instelling die eerder in dit artikel is gemaakt. Houd eventuele andere profielen bij het aanpassen aan een andere instelling voor automatisch schalen.

Een gepland profiel voor een speciale gebeurtenis toevoegen

Stel profielen voor automatische schaalaanpassing in om anders te schalen voor specifieke gebeurtenissen. Maak bijvoorbeeld voor een dag waarop de vraag hoger is dan normaal, een profiel met verhoogde maximum- en minimale exemplaarlimieten.

In het volgende Azure PowerShell voorbeeld worden de New-AzAutoscaleProfileObject en Update-AzAutoscaleSetting cmdlets gebruikt.

Note

In het volgende voorbeeld worden dezelfde regels gebruikt als het standaardprofiel dat eerder is gedefinieerd, maar worden nieuwe instantielimieten ingesteld voor een specifieke datum. U kunt ook verschillende regels configureren voor gebruik met het nieuwe profiel. De begin- en eindwaarden gebruiken ISO 8601-tijdstempels 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

Een terugkerend gepland profiel toevoegen

Met terugkerende profielen kunt u een schaalprofiel plannen dat elke week wordt herhaald.

Hoewel geplande profielen een begin- en einddatum hebben, hebben terugkerende profielen geen eindtijd. Een profiel blijft actief tot de begintijd van het volgende profiel. Wanneer u een terugkerend profiel maakt, moet u daarom een terugkerend standaardprofiel maken dat begint wanneer u wilt dat het vorige terugkerende profiel wordt voltooid.

In het volgende Azure PowerShell voorbeeld worden de New-AzAutoscaleProfileObject en Update-AzAutoscaleSetting cmdlets gebruikt.

Note

Bijvoorbeeld, schakel over naar een enkele instance in het weekend van vrijdagavond tot maandagochtend. Als u een weekendprofiel wilt configureren dat begint op vrijdagavond en eindigt op maandagochtend, maakt u een profiel dat op vrijdagavond begint en maakt u vervolgens een terugkerend profiel met uw standaardinstellingen dat op maandagochtend begint.

Er wordt een weekendprofiel en een terugkerend standaardprofiel gemaakt om het weekendprofiel te beëindigen, terwijl de standaard- en vaste-datumprofielen uit de eerdere stappen behouden blijven.

# 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

Zie Automatisch schalen met meerdere profielen voor meer informatie over geplande profielen.

Andere opdrachten voor automatisch schalen

Zie de PowerShell-modulebrowser voor een volledige lijst met PowerShell-cmdlets voor automatisch schalen.

Resources opschonen

Als u de resources die u in deze zelfstudie hebt gemaakt, wilt opschonen, verwijdert u de toegewezen resourcegroep die u hebt gemaakt. Met de volgende cmdlet worden de resourcegroep en alle bijbehorende resources verwijderd.

In het volgende Azure PowerShell voorbeeld wordt de Remove-AzResourceGroup cmdlet gebruikt.

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