Konfigurera autoskalning med Azure PowerShell

Autoskalning säkerställer att du har rätt mängd resurser som körs för att hantera den fluktuerande belastningen i ditt program. Du kan konfigurera autoskalning med Azure-portalen, Azure CLI, Azure PowerShell eller ARM- eller Bicep-mallar.

Den här artikeln visar hur du konfigurerar autoskalning för en VM-skalningsuppsättning med PowerShell. Konfigurationerna använder följande steg:

  • Skapa en skalningsuppsättning som du kan skala automatiskt.
  • Skapa regler för att skala in och skala ut.
  • Skapa en profil som baseras på dina regler.
  • Använd inställningarna för autoskalning.
  • Uppdatera inställningarna för autoskalning med meddelanden.

Förutsättningar

För att konfigurera autoskalning med PowerShell behöver du ett Azure-konto med en aktiv prenumeration. Du kan skapa ett konto kostnadsfritt.

Konfigurera din miljö

Note

Kör exemplen i samma PowerShell-session med din avsedda prenumeration vald.

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

Skapa en VM-skalningsuppsättning

I följande Azure PowerShell exempel används New-AzResourceGroup cmdletarna och New-AzVmss cmdletarna.

Note

Använd en dedikerad resursgrupp för det här exemplet så att du kan ta bort dess resurser när du är klar.

Exemplet skapar en offentlig IP-adress. För hanteringsåtkomst använder du Azure Bastion i stället för att exponera RDP- eller SSH-portar på 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

Skapa autoskalningsinställningar

Om du vill skapa autoskalningsinställning med PowerShell följer du sekvensen nedan:

  1. Skapa regler med hjälp av New-AzAutoscaleScaleRuleObject.
  2. Skapa en profil med hjälp av New-AzAutoscaleProfileObject.
  3. Skapa inställningarna för autoskalning med hjälp av New-AzAutoscaleSetting
  4. Uppdatera inställningarna med hjälp av Update-AzAutoscaleSetting.

Skapa regler

Skapa regler för inskalning och utskalning och associera dem sedan med en profil.

Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleScaleRuleObject.

Note

Det skapar två regler:

  • Skala ut när CPU i procent överskrider 70 %.
  • Skala ned när procentandelen CPU är mindre än 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

I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleScaleRuleObject .

Parameter Beskrivning
MetricTriggerMetricName Anger utlösarmätvärdet för autoskalning
MetricTriggerMetricResourceUri Anger den resurs som måttet MetricTriggerMetricName tillhör. MetricTriggerMetricResourceUri kan vara vilken resurs som helst och inte bara resursen som skalas. Du kan till exempel skala dina VM-skalningsuppsättningar baserat på mått som skapats av en lastbalanserare, databas eller själva skalningsuppsättningen. MetricTriggerMetricName behöver finnas för den angivna MetricTriggerMetricResourceUri.
MetricTriggerTimeGrain Samplingsfrekvensen för det mått som regeln övervakar. MetricTriggerTimeGrain måste vara ett av de fördefinierade värdena för det angivna måttet och måste vara mellan 12 timmar och 1 minut. PT1M"* innebär till exempel MetricTriggerTimeGrain =
MetricTriggerTimeAggregation Aggregeringsmetoden inom timeGrain-perioden. Till exempel innebär statistik = "Genomsnitt" och timeGrain = "PT1M" att måtten aggregeras var 1 minut genom att ta medelvärdet.
MetricTriggerStatistic Aggregeringsmetoden som används för att aggregera de samplade måtten. Till exempel aggregerar TimeAggregation = "Average" de samplade måtten genom att ta medelvärdet.
MetricTriggerTimeWindow Hur lång tid autoskalningsmotorn ser tillbaka på för att sammanställa mätvärdet. Det här värdet måste vara större än fördröjningen i måttsamlingen, som varierar beroende på resurs. Det måste vara mellan 5 minuter och 12 timmar. Till exempel innebär 10 minuter att varje gång autoskalning körs hämtar den mätvärden för de senaste 10 minuterna. Med den här funktionen kan dina mått stabiliseras och undvika att reagera på tillfälliga toppar.
MetricTriggerThreshold Definierar värdet för måttet som utlöser en skalningshändelse.
MetricTriggerOperator Anger den logiska jämförande drift som ska användas vid utvärdering av måttvärdet.
MetricTriggerDividePerInstance När värdet är inställt på true dividerar utlösarmåttet med det totala antalet instanser. Om antalet meddelanden till exempel är 300 och det körs 5 instanser är det beräknade måttvärdet 60 meddelanden per instans. Den här egenskapen gäller inte för alla mått.
ScaleActionDirection Ange in- eller utskalning. Giltiga värden är Increase och Decrease.
ScaleActionType Skala efter ett visst antal instanser, skala till ett visst instansantal eller skala efter procentandel av det aktuella instansantalet. Giltiga värden är ChangeCount, ExactCountoch PercentChangeCount.
ScaleActionCooldown Den minsta tidsperiod efter en skalningsåtgärd som måste förflyta innan den här regeln kan utlösa en annan skalningsåtgärd. Autoskalning kontrollerar varje regels nedkylning oberoende av varandra. Med nedkylningen kan måtten stabiliseras och undvika flaxning.

Skapa en standardprofil för autoskalning och associera reglerna

När du har definierat skalreglerna skapar du en profil. Profilen anger standardantalet samt övre och lägre gränser för instanser, och de tidpunkter då de associerade reglerna kan tillämpas.

Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleProfileObject.

Note

