Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El escalado automático ayuda a garantizar que tiene la cantidad adecuada de recursos en ejecución para administrar las fluctuaciones de carga de la aplicación. Puede configurar el escalado automático mediante el portal de Azure, CLI de Azure, Azure PowerShell o plantillas de ARM o Bicep.
En este artículo, se muestra cómo configurar el escalado automático para un conjunto de escalado de máquinas virtuales con PowerShell. Las configuraciones usan los pasos siguientes:
- Cree un conjunto de escalado de máquinas virtuales que pueda escalar automáticamente.
- Cree reglas para reducir y ampliar la escala.
- Cree un perfil que use sus reglas.
- Aplique la configuración de escalado automático.
- Actualice la configuración de autoescalado con notificaciones.
Prerrequisitos
Para configurar el escalado automático mediante PowerShell, necesita una cuenta de Azure con una suscripción activa. También puede crear una cuenta de forma gratuita.
Configurar el entorno
Usa PowerShell en Azure Cloud Shell.
Note
Ejecute los ejemplos en la misma sesión de PowerShell con la suscripción deseada seleccionada.
# 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"
Creación de un conjunto de escalado de máquinas virtuales
En el ejemplo siguiente de Azure PowerShell se usan los cmdlets New-AzResourceGroup y New-AzVmss.
Note
Utilice un grupo de recursos dedicado para este ejemplo, de modo que pueda eliminar sus recursos cuando haya terminado.
En el ejemplo se crea una dirección IP pública. Para el acceso de administración, use Azure Bastion en lugar de exponer puertos 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
Crear configuración de escalabilidad automática
Para crear una configuración de escalado automático mediante PowerShell, siga la secuencia siguiente:
- Cree reglas mediante
New-AzAutoscaleScaleRuleObject. - Cree un perfil mediante
New-AzAutoscaleProfileObject. - Cree la configuración de escalado automático mediante
New-AzAutoscaleSetting. - Actualice la configuración mediante
Update-AzAutoscaleSetting.
Creación de reglas
Crea reglas de reducción y ampliación de escala y, a continuación, asígnalas a un perfil.
En el ejemplo de Azure PowerShell siguiente se usa el New-AzAutoscaleScaleRuleObject cmdlet .
Note
Crea dos reglas:
- Escalar cuando el porcentaje de CPU supera el 70 %.
- Reduce la escala cuando el porcentaje de uso de la CPU sea inferior 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
En la tabla siguiente, se describen los parámetros usados en el cmdlet New-AzAutoscaleScaleRuleObject.
| Parámetro | Descripción |
|---|---|
MetricTriggerMetricName |
Establece la métrica del desencadenador de escalado automático |
MetricTriggerMetricResourceUri |
Especifica el recurso al que pertenece la métrica MetricTriggerMetricName.
MetricTriggerMetricResourceUri puede ser cualquier recurso y no solo el recurso que se está escalando. Por ejemplo, puede escalar Virtual Machine Scale Sets en función de las métricas creadas por un equilibrador de carga, una base de datos o el propio conjunto de escalado. El MetricTriggerMetricName debe existir para el MetricTriggerMetricResourceUri especificado. |
MetricTriggerTimeGrain |
Frecuencia de muestreo de la métrica que supervisa la regla.
MetricTriggerTimeGrain debe ser uno de los valores predefinidos para la métrica especificada y deberá estar entre 12 horas y 1 minuto. Por ejemplo, MetricTriggerTimeGrain = PT1M"* significa que las métricas se muestrean cada 1 minuto y que se agregan mediante el método de agregación especificado en MetricTriggerStatistic. |
MetricTriggerTimeAggregation |
El método de agregación del período timeGrain. Por ejemplo, statistic = "Average" y timeGrain = "PT1M" significa que las métricas se agregan cada minuto tomando la media. |
MetricTriggerStatistic |
Método de agregación que se usa para agregar métricas muestreadas. Por ejemplo, TimeAggregation = "Average" agregará las métricas muestreadas teniendo en cuenta la media. |
MetricTriggerTimeWindow |
Cantidad de tiempo que el motor de escalado automático vuelve a considerar para agregar la métrica. Este valor debe ser mayor que el retraso en la colección de métricas, que varía por recurso. Debe estar comprendido entre 5 minutos y 12 horas. Por ejemplo, 10 minutos significa que, cada vez que se ejecute la escalabilidad automática, se consultarán las métricas de los últimos 10 minutos. Esta característica permite que las métricas se estabilicen e impide que reaccionen a picos transitorios. |
MetricTriggerThreshold |
Define el valor de la métrica que desencadena un evento de escala. |
MetricTriggerOperator |
Especifica el funcionamiento comparativo lógico que se vaya a usar al evaluar el valor de la métrica. |
MetricTriggerDividePerInstance |
Cuando se establece para true dividirá la métrica del desencadenador por el número total de instancias. Por ejemplo, si el recuento de mensajes fuera 300 y hubiera cinco instancias en ejecución, el valor de la métrica calculada será de 60 mensajes por instancia. Esta propiedad no es aplicable a todas las métricas. |
ScaleActionDirection |
Especifique el escalado hacia adentro o hacia afuera. Los valores válidos son Increase y Decrease. |
ScaleActionType |
Escale por un número específico de instancias, escale a un recuento de instancias específico o escale por porcentaje del recuento de instancias actual. Los valores válidos son ChangeCount, ExactCount y PercentChangeCount. |
ScaleActionCooldown |
El tiempo mínimo que debe transcurrir tras una operación de escalado para que esta regla pueda iniciar otra acción de escalado. El escalado automático comprueba el tiempo de espera de cada regla de forma independiente. El periodo de enfriamiento permite que las métricas se estabilicen y evita el flapping. |
Creación de un perfil de escalado automático predeterminado y asociación de las reglas
Después de definir las reglas de escalado, cree un perfil. El perfil especificará los límites predeterminados, superiores e inferiores de recuento de instancias, y las horas en que se podrán aplicar las reglas asociadas.
En el ejemplo de Azure PowerShell siguiente se usa el New-AzAutoscaleProfileObject cmdlet .
Note
Como este perfil es un perfil predeterminado, no tiene ningún parámetro de programación. El perfil predeterminado está activo cuando ningún otro perfil esté activo.
# Define parameters for New-AzAutoscaleProfileObject
$newAzAutoscaleProfileObjectParams = @{
Name = "default"
CapacityDefault = "1"
CapacityMaximum = "10"
CapacityMinimum = "1"
Rule = @($scaleOutRule, $scaleInRule)
}
$defaultProfile = New-AzAutoscaleProfileObject @newAzAutoscaleProfileObjectParams
En la tabla siguiente, se describen los parámetros usados en el cmdlet New-AzAutoscaleProfileObject.
| Parámetro | Descripción |
|---|---|
CapacityDefault |
El número de instancias que serán si las métricas no estuvieran disponibles para la evaluación. El valor predeterminado solo se utiliza si el número de instancias actual es menor que el predeterminado. |
CapacityMaximum |
Número máximo de instancias para el recurso. El número máximo de instancias está limitado por el número de núcleos disponibles en la suscripción. |
CapacityMinimum |
Número mínimo de instancias del recurso. |
FixedDateEnd |
Hora de finalización del perfil en formato ISO 8601. |
FixedDateStart |
Hora de inicio del perfil en formato ISO 8601. |
Rule |
Una colección de reglas que proporcionan los desencadenadores y los parámetros de la acción de escalado cuando el perfil esté activo. Se pueden especificar un máximo de 10 reglas separadas por comas. |
RecurrenceFrequency |
Con qué frecuencia surte efecto el perfil programado. Este valor puede ser week. |
ScheduleDay |
Colección de días en los que el perfil surte efecto al especificar una programación periódica. Los valores posibles son de domingo a sábado. Para obtener más información sobre las programaciones periódicas, consulte Perfiles recurrentes con PowerShell. |
ScheduleHour |
Una colección de horas en las que se aplica el perfil. Los valores admitidos son de 0 a 23. |
ScheduleMinute |
Una colección de momentos exactos en que el perfil entra en vigor. |
ScheduleTimeZone |
Zona horaria de las horas del perfil. |
Aplicación de la configuración de escalado automático
Después de definir las reglas y el perfil, aplique la configuración de escalado automático. Para actualizar una configuración de escalado automático existente, use Update-AzAutoscaleSetting.
En el ejemplo de Azure PowerShell siguiente se usa el 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
Adición de notificaciones a la configuración de escalado automático
Agregue notificaciones a la configuración de escalado automático para desencadenar un webhook o enviar notificaciones por correo electrónico cuando se produce un evento de escalado.
En el ejemplo de Azure PowerShell siguiente se usa el New-AzAutoscaleWebhookNotificationObject cmdlet .
# Set variables
$webhookUri = "<WebhookUri>"
# Create the webhook notification
$webhook = New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri $webhookUri
En el ejemplo siguiente Azure PowerShell se usa el New-AzAutoscaleNotificationObject cmdlet para configurar el webhook y las notificaciones por correo electrónico.
Note
Utiliza un punto de conexión HTTPS para el webhook.
# Set variables
$notificationEmail = "<NotificationEmail>"
# Define parameters for New-AzAutoscaleNotificationObject
$newAzAutoscaleNotificationObjectParams = @{
EmailCustomEmail = @($notificationEmail)
EmailSendToSubscriptionAdministrator = $true
EmailSendToSubscriptionCoAdministrator = $true
Webhook = @($webhook)
}
$notification = New-AzAutoscaleNotificationObject @newAzAutoscaleNotificationObjectParams
En el ejemplo de Azure PowerShell siguiente se usa el Update-AzAutoscaleSetting cmdlet para aplicar la notificación.
# Define parameters for Update-AzAutoscaleSetting
$updateAzAutoscaleSettingParams = @{
Name = $autoscaleName
ResourceGroupName = $resourceGroupName
Notification = @($notification)
}
# Update the autoscale notification
Update-AzAutoscaleSetting @updateAzAutoscaleSettingParams
Revise la configuración de la escalabilidad automática
En el siguiente Azure PowerShell ejemplo se usa el Get-AzAutoscaleSetting cmdlet para recuperar la configuración de escalado automático.
# Define parameters for Get-AzAutoscaleSetting
$getAzAutoscaleSettingParams = @{
ResourceGroupName = $resourceGroupName
Name = $autoscaleName
}
$autoscaleSetting = Get-AzAutoscaleSetting @getAzAutoscaleSettingParams
$autoscaleSetting | Select-Object -Property *
En el ejemplo de Azure PowerShell siguiente se usa el Get-AzAutoscaleHistory cmdlet .
Note
Consulta el historial de la configuración de escalado automático, no el identificador de recurso del conjunto de escalado.
# 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
Perfiles programados y recurrentes
Note
Al actualizar Profile, incluya todos los perfiles que quiera conservar. En los ejemplos siguientes se agregan perfiles a la configuración creada anteriormente en este artículo. Conserve los demás perfiles al adaptarlos a otra configuración de escalado automático.
Agregar un perfil programado para un evento especial
Configure perfiles de escalado automático para escalar de forma diferente para eventos específicos. Por ejemplo, durante un día, cuando la demanda sea mayor de lo habitual, cree un perfil con un aumento máximo y mínimo de los límites de instancia.
En el ejemplo siguiente de Azure PowerShell se usan los cmdlets New-AzAutoscaleProfileObject y Update-AzAutoscaleSetting.
Note
En el ejemplo siguiente se usan las mismas reglas que el perfil predeterminado definido anteriormente, pero se establecen nuevos límites de instancia para una fecha específica. También puede configurar reglas diferentes para usarlas con el nuevo perfil. Los valores de inicio y finalización usan marcas de tiempo ISO 8601 en 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
Agregar un perfil programado recurrente
Los perfiles periódicos permiten programar perfiles de escalado que se repetirán cada semana.
Mientras que los perfiles programados tienen fecha de inicio y de finalización, los perfiles periódicos no tienen hora de finalización. Un perfil permanecerá activo hasta la hora de inicio del perfil siguiente. Por lo tanto, al crear perfiles periódicos, deberá crear un perfil predeterminado periódico que se inicie cuando desee que finalice el perfil periódico anterior.
En el ejemplo siguiente de Azure PowerShell se usan los cmdlets New-AzAutoscaleProfileObject y Update-AzAutoscaleSetting.
Note
Por ejemplo, escale a una sola instancia los fines de semana de viernes por la noche a lunes por la mañana. Para configurar un perfil de fin de semana que comienza el viernes por la noche y termina el lunes por la mañana, cree un perfil que comience el viernes por la noche y, a continuación, cree un perfil periódico con su configuración predeterminada que comienza el lunes por la mañana.
Crea un perfil de fin de semana y un perfil predeterminado periódico para finalizar el perfil de fin de semana, a la vez que conserva los perfiles predeterminados y de fecha fija de los pasos anteriores.
# 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
Para obtener más información sobre los perfiles programados, consulte Escalabilidad automática con varios perfiles.
Otros comandos de escalabilidad automática
Para obtener una lista completa de los cmdlets de PowerShell para el escalado automático, consulte el Explorador de módulos de PowerShell.
Limpieza de recursos
Para limpiar los recursos que creó en este tutorial, elimine el grupo de recursos dedicado que creó. El siguiente cmdlet elimina el grupo de recursos y todos sus recursos.
En el ejemplo de Azure PowerShell siguiente se usa el Remove-AzResourceGroup cmdlet .
# Delete the example resource group
Remove-AzResourceGroup -Name $resourceGroupName