Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La scalabilità automatica garantisce che la giusta quantità di risorse in esecuzione sia disponibile per gestire il carico variabile dell'applicazione. È possibile configurare la scalabilità automatica usando il portale di Azure, interfaccia della riga di comando di Azure, Azure PowerShell o i modelli ARM o 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 ridurre e aumentare.
- Creare un profilo che usi le regole.
- Applicare le impostazioni di scalabilità automatica.
- Aggiorna le impostazioni di scalabilità automatica includendo 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
Usare PowerShell in Azure Cloud Shell.
Note
Eseguire gli esempi nella stessa sessione di PowerShell con la sottoscrizione desiderata selezionata.
# 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"
Creare un set di scalabilità di macchine virtuali
Nell'esempio Azure PowerShell seguente vengono usati i cmdlet New-AzResourceGroup e New-AzVmss.
Note
Usare un gruppo di risorse dedicato per questo esempio in modo da poter eliminare le relative risorse quando hai finito.
Nell'esempio viene creato un indirizzo IP pubblico. Per l'accesso alla gestione, usare Azure Bastion invece di esporre le porte RDP o SSH a 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
Creare le impostazioni di scalabilità automatica
Per creare un'impostazione di scalabilità automatica con PowerShell, seguire la sequenza seguente:
- Creare regole usando
New-AzAutoscaleScaleRuleObject. - Creare un profilo usando
New-AzAutoscaleProfileObject. - Creare le impostazioni di scalabilità automatica usando
New-AzAutoscaleSetting. - Aggiornare le impostazioni usando
Update-AzAutoscaleSetting.
Crea regole
Creare regole di riduzione e aumento e quindi associarle a un profilo.
Nell'esempio Azure PowerShell seguente viene usato il New-AzAutoscaleScaleRuleObject cmdlet .
Note
Crea due regole:
- Aumenta il numero di istanze quando la Percentuale CPU supera 70%.
- Ridurre le risorse quando la percentuale della CPU è inferiore al 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
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 viene eseguita la scalabilità automatica, viene eseguita una query sulle metriche per i 10 minuti precedenti. 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 per il 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 dopo un'operazione di scalabilità che deve trascorrere prima che questa regola sia idonea per avviare un'altra azione di scalabilità. La scalabilità automatica verifica il periodo di attesa per ciascuna regola in modo indipendente. Il raffreddamento consente alle metriche di stabilizzarsi ed evitare il flapping. |
Creare un profilo di scalabilità automatica predefinito e associare le regole
Dopo aver definito le regole della scala, creare un profilo. Il profilo specifica i limiti predefiniti, superiori e inferiori del numero di istanze e i tempi di applicazione delle regole associate.
Nell'esempio Azure PowerShell seguente viene usato il New-AzAutoscaleProfileObject cmdlet .
Note
Poiché questo profilo è un profilo predefinito, non ha parametri di pianificazione. Il profilo predefinito è attivo nei momenti in cui nessun altro profilo è attivo.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
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 |
Un insieme di giorni in cui il profilo è attivo quando si specifica una pianificazione ricorrente. I valori possibili sono da domenica a sabato. Per altre informazioni sulle pianificazioni ricorrenti, vedere Profili ricorrenti con PowerShell. |
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 entra in vigore. |
ScheduleTimeZone |
Fuso orario per le ore del profilo. |
Applicare le impostazioni di scalabilità automatica
Dopo aver definito le regole e il profilo, applicare le impostazioni di scalabilità automatica. Per aggiornare un'impostazione di scalabilità automatica esistente, usare Update-AzAutoscaleSetting.
Nell'esempio Azure PowerShell seguente viene usato il New-AzAutoscaleSetting cmdlet .
# 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
Aggiungere notifiche alle impostazioni di scalabilità automatica
Aggiungere notifiche all'impostazione di scalabilità automatica per attivare un webhook o inviare notifiche tramite posta elettronica quando si verifica un evento di scalabilità.
Nell'esempio Azure PowerShell seguente viene usato il New-AzAutoscaleWebhookNotificationObject cmdlet .
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
Nell'esempio seguente Azure PowerShell viene usato il New-AzAutoscaleNotificationObject cmdlet per configurare webhook e notifiche di posta elettronica.
Note
Usare un endpoint HTTPS per il webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
Nell'esempio di Azure PowerShell seguente viene usato il Update-AzAutoscaleSetting cmdlet per applicare la notifica.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Esaminare le impostazioni di scalabilità automatica
Nell'esempio di Azure PowerShell seguente viene usato il Get-AzAutoscaleSetting cmdlet per recuperare l'impostazione di scalabilità automatica.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
Nell'esempio Azure PowerShell seguente viene usato il Get-AzAutoscaleHistory cmdlet .
Note
Esegue una query sulla cronologia dell'impostazione di scalabilità automatica, non sull'ID risorsa del set di scalabilità.
# 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
Profili pianificati e ricorrenti
Note
Quando si aggiorna Profile, includere ogni profilo che si vuole mantenere. Negli esempi seguenti vengono aggiunti profili all'impostazione creata in precedenza in questo articolo. Mantenere qualsiasi altro profilo durante l'adattamento a un'altra impostazione di scalabilità automatica.
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 Azure PowerShell seguente vengono usati i New-AzAutoscaleProfileObject cmdlet e Update-AzAutoscaleSetting .
Note
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. I valori di inizio e fine usano timestamp ISO 8601 in formato 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
Aggiungere un profilo pianificato ricorrente
I profili ricorrenti consentono di pianificare un profilo di ridimensionamento che si ripete ogni settimana.
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.
L'esempio seguente di Azure PowerShell usa i cmdlet New-AzAutoscaleProfileObject e Update-AzAutoscaleSetting.
Note
Ad esempio, ridurre a una singola istanza per il fine settimana, dal venerdì sera al lunedì mattina. 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 inizia lunedì mattina.
Crea un profilo fine settimana e un profilo predefinito ricorrente per far terminare il profilo del fine settimana, mantenendo i profili predefiniti e a data fissa dai passaggi precedenti.
# 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
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 PowerShell Module Browser.
Pulire le risorse
Per pulire le risorse create in questa esercitazione, eliminare il gruppo di risorse dedicato creato. Il cmdlet seguente elimina il gruppo di risorse e tutte le relative risorse.
Nell'esempio Azure PowerShell seguente viene usato il Remove-AzResourceGroup cmdlet .
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName