Partilhar via


Implantar Máquinas Virtuais do Azure Spot usando o Azure PowerShell

Aplica-se a: ✔️ Linux VMs ✔️ Windows VMs ✔️ Conjuntos de escala flexível

A utilização das Máquinas Virtuais Spot do Azure permite-lhe tirar partido da nossa capacidade não utilizada com uma poupança de custos significativa. A qualquer momento em que o Azure precisar da capacidade de volta, a infraestrutura do Azure removerá as Máquinas Virtuais do Azure Spot. Portanto, as Máquinas Virtuais Spot do Azure são ótimas para cargas de trabalho que podem lidar com interrupções, como trabalhos de processamento em lote, ambientes de desenvolvimento/teste, grandes cargas de trabalho de computação e muito mais.

O preço das Máquinas Virtuais Spot do Azure é variável, com base na região e na SKU. Para obter mais informações, consulte Preços de VM para Linux e Windows. Para obter mais informações sobre como definir o preço máximo, consulte Azure Spot Virtual Machines - Pricing.

Você tem a opção de definir um preço máximo que está disposto a pagar, por hora, pela VM. O preço máximo de uma Máquina Virtual Spot do Azure pode ser definido em dólares americanos (USD), usando até 5 casas decimais. Por exemplo, o valor 0.98765seria um preço máximo de $0,98765 USD por hora. Se você definir o preço máximo como , -1a VM não será removida com base no preço. O preço para a VM será o preço atual para spot ou o preço para uma VM padrão, que é sempre menor, desde que haja capacidade e cota disponíveis.

Criar a VM

Crie uma spotVM usando New-AzVmConfig para criar a configuração. Inclua -Priority Spot e defina -MaxPrice para:

  • -1 para que a VM não seja despejada com base no preço.
  • um valor em dólar, até 5 dígitos. Por exemplo, -MaxPrice .98765 significa que a VM será desalocada quando o preço de uma VM spot for de cerca de $.98765 por hora.

Este exemplo cria uma spotVM que não será desalocada com base no preço (somente quando o Azure precisar da capacidade de volta). A política de remoção é definida para desalocar a VM, para que ela possa ser reiniciada posteriormente. Se desejar excluir a VM e o disco subjacente quando a VM for removida, defina -EvictionPolicy como Delete em New-AzVMConfig.

$resourceGroup = "mySpotRG"
$location = "eastus"
$vmName = "mySpotVM"
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
New-AzResourceGroup -Name $resourceGroup -Location $location
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
   -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup `
   -Location $location -Name MYvNET -AddressPrefix 192.168.0.0/16 `
   -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration and set this to be an Azure Spot Virtual Machine

$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1 -Priority "Spot" -MaxPrice -1 -EvictionPolicy Deallocate | `
Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzVMNetworkInterface -Id $nic.Id

New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

Depois que a VM for criada, você poderá consultar para ver o preço máximo de todas as VMs no grupo de recursos.

Get-AzVM -ResourceGroupName $resourceGroup | `
   Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}

Simular uma expulsão

Você pode simular uma remoção de uma Máquina Virtual do Azure Spot usando REST, PowerShell ou CLI para testar o quão bem seu aplicativo responderá a uma remoção repentina.

Na maioria dos casos, você desejará usar a API REST Virtual Machines - Simulate Eviction para ajudar com testes automatizados de aplicativos. Para o REST, o Response Code: 204 despejo simulado foi bem-sucedido. Você pode combinar remoções simuladas com o serviço Evento Agendado, para automatizar como seu aplicativo responderá quando a VM for removida.

Para ver os eventos agendados em ação, assista Azure Friday - Usando os Eventos Agendados do Azure para se preparar para a manutenção da VM.

Teste rápido

Para um teste rápido para mostrar como uma remoção simulada funcionará, vamos percorrer consultando o serviço de evento agendado para ver como ele se parece quando você simula uma remoção usando o PowerShell.

O serviço Evento Agendado é ativado para o seu serviço na primeira vez que você faz uma solicitação de eventos.

Remoto em sua VM e, em seguida, abra um prompt de comando.

No prompt de comando da VM, digite:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

Esta primeira resposta pode demorar até 2 minutos. A partir de agora, eles devem exibir a saída quase imediatamente.

A partir de um computador que tenha o módulo Az PowerShell instalado (como sua máquina local), simule uma remoção usando Set-AzVM. Substitua o nome do grupo de recursos e o nome da VM pelo seu.

Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction

A saída de resposta terá Status: Succeeded se a solicitação foi feita com sucesso.

Volte rapidamente à sua ligação remota à sua Máquina Virtual Spot e consulte novamente o ponto de extremidade de Eventos Agendados. Repita o seguinte comando até obter uma saída que contenha mais informações:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

Quando o Serviço de Eventos Agendados receber a notificação de remoção, você receberá uma resposta semelhante a esta:

{"DocumentIncarnation":1,"Events":[{"EventId":"A123BC45-1234-5678-AB90-ABCDEF123456","EventStatus":"Scheduled","EventType":"Preempt","ResourceType":"VirtualMachine","Resources":["myspotvm"],"NotBefore":"Tue, 16 Mar 2021 00:58:46 GMT","Description":"","EventSource":"Platform"}]}

Você pode ver que "EventType":"Preempt", e o recurso é o recurso "Resources":["myspotvm"]VM .

Você também pode ver quando a VM será removida verificando o "NotBefore" valor. A VM não será removida antes do tempo dado no NotBefore, então essa é a sua janela para o aplicativo fechar normalmente.

Próximos passos

Você também pode criar uma Máquina Virtual do Azure Spot usando a CLI do Azure, o portal ou um modelo.

Consulte informações de preços atuais usando a API de preços de varejo do Azure para obter informações sobre os preços da Máquina Virtual Ponto do Azure. O meterName e skuName ambos conterão Spot.

Se encontrar um erro, consulte Códigos de erro.