Configurar o dimensionamento automático com o PowerShell
O dimensionamento automático ajuda a garantir que você tenha a quantidade certa de recursos em execução para lidar com a carga flutuante do seu aplicativo. Você pode configurar o dimensionamento automático usando o portal do Azure, a CLI do Azure, o PowerShell ou os modelos ARM ou Bicep.
Este artigo mostra como configurar o dimensionamento automático para um Conjunto de Dimensionamento de Máquinas Virtuais com o PowerShell. As configurações usam as seguintes etapas:
- Criar um conjunto de dimensionamento que você pode dimensionar automaticamente
- Criar regras para escalar e reduzir horizontalmente
- Criar um perfil que usa suas regras
- Aplicar as configurações de dimensionamento automático
- Atualizar suas configurações de dimensionamento automático com notificações
Pré-requisitos
Para configurar o dimensionamento automático usando o PowerShell, você precisa de uma conta do Azure com uma assinatura ativa. Você pode criar uma conta gratuitamente.
Configurar seu ambiente
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Crie um conjunto de dimensionamento de máquinas virtuais
Crie um conjunto de dimensionamento usando os cmdlets a seguir. Defina as variáveis $resourceGroupName
e $vmssName
para o conjunto de seu 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"
Crie configurações de dimensionamento automático
Para criar a configuração de dimensionamento automático usando o PowerShell, siga a sequência abaixo:
- Crie regras usando
New-AzAutoscaleScaleRuleObject
- Crie um perfil usando
New-AzAutoscaleProfileObject
- Crie as configurações de dimensionamento automático usando
New-AzAutoscaleSetting
- Atualize as configurações usando
Update-AzAutoscaleSetting
Criar regras
Crie regras de escala e expansão e as associe a um perfil.
As regras são criadas usando o New-AzAutoscaleScaleRuleObject
.
O script do PowerShell a seguir cria duas regras.
- Escalar horizontalmente quando a porcentagem de CPU exceder 70%
- Dimensionar quando a CPU percentual for menor que 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))
A tabela a seguir descreve os parâmetros usados no cmdlet New-AzAutoscaleScaleRuleObject
.
Parâmetro | Descrição |
---|---|
MetricTriggerMetricName |
Define a métrica de gatilho de dimensionamento automático |
MetricTriggerMetricResourceUri |
Especifica o recurso ao qual a métrica MetricTriggerMetricName pertence. MetricTriggerMetricResourceUri pode ser qualquer recurso e não apenas o recurso que está sendo dimensionado. Por exemplo, você pode dimensionar seu Conjuntos de Dimensionamento de Máquinas Virtuais com base nas métricas criadas por um balanceador de carga, um banco de dados ou o próprio conjunto de dimensionamento. O MetricTriggerMetricName deve existir para o MetricTriggerMetricResourceUri especificado. |
MetricTriggerTimeGrain |
A frequência de amostragem da métrica que a regra monitora. MetricTriggerTimeGrain deve ser um dos valores predefinidos para a métrica especificada e deve estar entre 12 horas e 1 minuto. Por exemplo, MetricTriggerTimeGrain = PT1M"* significa que as métricas são amostradas a cada 1 minuto e agregadas usando o método de agregação especificado em MetricTriggerStatistic . |
MetricTriggerTimeAggregation |
O método de agregação dentro do período de timeGrain. Por exemplo, statistic = “Average” e timeGrain = “PT1M” significa que as métricas são agregadas a cada 1 minuto, considerando a média. |
MetricTriggerStatistic |
O método de agregação usado para agregar as métricas amostradas. Por exemplo, TimeAggregation = “Average” agrega as métricas amostradas obtendo a média. |
MetricTriggerTimeWindow |
A quantidade de tempo que o mecanismo de dimensionamento automático procura para agregar a métrica. Esse valor deve ser maior que o atraso na coleção de métricas, que varia de recurso para recurso. Deve estar entre 5 minutos e 12 horas. Por exemplo, dez minutos significa que sempre que o dimensionamento automático for executado, ele consulta as métricas dos últimos dez minutos. Esse recurso permite que as métricas sejam estabilizadas e evita uma reação a picos transitórios. |
MetricTriggerThreshold |
Define o valor da métrica que dispara um evento de escala. |
MetricTriggerOperator |
Especifica a operação comparativa lógica a ser usada ao avaliar o valor da métrica. |
MetricTriggerDividePerInstance |
Quando definido como true divide a métrica de gatilho pelo número total de instâncias. Por exemplo, se a contagem de mensagens for 300 e houver 5 instâncias em execução, o valor da métrica calculada será 60 mensagens por instância. Essa propriedade não é aplicável a todas as métricas. |
ScaleActionDirection |
Especifique o dimensionamento dentro ou fora. Os valores válidos são Increase e Decrease . |
ScaleActionType |
Dimensione por um número específico de instâncias, dimensione para uma contagem de instâncias específica ou dimensione por percentual da contagem de instâncias atual. Os valores válidos incluem ChangeCount , ExactCount e PercentChangeCount . |
ScaleActionCooldown |
A quantidade mínima de tempo para aguardar entre operações de escala. Isso é para permitir que as métricas se estabilizem e evite oscilações. Por exemplo, se ScaleActionCooldown for 10 minutos e uma operação de escala tiver ocorrido, o dimensionamento automático não tentará dimensionar novamente por 10 minutos. |
Criar um perfil de dimensionamento automático padrão e associar as regras
Depois de definir as regras de escala, crie um perfil. O perfil especifica os limites de contagem de instâncias padrão, superior e inferior e os horários em que as regras associadas podem ser aplicadas. Use o cmdlet New-AzAutoscaleProfileObject
para criar um novo perfil de dimensionamento automático. Como esse é um perfil padrão, ele não tem parâmetros de agendamento. O perfil padrão está ativo em momentos em que nenhum outro perfil está ativo
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
A tabela a seguir descreve os parâmetros usados no cmdlet New-AzAutoscaleProfileObject
.
Parâmetro | Descrição |
---|---|
CapacityDefault |
O número de instâncias se as métricas não estiverem disponíveis para avaliação. O padrão é usado apenas se a contagem atual da instância for inferior ao padrão. |
CapacityMaximum |
O número máximo de instâncias para o recurso. O número máximo de instâncias é limitado pelos núcleos que estão disponíveis na assinatura. |
CapacityMinimum |
O número mínimo de instâncias para o recurso. |
FixedDateEnd |
A hora de término do perfil no formato ISO 8601 para. |
FixedDateStart |
A hora de término do perfil no formato ISO 8601. |
Rule |
Uma coleção de regras que fornecem os gatilhos e parâmetros para a ação de dimensionamento quando esse perfil está ativo. No máximo 10 regras podem especificadas. |
RecurrenceFrequency |
Com que frequência o perfil agendado entra em vigor. Esse valor precisa ser week . |
ScheduleDay |
Uma coleção de dias em que o perfil entra em vigor ao especificar um agendamento recorrente. Os valores possíveis são Domingo a Sábado. Para mais informações sobre agendamentos recorrentes, confira Adicionar perfis recorrentes usando a CLI |
ScheduleHour |
Uma coleção de horas em que o perfil entra em vigor. Os valores com suporte são de 0 a 23. |
ScheduleMinute |
Uma coleção de minutos na qual o perfil entra em vigor. |
ScheduleTimeZone |
O fuso horário das horas do perfil. |
Aplicar as configurações de dimensionamento automático
Depois de definir as regras e o perfil, aplique as configurações de dimensionamento automático usando New-AzAutoscaleSetting
. Para atualizar o uso da configuração de dimensionamento automático existente 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"
Adicionar notificações às configurações de dimensionamento automático
Adicione notificações à configuração de venda para disparar um webhook ou enviar notificações por email quando ocorrer um evento de escala.
Para obter mais informações sobre notificações de webhook, consulte New-AzAutoscaleWebhookNotificationObject
Defina um webhook usando o cmdlet a seguir;
$webhook1=New-AzAutoscaleWebhookNotificationObject -Property @{} -ServiceUri "http://contoso.com/webhook1"
Configure a notificação usando o webhook e configure a notificação por email usando o cmdlet New-AzAutoscaleNotificationObject
:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Atualize suas configurações de dimensionamento automático para aplicar a notificação
Update-AzAutoscaleSetting `
-Name vmss-autoscalesetting1 `
-ResourceGroupName $resourceGroupName `
-Profile $defaultProfile `
-Notification $notification1 `
-TargetResourceUri "/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName"
Examine suas configurações de dimensionamento automático
Para examinar as configurações de dimensionamento automático, carregue as configurações em uma variável usando Get-AzAutoscaleSetting
e, em seguida, gere a variável da seguinte maneira:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Obtenha o histórico de dimensionamento automático usando AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Perfis agendados e recorrentes
Adicione um perfil agendado para um evento especial
Configure perfis de dimensionamento automático para dimensionar de forma diferente para eventos específicos. Por exemplo, para um dia em que a demanda será maior do que o normal, crie um perfil com limites máximos e mínimos de instância aumentados.
O exemplo a seguir usa as mesmas regras que o perfil padrão definido acima, mas define novos limites de instância para uma data específica. Você também pode configurar regras diferentes para serem usadas com o novo perfil.
$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"
Adicionar um perfil de agendamento recorrente
Perfis recorrentes permitem agendar um perfil de dimensionamento que se repete a cada semana. Por exemplo, dimensione para uma única instância no fim de semana, de sexta à noite até segunda de manhã.
Embora os perfis agendados tenham uma data de início e de término, os perfis recorrentes não têm uma hora de término. Um perfil permanece ativo até a hora de início do próximo perfil. Portanto, ao criar um perfil recorrente, você deve criar um perfil padrão recorrente que começa quando você deseja que o perfil recorrente anterior seja concluído.
Por exemplo, para configurar um perfil de fim de semana que começa nas noites de sexta-feira e termina nas manhãs de segunda-feira, crie um perfil que comece na sexta à noite e crie um perfil recorrente com suas configurações padrão que começa na segunda-feira de manhã.
O script a seguir cria um perfil de fim de semana e um perfil padrão adicional para encerrar o perfil de fim de semana.
$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"
Para mais informações sobre perfis de agendamento, confira, Dimensionamento automático com vários perfis
Outros comandos de dimensionamento automático
Para obter uma lista completa de cmdlets do PowerShell para dimensionamento automático, consulte o Navegador do Módulo do PowerShell
Limpar os recursos
Para limpar os recursos criados neste tutorial, exclua o grupo de recursos que você criou. O cmdlet a seguir exclui o grupo de recursos e todos os seus recursos.
Remove-AzResourceGroup -Name $resourceGroupName