Configurare la scalabilità automatica con PowerShell

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

Questo articolo illustra come configurare la scalabilità automatica per un set di scalabilità di macchine virtuali con PowerShell, seguendo questa procedura:

  • Creare un set di scalabilità che è possibile ridimensionare automaticamente
  • Creare regole per scalabilità orizzontale e scalabilità orizzontale
  • Creare un profilo che usa 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.

Configurare l'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 e $vmssName su suite dell'ambiente$resourceGroupName.

# 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 impostazioni di scalabilità automatica

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

  1. Creare 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

Creazione di regole

Creare una scalabilità orizzontale e ridimensionare le regole e quindi associarle a un profilo. Le regole vengono create usando .New-AzAutoscaleScaleRuleObject

Lo script di PowerShell seguente crea due regole.

  • Scalabilità orizzontale quando la CPU percentuale supera il 70%
  • Ridimensionare in quando la CPU percentuale è minore del 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 New-AzAutoscaleScaleRuleObject cmdlet.

Parametro Descrizione
MetricTriggerMetricName Imposta la metrica del trigger di scalabilità automatica
MetricTriggerMetricResourceUri Specifica la risorsa a cui appartiene la MetricTriggerMetricName metrica. MetricTriggerMetricResourceUri può essere qualsiasi risorsa e non solo la risorsa che viene ridimensionata. Ad esempio, è possibile ridimensionare il 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. Deve MetricTriggerMetricName esistere per l'oggetto specificato MetricTriggerMetricResourceUri.
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 = "Media" 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 La quantità di tempo in cui il motore di scalabilità automatica torna a aggregare la metrica. Questo valore deve essere maggiore del ritardo nella raccolta di 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 viene eseguita la scalabilità automatica, esegue query sulle metriche per gli ultimi 10 minuti. Questa funzionalità consente alle metriche di stabilizzarsi ed evitare di reagire 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 per true dividere la metrica del trigger in base al numero totale di istanze. Ad esempio, se il conteggio dei messaggi è 300 e sono in esecuzione 5 istanze, il valore della metrica calcolata è 60 messaggi per istanza. Questa proprietà non è applicabile per tutte le metriche.
ScaleActionDirection Specificare il ridimensionamento o l'uscita. I valori validi sono Increase e Decrease.
ScaleActionType Ridimensionare in base a un numero specifico di istanze, ridimensionare in un numero di istanze specifico o ridimensionare in base alla percentuale del numero di istanze correnti. I valori validi includono ChangeCount, ExactCount e PercentChangeCount.
ScaleActionCooldown Tempo minimo di attesa tra operazioni di scalabilità. Si tratta di consentire la stabilizzazione delle metriche ed evitare il flapping. Ad esempio, se ScaleActionCooldown è 10 minuti e si è appena verificata un'operazione di scalabilità, la scalabilità automatica non tenterà di ridimensionare nuovamente 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, superiore e inferiore del numero di istanze e i tempi di applicazione delle regole associate. Usare il New-AzAutoscaleProfileObject cmdlet per creare un nuovo profilo di scalabilità automatica. Come 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 New-AzAutoscaleProfileObject cmdlet.

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 del profilo nel 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 delimitate da virgole.
RecurrenceFrequency La frequenza con cui il profilo pianificato ha effetto. Questo valore deve essere week.
ScheduleDay Raccolta di giorni in cui il profilo ha effetto 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 usando l'interfaccia della riga di comando
ScheduleHour Raccolta di ore in cui il profilo ha effetto. I valori supportati sono da 0 a 23.
ScheduleMinute Raccolta di minuti in cui il profilo ha effetto.
ScheduleTimeZone Fuso orario per le ore del profilo.

Applicare le impostazioni di scalabilità automatica

Dopo aver terminata 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 il New-AzAutoscaleNotificationObject cmdlet:


    $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 usando 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 per eventi specifici. Ad esempio, per un giorno in cui la richiesta sarà superiore al solito, creare un profilo con limiti massimi e minimi delle istanze.

Nell'esempio seguente vengono utilizzate 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 ripetuto 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 il 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 aggiunta per terminare il profilo weekend.

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