Implementar o Azure Spot Máquinas Virtuais com um modelo de Resource Manager
Aplica-se a: ✔️ VMs do Linux
A utilização do Azure Spot Máquinas Virtuais permite-lhe tirar partido da nossa capacidade não utilizada com uma poupança de custos significativa. A qualquer momento, quando o Azure precisar da capacidade de volta, a infraestrutura do Azure expulsa as VMs Spot do Azure. As VMs Spot do Azure são ótimas 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.
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 VM Spot do Azure pode ser definido em usuários (USD), utilizando até cinco 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 expulsão de VMs não se baseia no preço e o preço será o preço atual das VMs Spot do Azure ou o preço de uma VM padrão, o que for menor, desde que exista capacidade e quota disponíveis. Para obter mais informações sobre como definir o preço máximo, veja VMs Spot do Azure – Preços.
Utilizar um modelo
Para implementações de modelos de VM Spot do Azure, utilize"apiVersion": "2019-03-01"
ou posterior. Adicione as priority
propriedades e evictionPolicy
billingProfile
ao no seu modelo:
"priority": "Spot",
"evictionPolicy": "Deallocate",
"billingProfile": {
"maxPrice": -1
}
Eis um modelo de exemplo com propriedades adicionadas para uma VM Spot do Azure. Substitua os nomes dos recursos pelos seus e <password>
por uma palavra-passe para a conta de administrador local na VM.
{
"$schema": "http://schema.management.azure.com/schemas/2019-03-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
},
"variables": {
"vnetId": "/subscriptions/ec9fcd04-e188-48b9-abfc-abcd515f1836/resourceGroups/spotVM/providers/Microsoft.Network/virtualNetworks/spotVM",
"subnetName": "default",
"networkInterfaceName": "spotVMNIC",
"publicIpAddressName": "spotVM-ip",
"publicIpAddressType": "Dynamic",
"publicIpAddressSku": "Basic",
"virtualMachineName": "spotVM",
"osDiskType": "Premium_LRS",
"virtualMachineSize": "Standard_D2s_v3",
"adminUsername": "azureuser",
"adminPassword": "<password>",
"diagnosticsStorageAccountName": "diagstoragespot2019",
"diagnosticsStorageAccountId": "Microsoft.Storage/storageAccounts/diagstoragespot2019",
"diagnosticsStorageAccountType": "Standard_LRS",
"diagnosticsStorageAccountKind": "Storage",
"subnetRef": "[concat(variables('vnetId'), '/subnets/', variables('subnetName'))]"
},
"resources": [
{
"name": "spotVM",
"type": "Microsoft.Network/networkInterfaces",
"apiVersion": "2019-03-01",
"location": "eastus",
"dependsOn": [
"[concat('Microsoft.Network/publicIpAddresses/', variables('publicIpAddressName'))]"
],
"properties": {
"ipConfigurations": [
{
"name": "ipconfig1",
"properties": {
"subnet": {
"id": "[variables('subnetRef')]"
},
"privateIPAllocationMethod": "Dynamic",
"publicIpAddress": {
"id": "[resourceId(resourceGroup().name, 'Microsoft.Network/publicIpAddresses', variables('publicIpAddressName'))]"
}
}
}
]
}
},
{
"name": "[variables('publicIpAddressName')]",
"type": "Microsoft.Network/publicIpAddresses",
"apiVersion": "2019-02-01",
"location": "eastus",
"properties": {
"publicIpAllocationMethod": "[variables('publicIpAddressType')]"
},
"sku": {
"name": "[variables('publicIpAddressSku')]"
}
},
{
"name": "[variables('virtualMachineName')]",
"type": "Microsoft.Compute/virtualMachines",
"apiVersion": "2019-03-01",
"location": "eastus",
"dependsOn": [
"[concat('Microsoft.Network/networkInterfaces/', variables('networkInterfaceName'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('diagnosticsStorageAccountName'))]"
],
"properties": {
"hardwareProfile": {
"vmSize": "[variables('virtualMachineSize')]"
},
"storageProfile": {
"osDisk": {
"createOption": "fromImage",
"managedDisk": {
"storageAccountType": "[variables('osDiskType')]"
}
},
"imageReference": {
"publisher": "Canonical",
"offer": "UbuntuServer",
"sku": "22.04-LTS",
"version": "latest"
}
},
"networkProfile": {
"networkInterfaces": [
{
"id": "[resourceId('Microsoft.Network/networkInterfaces', variables('networkInterfaceName'))]"
}
]
},
"osProfile": {
"computerName": "[variables('virtualMachineName')]",
"adminUsername": "[variables('adminUsername')]",
"adminPassword": "[variables('adminPassword')]"
},
"diagnosticsProfile": {
"bootDiagnostics": {
"enabled": true,
"storageUri": "[concat('https://', variables('diagnosticsStorageAccountName'), '.blob.core.windows.net/')]"
}
},
"priority": "Spot",
"evictionPolicy": "Deallocate",
"billingProfile": {
"maxPrice": -1
}
}
},
{
"name": "[variables('diagnosticsStorageAccountName')]",
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2019-04-01",
"location": "eastus",
"properties": {},
"kind": "[variables('diagnosticsStorageAccountKind')]",
"sku": {
"name": "[variables('diagnosticsStorageAccountType')]"
}
}
],
"outputs": {
"adminUsername": {
"type": "string",
"value": "[variables('adminUsername')]"
}
}
}
Simular uma expulsão
Pode simular uma expulsão de uma VM Spot do Azure para testar a resposta da aplicação a uma expulsão súbita.
Substitua os parâmetros abaixo pelas suas informações:
subscriptionId
resourceGroupName
vmName
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction?api-version=2020-06-01
Passos seguintes
- Também pode criar uma VM Spot do Azure com Azure PowerShell ou a CLI do Azure.
- Para obter mais informações sobre os preços atuais da VM Spot do Azure, veja API de preços de retalho do Azure. Tanto
meterName
eskuName
contémSpot
. - Para saber mais sobre um erro, veja Códigos de erro.