Bird
Raised Fist0
Azurecloud~5 mins

Spot VMs for cost savings in Azure - Commands & Configuration

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Spot VMs let you use spare cloud capacity at a lower price. They can save money but might stop running if the cloud needs the resources back.
When running batch jobs that can pause and resume later without issues.
When testing applications that do not need guaranteed uptime.
When running flexible workloads that can handle interruptions.
When you want to reduce cloud costs for non-critical tasks.
When experimenting with cloud services without spending much.
Config File - spot-vm-template.json
spot-vm-template.json
{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "resources": [
    {
      "type": "Microsoft.Compute/virtualMachines",
      "apiVersion": "2021-07-01",
      "name": "mySpotVM",
      "location": "eastus",
      "properties": {
        "priority": "Spot",
        "evictionPolicy": "Deallocate",
        "hardwareProfile": {
          "vmSize": "Standard_DS1_v2"
        },
        "storageProfile": {
          "imageReference": {
            "publisher": "Canonical",
            "offer": "UbuntuServer",
            "sku": "18.04-LTS",
            "version": "latest"
          },
          "osDisk": {
            "createOption": "FromImage"
          }
        },
        "osProfile": {
          "computerName": "mySpotVM",
          "adminUsername": "azureuser",
          "adminPassword": "P@ssw0rd1234!"
        },
        "networkProfile": {
          "networkInterfaces": [
            {
              "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic"
            }
          ]
        }
      }
    }
  ]
}

This JSON template creates a Spot VM named mySpotVM in the eastus region.

The priority is set to Spot to use spare capacity at a lower cost.

The evictionPolicy is Deallocate, meaning the VM is stopped but not deleted if the cloud reclaims the resources.

The VM size is Standard_DS1_v2, running Ubuntu 18.04 LTS.

It uses a network interface myNic which must exist in the specified resource group.

Commands
Create a resource group named myResourceGroup in the eastus region to hold your VM and related resources.
Terminal
az group create --name myResourceGroup --location eastus
Expected OutputExpected
{ "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup", "location": "eastus", "managedBy": null, "name": "myResourceGroup", "properties": { "provisioningState": "Succeeded" }, "tags": {}, "type": "Microsoft.Resources/resourceGroups" }
--name - Specifies the resource group name
--location - Specifies the Azure region
Create a network interface named myNic in the resource group. This connects the VM to the network.
Terminal
az network nic create --resource-group myResourceGroup --name myNic --vnet-name myVnet --subnet mySubnet
Expected OutputExpected
{ "NewNIC": { "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myNic", "location": "eastus", "name": "myNic", "provisioningState": "Succeeded" } }
--resource-group - Specifies the resource group
--name - Names the network interface
--vnet-name - Specifies the virtual network name
--subnet - Specifies the subnet name
Deploy the Spot VM using the JSON template file to the resource group.
Terminal
az deployment group create --resource-group myResourceGroup --template-file spot-vm-template.json
Expected OutputExpected
{ "properties": { "provisioningState": "Succeeded", "outputs": {} }, "id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Resources/deployments/deployment1", "name": "deployment1", "type": "Microsoft.Resources/deployments" }
--resource-group - Specifies the resource group for deployment
--template-file - Points to the ARM template file
Check the status and details of the Spot VM after deployment.
Terminal
az vm get-instance-view --resource-group myResourceGroup --name mySpotVM
Expected OutputExpected
{ "statuses": [ { "code": "PowerState/running", "displayStatus": "VM running", "level": "Info", "time": null } ] }
--resource-group - Specifies the resource group
--name - Specifies the VM name
Key Concept

If you remember nothing else from this pattern, remember: Spot VMs save money by using spare cloud capacity but can be stopped anytime when the cloud needs those resources back.

Common Mistakes
Not setting the VM priority to 'Spot' in the configuration.
The VM will be created as a regular VM and will not get the cost savings or eviction behavior of a Spot VM.
Always set the 'priority' property to 'Spot' in the VM configuration to enable Spot pricing.
Using Spot VMs for critical applications that cannot tolerate interruptions.
Spot VMs can be evicted at any time, causing downtime or data loss for critical workloads.
Use Spot VMs only for flexible, interruptible workloads like batch jobs or testing.
Not specifying an eviction policy, leading to unexpected VM deletion.
Without an eviction policy, the default might delete the VM instead of stopping it, causing loss of data and configuration.
Set the evictionPolicy to 'Deallocate' to stop the VM safely on eviction.
Summary
Create a resource group and network interface to prepare the environment.
Deploy a Spot VM using an ARM template with priority set to Spot and eviction policy to Deallocate.
Verify the VM status to ensure it is running and using Spot pricing.

Practice

