Configurare la scalabilità automatica con PowerShell

La scalabilità automatica permette di eseguire la giusta quantità di risorse per gestire il carico variabile dell'applicazione. È possibile configurare la scalabilità automatica usando il portale di Azure, l'interfaccia della riga di comando di Azure, PowerShell o ARM o i modelli Bicep.

Questo articolo illustra come configurare la scalabilità automatica per un set di scalabilità di macchine virtuali con PowerShell. Le configurazioni usano la procedura seguente:

  • Creare un set di scalabilità che è possibile ridimensionare automaticamente
  • Creare regole per la scalabilità orizzontale e l'aumento del numero di istanze
  • Creare un profilo che usi le regole
  • Applicare le impostazioni di scalabilità automatica
  • Aggiornare le impostazioni di scalabilità automatica con le notifiche

Prerequisiti

Per configurare la scalabilità automatica con PowerShell, è necessario un account Azure con una sottoscrizione attiva. È possibile creare un account gratuitamente.

Configurazione dell'ambiente

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

Creare un set di scalabilità di macchine virtuali

Creare un set di scalabilità usando i cmdlet seguenti. Impostare le variabili $resourceGroupName e $vmssName per la suite dell'ambiente.

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

Creare le impostazioni di scalabilità automatica

Per creare un'impostazione di scalabilità automatica con PowerShell, seguire la sequenza seguente:

  1. Creare le regole usando New-AzAutoscaleScaleRuleObject
  2. Creare un profilo usando New-AzAutoscaleProfileObject
  3. Creare le impostazioni di scalabilità automatica usando New-AzAutoscaleSetting
  4. Aggiornare le impostazioni usando Update-AzAutoscaleSetting

Crea regole

Creare regole di aumento e aumento del numero di istanze, quindi associarle a un profilo. Le regole vengono create usando New-AzAutoscaleScaleRuleObject.

Lo script di PowerShell seguente crea due regole.

  • Aumentare il numero di istanze quando la percentuale di CPU supera il 70%
  • Aumentare le prestazioni quando percentuale CPU è inferiore al 30%

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

La tabella seguente descrive i parametri usati nel cmdlet New-AzAutoscaleScaleRuleObject.

Parametro Descrizione
MetricTriggerMetricName Imposta la metrica del trigger di scalabilità automatica
MetricTriggerMetricResourceUri Specifica la risorsa a cui appartiene la metrica MetricTriggerMetricName. MetricTriggerMetricResourceUri può essere qualsiasi risorsa e non solo la risorsa ridimensionata. Ad esempio, è possibile ridimensionare i set di scalabilità di macchine virtuali in base alle metriche create da un servizio di bilanciamento del carico, un database o il set di scalabilità stesso. MetricTriggerMetricName deve esistere per il MetricTriggerMetricResourceUri specificato.
MetricTriggerTimeGrain Frequenza di campionamento della metrica monitorata dalla regola. MetricTriggerTimeGrain deve essere uno dei valori predefiniti per la metrica specificata e deve essere compreso tra 12 ore e 1 minuto. Ad esempio, MetricTriggerTimeGrain = PT1M"* indica che le metriche vengono campionate ogni 1 minuto e aggregate usando il metodo di aggregazione specificato in MetricTriggerStatistic.
MetricTriggerTimeAggregation Metodo di aggregazione nel periodo specificato per timeGrain. Ad esempio, la statistica = "Average" e timeGrain = "PT1M" indica che le metriche vengono aggregate ogni 1 minuto prendendo la media.
MetricTriggerStatistic Metodo di aggregazione usato per aggregare le metriche campionate. Ad esempio, TimeAggregation = "Average" aggrega le metriche campionate prendendo la media.
MetricTriggerTimeWindow Periodo di tempo in cui il motore di scalabilità automatica cerca di aggregare la metrica. Questo valore deve essere maggiore del ritardo nella raccolta delle metriche, che varia in base alla risorsa. Deve essere compreso tra 5 minuti e 12 ore. Ad esempio, 10 minuti significa che ogni volta che la scalabilità automatica viene eseguita, esegue una query sulle metriche degli ultimi 10 minuti. Questa funzionalità consente alle metriche di stabilizzarsi ed evitare la reazione ai picchi temporanei.
MetricTriggerThreshold Definisce il valore della metrica che attiva un evento di scalabilità.
MetricTriggerOperator Specifica il funzionamento comparativo logico da usare durante la valutazione del valore della metrica.
MetricTriggerDividePerInstance Se impostato su true divide la metrica del trigger in base al numero totale di istanze. Ad esempio, se il numero di messaggi è 300 e sono in esecuzione 5 istanze, il valore della metrica calcolata è 60 messaggi per istanza. Questa proprietà non è applicabile a tutte le metriche.
ScaleActionDirection Specificare la scalabilità orizzontale o verticale. I valori validi sono Increase e Decrease.
ScaleActionType Ridimensionare in base a un numero specifico di istanze, ridimensionare in base a un numero di istanze specifiche o scalare in base alla percentuale del numero di istanze corrente. I valori validi includono ChangeCount, ExactCount e PercentChangeCount.
ScaleActionCooldown Quantità minima di tempo di attesa tra le operazioni di scalabilità. Ciò consente alle metriche di stabilizzarsi ed evitare il flapping. Ad esempio, se ScaleActionCooldown è 10 minuti e si è appena verificata un'operazione di ridimensionamento, la scalabilità automatica non tenterà di ridimensionare di nuovo per 10 minuti.

