Déployer des machines virtuelles Spot à l’aide d’un modèle Resource ManagerDeploy Spot VMs using a Resource Manager template

L’utilisation de machines virtuelles Spot vous permet de tirer parti de notre capacité inutilisée en réalisant des économies significatives.Using Spot VMs allows you to take advantage of our unused capacity at a significant cost savings. Dès qu’Azure a besoin de récupérer toute la capacité, l’infrastructure Azure supprime les machines virtuelles Spot.At any point in time when Azure needs the capacity back, the Azure infrastructure will evict Spot VMs. Les machines virtuelles Spot sont donc appropriées pour les charges de travail capables de gérer les interruptions, comme les travaux de traitement par lots, les environnements de développement et de test, les charges de travail de calcul importantes, entre autres.Therefore, Spot VMs are great for workloads that can handle interruptions like batch processing jobs, dev/test environments, large compute workloads, and more.

Les tarifs des machines virtuelles Spot sont variables, en fonction de la région et de la référence SKU.Pricing for Spot VMs is variable, based on region and SKU. Pour plus d’informations, consultez les prix des machines virtuelles pour Linux et Windows.For more information, see VM pricing for Linux and Windows.

Vous avez la possibilité de définir un prix maximal que vous êtes prêt à payer, par heure, pour la machine virtuelle.You have option to set a max price you are willing to pay, per hour, for the VM. Le prix maximal d’une machine virtuelle Spot peut être défini en dollars américains (USD), en utilisant jusqu’à 5 décimales.The max price for a Spot VM can be set in US dollars (USD), using up to 5 decimal places. Par exemple, la valeur 0.98765 correspond à un prix maximal de 0,98765 $ USD par heure.For example, the value 0.98765would be a max price of $0.98765 USD per hour. Si vous définissez -1 comme prix maximal, la machine virtuelle n’est pas supprimée en fonction du prix.If you set the max price to be -1, the VM won't be evicted based on price. Le prix de la machine virtuelle sera le prix actuel de Spot ou le prix d’une machine virtuelle standard, la valeur la plus faible étant retenue, à condition que la capacité et le quota soient disponibles.The price for the VM will be the current price for Spot or the price for a standard VM, which ever is less, as long as there is capacity and quota available. Pour plus d’informations sur la définition du prix maximal, consultez Machines virtuelles Spot - Tarifs.For more information about setting the max price, see Spot VMs - Pricing.

Utiliser un modèleUse a template

Pour les déploiements de machines virtuelles Spot à l’aide d’un modèle, utilisez "apiVersion": "2019-03-01" ou version ultérieure.For Spot template deployments, use"apiVersion": "2019-03-01" or later. Ajoutez les propriétés priority, evictionPolicy et billingProfile à votre modèle :Add the priority, evictionPolicy and billingProfile properties to in your template:

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

Voici un exemple de modèle avec les propriétés ajoutées pour une machine virtuelle Spot.Here is a sample template with the added properties for a Spot VM. Remplacez les noms de ressources par les vôtres et <password> par un mot de passe du compte administrateur local sur la machine virtuelle.Replace the resource names with your own and <password> with a password for the local administrator account on the 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": "18.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')]"
        }
    }
}

Étapes suivantesNext steps

Vous pouvez également créer une machine virtuelle Spot à l’aide d’Azure PowerShell ou de l’interface de ligne de commande Azure.You can also create a Spot VM using Azure PowerShell or the Azure CLI.

Si vous rencontrez une erreur, consultez Codes d’erreur.If you encounter an error, see Error codes.