Menyebarkan Azure Spot Virtual Machines menggunakan Azure PowerShell

Berlaku untuk: ✔️ mesin virtual Linux ✔️ mesin virtual Windows ✔️ Set skala fleksibel

Menggunakan Azure Spot Virtual Machines memungkinkan Anda untuk memanfaatkan kapasitas kami yang tidak digunakan dengan menghemat biaya secara signifikan. Kapan pun Azure membutuhkan kembali kapasitas tersebut, infrastruktur Azure akan mengeluarkan Azure Spot Virtual Machines. Oleh karena itu, Azure Spot Virtual Machines sangat cocok untuk beban kerja yang dapat menangani gangguan seperti pekerjaan pemrosesan batch, lingkungan pengembangan/pengujian, beban kerja komputasi besar, dan banyak lagi.

Harga untuk Azure Spot Virtual Machines bervariasi berdasarkan wilayah dan SKU. Untuk informasi selengkapnya, lihat harga VM untuk Linux dan Windows. Untuk informasi selengkapnya tentang pengaturan harga maksimal, lihat Azure Spot Virtual Machines - Harga.

Anda memiliki opsi untuk menetapkan harga maksimum yang Anda bersedia membayar, per jam, untuk VM. Harga maksimum untuk Azure Spot Virtual Machine dapat ditetapkan dalam dolar AS (USD), menggunakan hingga 5 tempat desimal. Misalnya, nilai 0.98765 akan menjadi harga maks $ 0,98765 USD per jam. Jika Anda menetapkan harga maksimum sebesar -1, VM tidak akan dikeluarkan berdasarkan harga. Harga untuk VM adalah harga saat ini untuk spot atau harga untuk VM standar, tergantung mana yang lebih rendah, selama ada kapasitas dan kuota yang tersedia.

Membuat VM

Buat spotVM menggunakan New-AzVmConfig untuk membuat konfigurasi. Sertakan -Priority Spot dan atur -MaxPrice ke:

  • -1 sehingga VM tidak dikeluarkan berdasarkan harga.
  • jumlah dolar, maksimal 5 digit. Misalnya, -MaxPrice .98765 berarti bahwa VM akan dibatalkan alokasinya setelah harga untuk spotVM mencapai sekitar $98765 per jam.

Contoh ini membuat spotVM yang tidak akan dibatalkan alokasinya berdasarkan harga (hanya ketika Azure membutuhkan kembali kapasitas tersebut). Kebijakan pengeluaran diatur untuk membatalkan alokasi VM, agar dapat dimulai ulang di lain waktu. Jika Anda ingin menghapus VM dan disk yang mendasarinya ketika VM dikeluarkan, atur -EvictionPolicy ke Delete dalam New-AzVMConfig.

$resourceGroup = "mySpotRG"
$location = "eastus"
$vmName = "mySpotVM"
$cred = Get-Credential -Message "Enter a username and password for the virtual machine."
New-AzResourceGroup -Name $resourceGroup -Location $location
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
   -Name mySubnet -AddressPrefix 192.168.1.0/24
$vnet = New-AzVirtualNetwork -ResourceGroupName $resourceGroup `
   -Location $location -Name MYvNET -AddressPrefix 192.168.0.0/16 `
   -Subnet $subnetConfig
$pip = New-AzPublicIpAddress -ResourceGroupName $resourceGroup -Location $location `
  -Name "mypublicdns$(Get-Random)" -AllocationMethod Static -IdleTimeoutInMinutes 4
$nsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name myNetworkSecurityGroupRuleRDP  -Protocol Tcp `
  -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * `
  -DestinationPortRange 3389 -Access Deny
$nsg = New-AzNetworkSecurityGroup -ResourceGroupName $resourceGroup -Location $location `
  -Name myNetworkSecurityGroup -SecurityRules $nsgRuleRDP
$nic = New-AzNetworkInterface -Name myNic -ResourceGroupName $resourceGroup -Location $location `
  -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $pip.Id -NetworkSecurityGroupId $nsg.Id

# Create a virtual machine configuration and set this to be an Azure Spot Virtual Machine

$vmConfig = New-AzVMConfig -VMName $vmName -VMSize Standard_D1 -Priority "Spot" -MaxPrice -1 -EvictionPolicy Deallocate | `
Set-AzVMOperatingSystem -Windows -ComputerName $vmName -Credential $cred | `
Set-AzVMSourceImage -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2016-Datacenter -Version latest | `
Add-AzVMNetworkInterface -Id $nic.Id

