Configurer la mise à l’échelle automatique avec PowerShell
La mise à l’échelle automatique permet de vérifier que la quantité appropriée de ressources s’exécute pour gérer la charge fluctuante de votre application. Vous pouvez configurer la mise à l’échelle automatique à l’aide des modèles du portail Azure, d’Azure CLI, de PowerShell ou ARM ou de Bicep.
Cet article vous montre comment configurer la mise à l’échelle automatique pour un groupe de machines virtuelles identiques avec PowerShell. Les étapes de configuration sont les suivantes :
- Créez un groupe identique que vous pouvez automatiquement mettre à l’échelle
- Créez des règles pour effectuer un scale-in et un scale-out
- Créez un profil qui utilise vos règles
- Appliquez les paramètres de mise à l’échelle automatique
- Mettez à jour vos paramètres de mise à l’échelle automatique avec des notifications
Prérequis
Il vous faut un compte Azure avec un abonnement actif pour configurer la mise à l’échelle automatique à l’aide de PowerShell. Vous pouvez créer un compte gratuitement.
Configurer votre environnement
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Crée un groupe de machines virtuelles identiques
Créez un groupe identique à l’aide des cmdlets suivantes. Définissez les variables $resourceGroupName
et $vmssName
pour convenir à votre environnement.
# 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"
Créez des paramètres de mise à l’échelle automatique
Suivez la séquence ci-dessous pour créer un paramètre de mise à l’échelle automatique à l’aide de PowerShell :
- Créez des règles à l’aide de
New-AzAutoscaleScaleRuleObject
- Créez un profil à l’aide de
New-AzAutoscaleProfileObject
- Créez les paramètres de mise à l’échelle automatique à l’aide de
New-AzAutoscaleSetting
- Mettez à jour les paramètres à l’aide de
Update-AzAutoscaleSetting
Création de règles
Créez des règles de scale-in et de scale-out, puis associez-les à un profil.
Les règles sont créées à l’aide de New-AzAutoscaleScaleRuleObject
.
Le script PowerShell suivant crée deux règles.
- Un scale-out est effectué lorsque le pourcentage d’UC dépasse 70 %
- Un scale-in est effectué lorsque le pourcentage d’UC est inférieur à 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))
Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleScaleRuleObject
.
Paramètre | Description |
---|---|
MetricTriggerMetricName |
Définit la métrique de déclencheur de mise à l’échelle automatique |
MetricTriggerMetricResourceUri |
Spécifie la ressource à laquelle appartient la métrique MetricTriggerMetricName . MetricTriggerMetricResourceUri peut être n’importe quelle ressource et pas seulement la ressource en cours de mise à l’échelle. Par exemple, vous pouvez mettre à l’échelle vos groupes de machines virtuelles identiques en fonction des métriques créées par un équilibreur de charge, une base de données ou le groupe identique lui-même. MetricTriggerMetricName doit exister pour le MetricTriggerMetricResourceUri spécifié. |
MetricTriggerTimeGrain |
Fréquence d’échantillonnage de la métrique surveillée par la règle. MetricTriggerTimeGrain doit être l’une des valeurs prédéfinies pour la métrique spécifiée et doit être comprise entre 12 heures et 1 minute. Par exemple, MetricTriggerTimeGrain = PT1M"* signifie que les métriques sont échantillonnées chaque minute et agrégées à l’aide de la méthode d’agrégation spécifiée dans MetricTriggerStatistic . |
MetricTriggerTimeAggregation |
Méthode d’agrégation au cours de la période timeGrain. Par exemple, statistic = "Average" et timeGrain = "PT1M" signifient que les métriques sont agrégées chaque minute en prenant la valeur moyenne. |
MetricTriggerStatistic |
Méthode d’agrégation utilisée pour agréger les mesures échantillonnées. Par exemple, TimeAggregation = "Average" agrège les mesures échantillonnées en prenant la moyenne. |
MetricTriggerTimeWindow |
Le laps de temps passé que le moteur de mise à l’échelle automatique examine pour agréger la métrique. Cette valeur doit être supérieure au délai de collecte des métriques, qui peut varier d'une ressource à l'autre. Elle doit être comprise entre 5 minutes et 12 heures. Par exemple, 10 minutes signifie qu’à chaque exécution d’une mise à l’échelle automatique, elle interroge les métriques sur les 10 dernières minutes. Cette fonctionnalité permet à vos métriques de se stabiliser et évite de réagir à des pics temporaires. |
MetricTriggerThreshold |
Définit la valeur de la métrique qui déclenche un événement de mise à l’échelle. |
MetricTriggerOperator |
Spécifie l’opérateur logique comparatif à utiliser pour évaluer la valeur de la métrique. |
MetricTriggerDividePerInstance |
Divise la métrique de déclencheur par le nombre total d’instances lorsqu’il est défini sur true . Par exemple, s’il y a 300 messages et que 5 instances sont en cours d’exécution, la valeur de métrique calculée est de 60 messages par instance. Cette propriété ne s’applique pas à toutes les métriques. |
ScaleActionDirection |
Spécifiez un scale-in ou un scale-out. Les valeurs valides sont Increase et Decrease . |
ScaleActionType |
Mettez à l’échelle selon un nombre spécifique d’instances, mettez à l’échelle vers un nombre d’instances spécifique ou mettez à l’échelle selon le pourcentage du nombre d’instances actuel. Les valeurs valides sont ChangeCount , ExactCount et PercentChangeCount . |
ScaleActionCooldown |
Durée minimale d’attente entre les opérations de mise à l’échelle. Cela permet aux métriques de se stabiliser et d’éviter les battements. Par exemple, si ScaleActionCooldown est de 10 minutes et qu’une opération de mise à l’échelle vient de se produire, la mise à l’échelle automatique ne retente pas la mise à l'échelle pendant 10 minutes. |
Créer un profil de mise à l’échelle automatique par défaut et associer les règles
Une fois les règles de mise à l’échelle définies, créez un profil. Le profil spécifie les limites du nombre d’instances par défaut, supérieures et inférieures, ainsi que les heures auxquelles les règles associées peuvent être appliquées. Utilisez la cmdlet New-AzAutoscaleProfileObject
pour créer un nouveau profil de mise à l’échelle automatique. Comme il s’agit d’un profil par défaut, il n’a aucun paramètre de planification. Le profil par défaut est actif à des moments où aucun autre profil n’est actif
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
Le tableau suivant décrit les paramètres utilisés dans la cmdlet New-AzAutoscaleProfileObject
.
Paramètre | Description |
---|---|
CapacityDefault |
Le nombre d’instances existantes si des métriques ne sont pas disponibles pour l’évaluation. La valeur par défaut est utilisée uniquement si le nombre d'instances actives est inférieur à la valeur par défaut. |
CapacityMaximum |
Le nombre maximal d’instances pour la ressource. Le nombre maximal d'instances est davantage limité par le nombre de cœurs disponibles dans l'abonnement. |
CapacityMinimum |
Le nombre minimal d’instances pour la ressource. |
FixedDateEnd |
L’heure de fin du profil au format ISO 8601 pour. |
FixedDateStart |
L’heure de début du profil au format ISO 8601. |
Rule |
Collection de règles qui fournissent les déclencheurs et les paramètres de l'action de mise à l'échelle lorsque ce profil est actif. Un maximum de 10 règles séparées par des virgules peut être spécifié. |
RecurrenceFrequency |
Fréquence à laquelle le profil planifié prend effet. Cette valeur doit être week . |
ScheduleDay |
Collection de jours pendant lesquels le profil prend effet lors de la spécification d’une planification récurrente. Les valeurs possibles sont dimanche à samedi. Pour plus d’informations sur les planifications récurrentes, consultez Ajouter un profil récurrent à l’aide de l’interface de ligne de commande (CLI, Common Language Infrastructure) |
ScheduleHour |
Collection d’heures auxquelles le profil prend effet. Les valeurs prises en charge sont de 0 à 23. |
ScheduleMinute |
Collection de minutes auxquelles le profil prend effet. |
ScheduleTimeZone |
Fuseau horaire pour les heures du profil. |
Appliquez les paramètres de mise à l’échelle automatique
Une fois les règles et le profil définis, appliquez les paramètres de mise à l’échelle automatique à l’aide de New-AzAutoscaleSetting
. Utilisez Update-AzAutoscaleSetting
pour mettre à jour le paramètre de mise à l’échelle automatique existant
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"
Ajoutez des notifications à vos paramètres de mise à l’échelle automatique
Ajoutez des notifications à votre paramètre de mise à l’échelle pour déclencher un webhook ou envoyer des notifications par e-mail lorsqu’un événement de mise à l’échelle se produit.
Pour plus d’informations sur les notifications webhook, consultez New-AzAutoscaleWebhookNotificationObject
Définissez un webhook à l’aide de la cmdlet suivante :
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Configurez la notification à l’aide du webhook et configurez la notification par e-mail à l’aide de la cmdlet New-AzAutoscaleNotificationObject
:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Mettez à jour vos paramètres de mise à l’échelle automatique pour appliquer la notification
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Passez vos paramètres de mise à l’échelle automatique en revue
Pour passer en revue vos paramètres de mise à l’échelle automatique, chargez les paramètres dans une variable à l’aide de Get-AzAutoscaleSetting
, puis sortez la variable comme suit :
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Obtenez votre historique de mise à l’échelle automatique avec AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Profils planifiés et récurrents
Ajouter un profil planifié pour un événement spécial
Configurez des profils de mise à l’échelle automatique pour qu’ils évoluent différemment selon des événements spécifiques. Par exemple, pour les jours où la demande est plus élevée que d’habitude, créez un profil avec des limites d’instances maximales et minimales élargies.
L’exemple suivant utilise les mêmes règles que le profil par défaut défini ci-dessus, mais établit de nouvelles limites d’instance pour une date spécifique. Vous pouvez également configurer des règles différentes à utiliser avec le nouveau profil.
$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"
Ajouter un profil planifié récurrent
Les profils récurrents vous permettent de planifier un profil de mise à l’échelle qui se répète chaque semaine. Par exemple, effectuez une mise à l’échelle vers une seule instance le week-end du vendredi soir au lundi matin.
Bien que les profils planifiés aient une date de début et de fin, les profils récurrents n’ont pas d’heure de fin. Un profil reste actif jusqu’à l’heure de début du profil suivant. Ainsi, lorsque vous créez un profil récurrent, vous devez créer un profil récurrent par défaut qui commence lorsque vous souhaitez que le profil récurrent précédent se termine.
Par exemple, pour configurer un profil de week-end qui commence le vendredi soir et se termine le lundi matin, créez un profil qui commence le vendredi soir, puis créez un profil récurrent qui commence le lundi matin avec vos paramètres par défaut.
Le script suivant crée un profil de week-end et un profil par défaut supplémentaire pour mettre fin au profil de week-end.
$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"
Pour plus d’informations sur les profils planifiés, consultez Mise à l’échelle automatique avec plusieurs profils
Autres commandes de mise à l’échelle automatique
Pour obtenir la liste complète des cmdlets PowerShell de mise à l’échelle automatique, consultez le navigateur de modules PowerShell
Nettoyer les ressources
Pour nettoyer les ressources que vous avez créées dans ce tutoriel, supprimez le groupe de ressources que vous avez créé. La cmdlet suivante supprime le groupe de ressources et toutes ses ressources.
Remove-AzResourceGroup -Name $resourceGroupName