Configurar o dimensionamento automático com o PowerShell
O dimensionamento automático garante 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áquina Virtual com o PowerShell. As configurações usam as seguintes etapas:
- Crie um conjunto de dimensionamento que você pode dimensionar automaticamente
- Criar regras para dimensionar e expandir
- Crie um perfil que use suas regras
- Aplicar as configurações de dimensionamento automático
- Atualize as 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 o ambiente
#Set the subscription Id, VMSS name, and resource group name
$subscriptionId = (Get-AzContext).Subscription.Id
$resourceGroupName="rg-powershell-autoscale"
$vmssName="vmss-001"
Criar um Conjunto de Dimensionamento de Máquinas Virtuais
Crie um conjunto de escalas usando os cmdlets a seguir. Defina as $resourceGroupName
variáveis e $vmssName
para se adequar ao 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"
Criar configurações de dimensionamento automático
Para criar a configuração de dimensionamento automático usando o PowerShell, siga a sequência abaixo:
- Criar 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 dimensionamento e dimensionamento e, em seguida, associe-as a um perfil.
As regras são criadas usando o New-AzAutoscaleScaleRuleObject
.
O script PowerShell a seguir cria duas regras.
- Dimensionamento quando a porcentagem de CPU exceder 70%
- Dimensionar quando a percentagem de CPU for inferior a 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 abaixo descreve os New-AzAutoscaleScaleRuleObject
parâmetros usados no cmdlet.
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 as vezes em que as regras associadas podem ser aplicadas. Use o New-AzAutoscaleProfileObject
cmdlet para criar um novo perfil de dimensionamento automático. Como este é um perfil padrão, ele não tem nenhum parâmetro de agenda. O perfil padrão está ativo às vezes que nenhum outro perfil está ativo
$defaultProfile=New-AzAutoscaleProfileObject `
-Name "default" `
-CapacityDefault 1 `
-CapacityMaximum 10 `
-CapacityMinimum 1 `
-Rule $rule1, $rule2
A tabela abaixo descreve os New-AzAutoscaleProfileObject
parâmetros usados no cmdlet.
Parâmetro | Description |
---|---|
CapacityDefault |
O número de instâncias que estão se as métricas não estiverem disponíveis para avaliação. O padrão só será usado se a contagem de instâncias atual for menor que o padrão. |
CapacityMaximum |
O número máximo de instâncias para o recurso. O número máximo de instâncias é ainda limitado pelo número de núcleos 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. |
FixedDateStart |
A hora de início 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. É possível especificar um máximo de 10 regras separadas por vírgula. |
RecurrenceFrequency |
Com que frequência o perfil agendado entra em vigor. Este valor deve ser week . |
ScheduleDay |
Uma coleção de dias em que o perfil entra em vigor ao especificar uma agenda recorrente. Os valores possíveis são de domingo a sábado. Para obter mais informações sobre agendas recorrentes, consulte Adicionar um perfil recorrente usando a CLI |
ScheduleHour |
Uma coleção de horas em que o perfil entra em vigor. Os valores suportados são de 0 a 23. |
ScheduleMinute |
Uma coleção de minutos em que o perfil entra em vigor. |
ScheduleTimeZone |
O fuso horário para as horas do perfil. |
Aplicar as configurações de dimensionamento automático
Depois de multar as regras e o perfil, aplique as configurações de dimensionamento automático usando New-AzAutoscaleSetting
. Para atualizar a configuração de dimensionamento automático existente, use 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 suas configurações de dimensionamento automático
Adicione notificações à sua configuração de venda para acionar um webhook ou enviar notificações por e-mail 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 e-mail usando o New-AzAutoscaleNotificationObject
cmdlet:
$notification1=New-AzAutoscaleNotificationObject `
-EmailCustomEmail "jason@contoso.com" `
-EmailSendToSubscriptionAdministrator $true `
-EmailSendToSubscriptionCoAdministrator $true `
-Webhook $webhook1
Atualize as 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"
Rever as definições de dimensionamento automático
Para revisar suas configurações de dimensionamento automático, carregue as configurações em uma variável usando Get-AzAutoscaleSetting
a saída da variável da seguinte maneira:
$autoscaleSetting=Get-AzAutoscaleSetting -ResourceGroupName $resourceGroupName -Name vmss-autoscalesetting1
$autoscaleSetting | Select-Object -Property *
Obtenha seu histórico de dimensionamento automático usando AzAutoscaleHistory
Get-AzAutoscaleHistory -ResourceId /subscriptions/<subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/virtualMachineScaleSets/$vmssName
Perfis agendados e recorrentes
Adicionar 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 agendado recorrente
Os 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-feira à noite até segunda-feira de manhã.
Embora os perfis agendados tenham uma data de início e de fim, 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 noite de sexta-feira e, em seguida, crie um perfil recorrente com as configurações padrão que começa na manhã de segunda-feira.
O script a seguir cria um perfil de fim de semana e um perfil padrão de adição 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 obter mais informações sobre perfis agendados, consulte Dimensionamento automático com vários perfis
Outros comandos de dimensionamento automático
Para obter uma lista completa dos cmdlets do PowerShell para dimensionamento automático, consulte o Navegador do módulo PowerShell
Clean up resources (Limpar recursos)
Para limpar os recursos criados neste tutorial, exclua o grupo de recursos criado. O cmdlet a seguir exclui o grupo de recursos e todos os seus recursos.
Remove-AzResourceGroup -Name $resourceGroupName