New-AzVM -ResourceGroupName $resourceGroup -Location $location -VM $vmConfig

Setelah VM dibuat, Anda dapat mengkueri untuk melihat harga maksimal untuk semua VM dalam grup sumber daya.

Get-AzVM -ResourceGroupName $resourceGroup | `
   Select-Object Name,@{Name="maxPrice"; Expression={$_.BillingProfile.MaxPrice}}

Mensimulasikan pengeluaran

Anda dapat mensimulasikan pengeluaran Azure Spot Virtual Machine menggunakan REST, PowerShell, atau CLI guna menguji seberapa baik respons aplikasi Anda terhadap pengeluaran mendadak.

Dalam kebanyakan kasus, Anda dapat menggunakan REST API Virtual Machines - Simulasikan Pengeluaran untuk membantu pengujian aplikasi otomatis. Untuk REST, Response Code: 204 berarti simulasi pengeluaran telah berhasil. Anda dapat menggabungkan pengeluaran yang disimulasikan dengan Layanan Peristiwa Terjadwal, untuk mengotomatiskan cara aplikasi merespons saat VM dikeluarkan.

Untuk melihat aktivitas terjadwal yang sedang berjalan, tonton Azure Friday - Menggunakan Peristiwa Terjadwal Azure untuk mempersiapkan pemeliharaan VM.

Pengujian cepat

Untuk pengujian cepat guna memperlihatkan performa simulasi pengeluaran, mari kita melihat panduan mengkueri layanan peristiwa terjadwal untuk melihat seperti apa tampilannya ketika Anda mensimulasikan pengeluaran menggunakan PowerShell.

Layanan Peristiwa Terjadwal diaktifkan untuk layanan Anda saat pertama kali mengajukan permintaan untuk peristiwa.

Jarak jauh ke VM Anda, lalu buka perintah.

Dari perintah pada VM Anda, ketik:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

Respon pertama ini bisa memakan waktu hingga 2 menit. Mulai sekarang, output akan segera ditampilkan.

Dari komputer yang memasang modul Az PowerShell (seperti komputer lokal Anda), simulasikan pengeluaran menggunakan Set-AzVM. Ganti nama grup sumber daya dan nama VM dengan nama Anda sendiri.

Set-AzVM -ResourceGroupName "mySpotRG" -Name "mySpotVM" -SimulateEviction

Output respons akan memiliki Status: Succeeded jika permintaan berhasil dibuat.

Langsung kembali ke koneksi jarak jauh Anda ke Spot Virtual Machine dan ajukan lagi kueri titik akhir Peristiwa Terjadwal. Ulangi perintah berikut hingga Anda mendapatkan output yang berisi informasi selengkapnya:

curl -H Metadata:true http://169.254.169.254/metadata/scheduledevents?api-version=2019-08-01

Ketika Layanan Peristiwa Terjadwal mendapatkan pemberitahuan pengeluaran, Anda akan mendapatkan respons yang terlihat mirip dengan ini:

{"DocumentIncarnation":1,"Events":[{"EventId":"A123BC45-1234-5678-AB90-ABCDEF123456","EventStatus":"Scheduled","EventType":"Preempt","ResourceType":"VirtualMachine","Resources":["myspotvm"],"NotBefore":"Tue, 16 Mar 2021 00:58:46 GMT","Description":"","EventSource":"Platform"}]}

Anda dapat melihat bahwa "EventType":"Preempt", dan sumber daya adalah sumber daya VM "Resources":["myspotvm"].

Anda juga dapat melihat kapan VM akan dikeluarkan dengan memeriksa nilai "NotBefore". VM tidak akan dikeluarkan sebelum waktu yang diberikan dalam NotBefore, jadi ini adalah jendela waktu untuk menutup aplikasi dengan baik.

Langkah berikutnya

Anda juga dapat membuat Azure Spot Virtual Machine menggunakan Azure CLI, portal, atau templat.

Kuerikan informasi harga saat ini menggunakan Azure Retail Prices API untuk informasi tentang harga Azure Spot Virtual Machine. Baik meterName maupun skuName akan berisi Spot.

Jika Anda mengalami kesalahan, lihat Kode galat.