(1/5)
1. What is the main benefit of using Azure Spot VMs?
easy
A. They automatically scale without any configuration.
B. They guarantee 100% uptime for critical applications.
C. They provide cheaper compute by using spare capacity.
D. They offer unlimited storage space for virtual machines.

Solution

  1. Step 1: Understand Spot VM purpose

    Spot VMs use unused cloud capacity to offer lower prices.
  2. Step 2: Compare benefits

    Unlike regular VMs, Spot VMs are cheaper but can be evicted when capacity is needed.
  3. Final Answer:

    They provide cheaper compute by using spare capacity. -> Option C
  4. Quick Check:

    Spot VMs = cheaper compute [OK]
Hint: Spot VMs save cost by using spare capacity [OK]
Common Mistakes:
  • Thinking Spot VMs guarantee uptime
  • Confusing Spot VMs with auto-scaling
  • Assuming Spot VMs provide extra storage
2. Which of the following is the correct way to set a Spot VM priority in Azure CLI?
easy
A. az vm create --priority High
B. az vm create --priority Spot
C. az vm create --spot-priority true
D. az vm create --enable-spot

Solution

  1. Step 1: Recall Azure CLI syntax for Spot VMs

    The correct parameter to set Spot VM priority is --priority Spot.
  2. Step 2: Evaluate options

    The other options use incorrect or non-existent flags.
  3. Final Answer:

    az vm create --priority Spot -> Option B
  4. Quick Check:

    Spot VM priority flag = --priority Spot [OK]
Hint: Use --priority Spot to create Spot VMs [OK]
Common Mistakes:
  • Using incorrect flags like --spot-priority
  • Setting priority to High instead of Spot
  • Assuming --enable-spot is valid
3. Consider this Azure CLI command to create a Spot VM:
az vm create --name mySpotVM --image UbuntuLTS --priority Spot --max-price 0.05
What happens if the current Spot price exceeds 0.05 USD/hour?
medium
A. The VM is converted to a regular VM automatically.
B. The VM continues running at the higher price.
C. The VM price is capped at 0.05 USD/hour but runs normally.
D. The VM is evicted (stopped) automatically.

Solution

  1. Step 1: Understand max-price setting

    The max-price limits the Spot VM cost; if price rises above it, eviction occurs.
  2. Step 2: Analyze behavior when price exceeds max-price

    Spot VMs are stopped or deallocated automatically when price exceeds max-price.
  3. Final Answer:

    The VM is evicted (stopped) automatically. -> Option D
  4. Quick Check:

    Price > max-price = VM eviction [OK]
Hint: Spot VM stops if price goes above max-price [OK]
Common Mistakes:
  • Thinking VM keeps running at higher price
  • Assuming price is capped automatically
  • Believing VM converts to regular VM
4. You tried to create a Spot VM with this command:
az vm create --name testVM --image UbuntuLTS --priority Spot --max-price -2
What is the issue with this command?
medium
A. max-price cannot be negative; it causes an error.
B. Priority Spot is invalid syntax.
C. Image UbuntuLTS is not supported for Spot VMs.
D. VM name testVM is reserved and cannot be used.

Solution

  1. Step 1: Check max-price parameter rules

    max-price must be greater than or equal to -1; other negative values are invalid.
  2. Step 2: Identify error cause

    Using -2 for max-price causes a validation error during VM creation.
  3. Final Answer:

    max-price cannot be negative; it causes an error. -> Option A
  4. Quick Check:

    max-price < -1 = error [OK]
Hint: max-price must be >= -1 [OK]
Common Mistakes:
  • Using negative max-price values
  • Thinking Spot priority syntax is wrong
  • Assuming UbuntuLTS is unsupported
5. You want to run a batch job that can pause and resume without losing progress. Which Spot VM configuration helps minimize cost while ensuring the job restarts automatically if evicted?
hard
A. Set VM priority to Spot, max-price to a low value, and enable automatic redeployment.
B. Use regular VMs with high priority and no max-price limit.
C. Set VM priority to Spot with max-price set to -1 to avoid eviction.
D. Use Spot VMs without max-price and disable automatic redeployment.

Solution

  1. Step 1: Choose Spot VM with cost control

    Setting priority to Spot and max-price low saves cost but risks eviction.
  2. Step 2: Enable automatic redeployment

    Automatic redeployment restarts the VM if evicted, ensuring job resumes.
  3. Final Answer:

    Set VM priority to Spot, max-price to a low value, and enable automatic redeployment. -> Option A
  4. Quick Check:

    Spot + max-price + auto redeploy = cost saving + restart [OK]
Hint: Spot + low max-price + auto redeploy = cost + restart [OK]
Common Mistakes:
  • Using negative max-price to avoid eviction
  • Disabling automatic redeployment
  • Choosing regular VMs for cost savings