Eftersom den här profilen är en standardprofil har den inga schemaparametrar. Standardprofilen är aktiv när inga andra profiler är aktiva.

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

I tabellen nedan beskrivs de parametrar som används i cmdleten New-AzAutoscaleProfileObject .

Parameter Beskrivning
CapacityDefault Antalet instanser om mått inte är tillgängliga för utvärdering. Standardvärdet används bara om det aktuella instansantalet är lägre än standardvärdet.
CapacityMaximum Det maximala antalet instanser för resursen. Det maximala antalet instanser begränsas ytterligare av antalet kärnor som är tillgängliga i prenumerationen.
CapacityMinimum Det minsta antalet instanser för resursen.
FixedDateEnd Sluttiden för profilen i ISO 8601-format för.
FixedDateStart Starttiden för profilen i ISO 8601-format.
Rule En samling regler som tillhandahåller utlösare och parametrar för skalningsåtgärden när profilen är aktiv. Maximalt 10 kommaavgränsade regler kan anges.
RecurrenceFrequency Hur ofta den schemalagda profilen börjar gälla. Det här värdet måste vara week.
ScheduleDay En samling dagar då profilen börjar gälla när du anger ett återkommande schema. Möjliga värden är söndag till lördag. Mer information om återkommande scheman finns i Återkommande profiler med Hjälp av PowerShell.
ScheduleHour En samling timmar som profilen tar effekt under. Värden som stöds är 0 till 23.
ScheduleMinute En samling minuter då profilen börjar gälla.
ScheduleTimeZone Tidszonen för profilens timmar.

Tillämpa inställningarna för autoskalning

När du har definierat regler och profil tillämpar du inställningarna för autoskalning. Om du vill uppdatera en befintlig autoskalningsinställning använder du Update-AzAutoscaleSetting.

Följande Azure PowerShell exempel använder cmdletenNew-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

Lägga till meddelanden i inställningarna för autoskalning

Lägg till meddelanden i autoskalningsinställningen för att utlösa en webhook eller skicka e-postmeddelanden när en skalningshändelse inträffar.

Följande Azure PowerShell exempel använder cmdletenNew-AzAutoscaleWebhookNotificationObject.

# Set variables
$webhookUri = "<WebhookUri>"

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

I följande Azure PowerShell exempel används cmdleten New-AzAutoscaleNotificationObject för att konfigurera webhook- och e-postaviseringar.

Note

Använd en HTTPS-slutpunkt för webhooken.

# Set variables
$notificationEmail = "<NotificationEmail>"

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

Följande Azure PowerShell exempel använder cmdleten Update-AzAutoscaleSetting för att tillämpa aviseringen.

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

# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams

Granska inställningarna för autoskalning

I följande Azure PowerShell exempel används cmdleten Get-AzAutoscaleSetting för att hämta autoskalningsinställningen.

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

Följande Azure PowerShell exempel använder cmdletenGet-AzAutoscaleHistory.

Note

Den frågar efter autoskalningsinställningens historik, inte scale setets resurs-ID.

# 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

Schemalagda och återkommande profiler

Note

När du uppdaterar Profiletar du med varje profil som du vill behålla. I följande exempel läggs profiler till i inställningen som skapades tidigare i den här artikeln. Behåll andra profiler när du anpassar dem till en annan autoskalningsinställning.

Lägga till en schemalagd profil för en särskild händelse

Konfigurera autoskalningsprofiler för att skala på olika sätt för specifika händelser. För en dag då efterfrågan till exempel är högre än vanligt skapar du en profil med ökade gränser för maximal och minsta instans.

I följande Azure PowerShell-exempel används cmdletarna New-AzAutoscaleProfileObject och Update-AzAutoscaleSetting.

Note

I följande exempel används samma regler som standardprofilen som definierades tidigare, men nya instansgränser anges för ett visst datum. Du kan också konfigurera olika regler som ska användas med den nya profilen. Start- och slutvärdena använder ISO 8601-tidsstämplar i 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

Lägga till en återkommande schemalagd profil

Med återkommande profiler kan du schemalägga en skalningsprofil som upprepas varje vecka.

Schemalagda profiler har ett start- och slutdatum, men återkommande profiler har ingen sluttid. En profil förblir aktiv fram till nästa profils starttid. När du skapar en återkommande profil måste du därför skapa en återkommande standardprofil som startar när du vill att den tidigare återkommande profilen ska slutföras.

I följande Azure PowerShell exempel används New-AzAutoscaleProfileObject och Update-AzAutoscaleSetting cmdletarna.

Note

Skala till exempel till en enda instans på helgen från fredag kväll till måndag morgon. Om du vill konfigurera en helgprofil som startar på fredagskvällar och slutar på måndagsmorgnar skapar du en profil som startar på fredag kväll och skapar sedan en återkommande profil med standardinställningarna som börjar på måndag morgon.

Den skapar en helgprofil och en återkommande standardprofil för att avsluta helgprofilen, samtidigt som standardprofilen och profiler med fasta datum bevaras från de tidigare stegen.

# 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

Mer information om schemalagda profiler finns i Autoskalning med flera profiler.

Andra autoskalakommandon

En fullständig lista över PowerShell-cmdletar för autoskalning finns i PowerShell Module Browser.

Rensa resurser

Om du vill rensa de resurser som du skapade i den här självstudien tar du bort den dedikerade resursgrupp som du skapade. Följande cmdlet tar bort resursgruppen och alla dess resurser.

Följande Azure PowerShell exempel använder cmdletenRemove-AzResourceGroup.

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