Partilhar via


Implantar Máquinas Virtuais do Azure Spot usando um modelo do Gerenciador de Recursos

Aplica-se a: ✔️ Linux VMs

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 precisa 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 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.

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 VM spot do Azure pode ser definido em dólares americanos (USD), usando até cinco 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 remoção de VMs não será baseada no preço e seu preço será o preço atual para VMs spot do Azure ou o preço para uma VM padrão, o que for menor, desde que haja capacidade e cota disponíveis. Para obter mais informações sobre como definir o preço máximo, consulte VMs spot do Azure - Preços.

Utilizar um modelo

Para implantações de modelo de VM spot do Azure, use"apiVersion": "2019-03-01" ou posterior. Adicione o priority, evictionPolicy e billingProfile as propriedades a no seu modelo:

"priority": "Spot",
"evictionPolicy": "Deallocate",
"billingProfile": {
    "maxPrice": -1
}

Aqui está um modelo de exemplo com propriedades adicionadas para uma VM spot do Azure. Substitua os nomes dos recursos pelos seus próprios nomes e <password> por uma senha 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

Você pode simular uma remoção de uma VM spot do Azure para testar a resposta do aplicativo a uma remoção repentina.

Substitua os parâmetros abaixo por 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

Próximos passos

  • Você também pode criar uma VM Spot do Azure usando o Azure PowerShell ou a CLI do Azure.
  • Para obter mais informações sobre os preços atuais da VM do Azure Spot, consulte API de preços de varejo do Azure. Ambos meterName e skuName contém Spot.
  • Para saber mais sobre um erro, consulte Códigos de erro.