Creare un profilo di scalabilità automatica predefinito e associare le regole

Dopo aver definito le regole di scalabilità, creare un profilo. Il profilo specifica i limiti predefiniti, superiori e inferiori del numero di istanze e i tempi di applicazione delle regole associate. Usare il cmdlet New-AzAutoscaleProfileObject per creare un nuovo profilo di scalabilità automatica. Poiché si tratta di un profilo predefinito, non ha parametri di pianificazione. Il profilo predefinito è attivo a volte che nessun altro profilo è attivo

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

La tabella seguente descrive i parametri usati nel cmdlet New-AzAutoscaleProfileObject.

Parametro Descrizione
CapacityDefault Numero di istanze che sono se le metriche non sono disponibili per la valutazione. L'impostazione predefinita viene usata solo se il numero di istanze corrente è inferiore a quello predefinito.
CapacityMaximum Numero massimo di istanze per la risorsa. Il numero massimo di istanze è ulteriormente limitato dal numero di core disponibili nella sottoscrizione.
CapacityMinimum Numero minimo di istanze per la risorsa.
FixedDateEnd Ora di fine per il profilo in formato ISO 8601.
FixedDateStart Ora di inizio del profilo in formato ISO 8601.
Rule Raccolta di regole che forniscono i trigger e i parametri per l'azione di ridimensionamento quando questo profilo è attivo. È possibile specificare un massimo di 10 regole separate da virgole.
RecurrenceFrequency Frequenza con cui il profilo pianificato diventa effettivo. Questo valore deve essere week.
ScheduleDay Raccolta di giorni in cui il profilo diventa effettivo quando si specifica una pianificazione ricorrente. I valori possibili sono da domenica a sabato. Per altre informazioni sulle pianificazioni ricorrenti, vedere Aggiungere un profilo ricorrente tramite l'interfaccia della riga di comando
ScheduleHour Raccolta di ore in cui viene applicato il profilo. I valori supportati sono da 0 a 23.
ScheduleMinute Raccolta di minuti in cui il profilo viene applicato.
ScheduleTimeZone Fuso orario per le ore del profilo.

Applicare le impostazioni di scalabilità automatica

Dopo aver applicato le regole e il profilo, applicare le impostazioni di scalabilità automatica usando New-AzAutoscaleSetting. Per aggiornare l'impostazione di scalabilità automatica esistente, usare 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"

Aggiungere notifiche alle impostazioni di scalabilità automatica

Aggiungere notifiche all'impostazione di vendita per attivare un webhook o inviare notifiche tramite posta elettronica quando si verifica un evento di scalabilità. Per altre informazioni sulle notifiche webhook, vedere New-AzAutoscaleWebhookNotificationObject

Impostare un webhook usando il cmdlet seguente;


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

Configurare la notifica usando il webhook e configurare la notifica tramite posta elettronica usando il cmdlet New-AzAutoscaleNotificationObject:


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

Aggiornare le impostazioni di scalabilità automatica per applicare la notifica


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

Esaminare le impostazioni di scalabilità automatica

Per esaminare le impostazioni di scalabilità automatica, caricare le impostazioni in una variabile usando Get-AzAutoscaleSetting quindi restituire la variabile come indicato di seguito:

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

Ottenere la cronologia della scalabilità automatica con AzAutoscaleHistory

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

Profili pianificati e ricorrenti

Aggiungere un profilo pianificato per un evento speciale

Configurare i profili di scalabilità automatica per ridimensionare in modo diverso gli eventi specifici. Ad esempio, per un giorno in cui la domanda sarà superiore rispetto al solito, creare un profilo con limiti massimi e minimi di istanze aumentati.

Nell'esempio seguente vengono usate le stesse regole del profilo predefinito definito in precedenza, ma vengono impostati nuovi limiti di istanza per una data specifica. È anche possibile configurare regole diverse da usare con il nuovo profilo.

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

Aggiungere un profilo pianificato ricorrente

I profili ricorrenti consentono di pianificare un profilo di ridimensionamento che si ripete ogni settimana. Ad esempio, passare a una singola istanza del fine settimana dal venerdì sera al lunedì mattina.

Mentre i profili pianificati hanno una data di inizio e di fine, i profili ricorrenti non hanno un'ora di fine. Un profilo rimane attivo fino all'ora di inizio del profilo successivo. Pertanto, quando si crea un profilo ricorrente, è necessario creare un profilo predefinito ricorrente che inizia al termine del profilo ricorrente precedente.

Ad esempio, per configurare un profilo fine settimana che inizia venerdì sera e termina lunedì mattina, creare un profilo che inizia venerdì sera, quindi creare un profilo ricorrente con le impostazioni predefinite che iniziano il lunedì mattina.

Lo script seguente crea un profilo fine settimana e un profilo predefinito di addizione per terminare il profilo del fine settimana.

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

Per altre informazioni sui profili pianificati, vedere Scalabilità automatica con più profili

Altri comandi di scalabilità automatica

Per un elenco completo dei cmdlet di PowerShell per la scalabilità automatica, vedere Browser del modulo di PowerShell

Pulire le risorse

Per pulire le risorse create in questa esercitazione, eliminare il gruppo di risorse creato. Il cmdlet seguente elimina il gruppo di risorse e tutte le relative risorse.


Remove-AzResourceGroup -Name $resourceGroupName