Bagikan melalui


Menyebarkan Azure Spot Virtual Machines menggunakan templat Manajer Sumber Daya

Berlaku untuk: ✔️ mesin virtual Linux

Menggunakan Azure Spot Virtual Machines memungkinkan Anda untuk memanfaatkan kapasitas kami yang tidak digunakan dengan penghematan biaya yang signifikan. Kapan saja ketika Azure membutuhkan kapasitas kembali, infrastruktur Azure mengeluarkan Azure Spot VM. Azure Spot VM sangat bagus untuk beban kerja yang dapat menangani gangguan seperti pekerjaan pemrosesan batch, lingkungan dev/test, beban kerja komputasi besar, dan banyak lagi.

Harga untuk Azure Spot Virtual Machines berbeda-beda berdasarkan wilayah dan SKU. Untuk informasi lebih lanjut, lihat harga VM untuk Linux dan Windows.

Anda memiliki opsi untuk menetapkan harga maksimum yang ingin Anda bayar, per jam, untuk VM. Harga maksimum untuk Azure Spot VM dapat diatur dalam dolar AS (USD), menggunakan hingga lima tempat desimal. Misalnya, nilai 0.98765 akan menjadi harga maks $ 0,98765 USD per jam. Jika Anda menetapkan harga maksimum menjadi -1, pengeluaran VM tidak didasarkan pada harga dan harganya akan menjadi harga saat ini untuk Azure Spot VM atau harga untuk VM standar, mana yang kurang, selama ada kapasitas dan kuota yang tersedia. Untuk informasi selengkapnya tentang mengatur harga maksimum, lihat Azure Spot VM - Harga.

Menggunakan templat

Untuk penyebaran templat Azure Spot VM, gunakan"apiVersion": "2019-03-01" atau yang lebih baru. Tambahkan properti priority, evictionPolicy, dan billingProfile ke dalam templat Anda:

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

Berikut adalah contoh templat dengan properti tambahan untuk Azure Spot VM. Ganti nama sumber daya dengan nama pilihan Anda dan ganti <password> dengan kata sandi untuk akun administrator lokal pada 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')]"
        }
    }
}

Mensimulasikan pengeluaran

Anda dapat mensimulasikan pengeluaran Azure Spot VM, untuk menguji respons aplikasi Anda terhadap pengeluaran mendadak.

Ganti parameter di bawah ini dengan informasi Anda:

  • subscriptionId
  • resourceGroupName
  • vmName
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/simulateEviction?api-version=2020-06-01

Langkah berikutnya

  • Anda juga dapat membuat Azure Spot VM menggunakan Azure PowerShell atau Azure CLI.
  • Untuk informasi selengkapnya tentang harga Azure Spot VM saat ini, lihat API harga ritel Azure. Keduanya meterName dan skuName berisi Spot.
  • Untuk mempelajari selengkapnya tentang kesalahan, lihat Kode kesalahan.