Implementar o Azure Spot Máquinas Virtuais com Azure PowerShell
Aplica-se a: ✔️ VMs do Windows VMs ✔️ do Linux Conjuntos ✔️ de dimensionamento flexíveis
A utilização do Azure Spot Máquinas Virtuais permite-lhe tirar partido da nossa capacidade não utilizada com uma redução significativa dos custos. Em qualquer altura em que o Azure precise da capacidade de volta, a infraestrutura do Azure irá expulsar o Azure Spot Máquinas Virtuais. Por conseguinte, o Azure Spot Máquinas Virtuais são ótimos para cargas de trabalho que conseguem lidar com interrupções como trabalhos de processamento em lotes, ambientes de desenvolvimento/teste, grandes cargas de trabalho de computação e muito mais.
Os preços do Azure Spot Máquinas Virtuais são variáveis, com base na região e no SKU. Para obter mais informações, veja Preços da VM para Linux e Windows. Para obter mais informações sobre como definir o preço máximo, veja Azure Spot Máquinas Virtuais – Preços.
Tem a opção de definir um preço máximo que está disposto a pagar, por hora, para a VM. O preço máximo de uma Máquina Virtual Spot do Azure pode ser definido em usuários (USD), utilizando até 5 casas decimais. Por exemplo, o valor 0.98765
seria um preço máximo de 0,98765 USD por hora. Se definir o preço máximo como -1
, a VM não será expulsa com base no preço. O preço da VM será o preço atual para spot ou o preço de uma VM padrão, que é sempre menor, desde que exista capacidade e quota disponível.
Criar a VM
Crie uma spotVM com New-AzVmConfig para criar a configuração. Inclua -Priority Spot
e defina -MaxPrice
como:
-1
para que a VM não seja expulsa com base no preço.- uma quantia em dólares, até 5 dígitos. Por exemplo,
-MaxPrice .98765
significa que a VM será desalocada assim que o preço de uma spotVM for de cerca de $.98765 por hora.
Este exemplo cria uma spotVM que não será desalocada com base nos preços (apenas quando o Azure precisar da capacidade de volta). A política de expulsão está definida para desalocar a VM, para que possa ser reiniciada mais tarde. Se quiser eliminar a VM e o disco subjacente quando a VM for expulsa, 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
Após a criação da VM, pode 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
Pode simular a expulsão de uma Máquina Virtual spot do Azure com REST, PowerShell ou CLI para testar o quão bem a sua aplicação irá responder a uma expulsão súbita.
Na maioria dos casos, vai querer utilizar a API REST Máquinas Virtuais – Simular Expulsão para ajudar nos testes automatizados de aplicações. Para REST, significa Response Code: 204
que a expulsão simulada foi efetuada com êxito. Pode combinar expulsões simuladas com o serviço Evento Agendado para automatizar a forma como a sua aplicação irá responder quando a VM é expulsa.
Para ver eventos agendados em ação, veja Sexta-feira do Azure – Utilizar 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 expulsão simulada irá funcionar, vamos analisar a consulta do serviço de eventos agendado para ver o aspeto quando simula uma expulsão com o PowerShell.
O serviço Evento Agendado está ativado para o seu serviço da primeira vez que fizer um pedido de eventos.
Aceda remotamente à VM e, em seguida, abra uma linha de comandos.
Na linha de comandos da VM, escreva:
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, devem apresentar a saída quase imediatamente.
A partir de um computador com o módulo do Az PowerShell instalado (como o computador local), simule uma expulsão com Set-AzVM. Substitua o nome do grupo de recursos e o nome da VM pelo seu próprio nome.
Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction
O resultado da resposta terá Status: Succeeded
se o pedido tiver sido efetuado com êxito.
Volte rapidamente à sua ligação remota à Máquina Virtual Spot e consulte novamente o ponto final 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 Agendado receber a notificação de expulsão, receberá uma resposta semelhante à seguinte:
{"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"}]}
Pode ver que "EventType":"Preempt"
, e o recurso é o recurso "Resources":["myspotvm"]
da VM .
Também pode ver quando a VM será expulsa ao verificar o "NotBefore"
valor. A VM não será expulsa antes da hora indicada no NotBefore
, pelo que é a janela para a sua aplicação fechar corretamente.
Passos seguintes
Também pode criar uma Máquina Virtual Spot do Azure com a CLI do Azure, o portal ou um modelo.
Consulte as informações de preços atuais com a API de preços de retalho do Azure para obter informações sobre os preços da Máquina Virtual Spot do Azure. Os meterName
e skuName
irão conter Spot
.
Se encontrar um erro, consulte Códigos de erro.