Muudame ja kustutame Azure VM-e, kasutades PowerShelli

PowerShelli abil saavad insenerid ja IT-administraatorid automatiseerida erinevaid ülesandeid mitte ainult kohalikes, vaid ka pilveinfrastruktuuridega töötades, sealhulgas Azure'iga. PowerShelli kaudu töötamine on mitmetel juhtudel palju mugavam ja kiirem kui Azure'i portaalis. Tänu PowerShelli platvormidevahelisele ühilduvusele saab seda kasutada kõigis operatsioonisüsteemides.

Olgu te töötamas Ubuntu, Red Hat'i või Windows'iga — PowerShell aitab hallata pilveressursse. Kasutades moodulit Azure PowerShell, näiteks saab määrata kõikide virtuaalmasinate omadused.

Selles artiklis vaatleme, kuidas kasutada PowerShelli, et muuta Azure'i VM-i suurust ning kuidas kustutada VM ja sellega seotud objekte.

Muudame ja kustutame Azure VM-e, kasutades PowerShelli

Oluline! Ärge unustage käsi desinfitseerida ja valmistuda tööks:

  • Te vajate moodulit Azure PowerShell Module — selle saab laadida PowerShell Gallery'st käsuga Install-Module Az.
  • Peate autentima end Azure'is, kus virtuaalmasin töötab, käivitades käsu Connect-AzAccount.

Alustuseks loome skripti, mis muudab Azure'i VM-i suurust. Avame VS Code'i ja salvestame uue PowerShelli skripti nimega Resize-AzVirtualMachine.ps1 — selle näite käigus lisame me sinna koodilõike.

Küsime saadaval olevad VM mõõtmed

Enne VM-i suuruse muutmist tuleb teada, millised lubatud suurused on üldse Azure'i pilves saadaval. Selleks tuleb käivitada käsk Get-AzVMSize.

Nii et virtuaalmasina devvm01 ressursigruppidest dev küsime kõiki võimalikke lubatud suurusi:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Tegelike ülesannete puhul näituseks peaksite kasutama oma väärtusi nende parameetrite jaoks.) ResourceGroupName=dev ja VMName=devvm01 вы будете указывать свои значения этих параметров.)

Käsk tagastab umbkaudu sellise nimekirja:

Muudame ja kustutame Azure VM-e, kasutades PowerShelli

Need on kõik võimalused suuruste määramiseks, mida saab selle virtuaalse masina jaoks seadistada.

Teeme masina suuruse muutmise

Näiteks teeme suuruse muutmise uuele suurusele Standard_B1ls — see on loendis üleval esimesel kohal. (Tegelike ülesannete puhul valite kindlasti endale sobiva suuruse.)

  1. Esiteks saame käsku Get-AzVM meie objekti (virtuaalse masina) teabe, salvestades selle muutuja $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Seejärel võtame selle objekti omaduse .HardwareProfile.VmSize ja määrame vajalikud uued väärtused:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ja nüüd lihtsalt täidame VM-i uuendamise käsu — Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Veendume, et kõik on edukalt läinud — selleks küsime taas meie objekti kohta teavet ja vaatame omadust $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Kui seal näeme Standard_B1ls — siis on kõik korras, masina suurus on muudetud. Saame edasi liikuda ja laiendada edu — suurendada korraga mitut VM-i, kasutades massiivi.

Aga kuidas Azure'is VM-i kustutamisega on?

Kustutamine pole nii lihtne ja ühemõtteline nagu võib tunduda. Tuleb kustutada ka rida ressursse, mis on sellega seotud, sealhulgas:

  • Boot diagnostics storage containers
  • Võrguliidesed
  • Avalikud IP aadressid
  • Süsteemiedisk ja blob, kus hoitakse selle staatust
  • Andmediskid (data disks)

Seetõttu loome funktsiooni ja nimetame selle Remove-AzrVirtualMachine — ja see eemaldab mitte ainult Azure VM-i, vaid ka kõik eeltoodud.

Liigume tavateed pidi ja esmalt saame meie objekti (VM) käsu abil Get-AzVm. Näiteks olgu see masin WINSRV19 ressursigruppidest MyTestVMs.

Salvestame selle objekti koos kõigi oma omadustega muutuja $vm:

$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs

Kustutame käivitamise diagnostika faile sisaldava konteineri

Azure'is VM-i loomisel pakutakse kasutajale ka käivitamise diagnostika konteineri (boot diagnostics container) loomist, et probleemide korral oleks olemas koht traablilinde tegemiseks. Siiski jääb see konteiner pärast VM-i kustutamist oma nüüd sihituks eksisteerimiseks. Parandame selle olukorra.

  1. Esmalt selgitame välja, millisele salvestuskontole see konteiner kuulub — selleks peame leidma omaduse storageUri objekti DiagnosticsProfile meie VM-ist. Selleks kasutan järgmist regulaaravaldiste:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Nüüd peame selgitama välja konteineri nime ja selleks on meil vaja saada VM ID käsuga Get-AzResource:
    
    if ($vm.Name.Length -gt 9) {
        $i = 9
    } else {
        $i = $vm.Name.Length - 1
    }
     
    $azResourceParams = @{
        'ResourceName' = WINSRV
        'ResourceType' = 'Microsoft.Compute/virtualMachines'
        'ResourceGroupName' = MyTestVMs
    }
     
    $vmResource = Get-AzResource @azResourceParams
    $vmId = $vmResource.Properties.VmId
    $diagContainerName = ('bootdiagnostics-{0}-{1}' -f $vm.Name.ToLower().Substring(0, $i), $vmId)
    
  3. Seejärel saame konteineri kuuluvuse ressursigrupi nime:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ja nüüd on meil kõik vajalik, et eemaldada konteiner käsuga Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Eemaldame VM

Nüüd eemaldame ise virtual machine, kuna oleme juba loonud muutuja $vm vastava objekti jaoks. Noh, alustame käsku Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Eemaldame võrguliidese ja avaliku IP-aadressi

Meie VM-l on veel üks (või isegi mitu) võrgu liidest (NICs) — et need eemaldada, läbime omaduse NetworkInterfaces meie VM objektil ja eemaldame NIC käsuga Remove-AzNetworkInterface. Juhuks, kui võrgu liideseid on rohkem kui üks, kasutame tsüklit. Samuti kontrollime iga NIC puhul omadust IpConfiguration selle määramiseks, kas liidesel on avalik IP-aadress. Kui see avastatakse, eemaldame selle käsuga Remove-AzPublicIpAddress.

Siin on näide sellisest koodist, kus me tsüklis vaatame kõiki NIC-e, eemaldame need ja kontrollime, kas on olemas avalik IP. Kui see on olemas, siis parssime omaduse PublicIpAddress, saame vastava ressursi nime ID järgi ja eemaldame selle:


foreach($nicUri in $vm.NetworkProfile.NetworkInterfaces.Id) {
    $nic = Get-AzNetworkInterface -ResourceGroupName $vm.ResourceGroupName -Name $nicUri.Split('/')[-1]
    Remove-AzNetworkInterface -Name $nic.Name -ResourceGroupName $vm.ResourceGroupName -Force

    foreach($ipConfig in $nic.IpConfigurations) {
        if($ipConfig.PublicIpAddress -ne $null) {
            Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('/')[-1] -Force
        }
    }
}

Eemaldame süsteemi ketta

OS ketas on blob, mille eemaldamiseks on käsk Remove-AzStorageBlob — kuid enne selle täitmist tuleb määrata selle parameetritele vajalikud väärtused. Selleks tuleb näiteks saada süsteemi ketta hoidla konteineri nimi ja siis edastada see käsku koos vastava hoidla kontoga.

$osDiskUri = $vm.StorageProfile.OSDisk.Vhd.Uri
$osDiskContainerName = $osDiskUri.Split('/')[-2]
$osDiskStorageAcct = Get-AzStorageAccount | where { $_.StorageAccountName -eq $osDiskUri.Split('/')[2].Split('.')[0] }
$osDiskStorageAcct | Remove-AzStorageBlob -Container $osDiskContainerName -Blob $osDiskUri.Split('/')[-1]

Eemaldame süsteemi ketta staatuse blobi

Selleks, nagu te arvatavasti juba aimate, võtame hoidla konteineri, kus see ketas asub, ja eeldades, et blob lõpus sisaldab status, edastame vastavad parameetrid kustutamise käsklusele Remove-AzStorageBlob:

$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob

Ja lõpuks kustutame andmediskid

Meie VM-il võivad olla andmediskid, mis olid sellele kinnitatud. Kui need pole vajalikud, kustutame ka need. Alustame parsimisega StorageProfile meie VM-ist ja leiame omaduse Uri. Kui diskke on mitu, korraldame tsükli URI. Iga URI jaoks leiame vastava salvestuse konto abil Get-AzStorageAccount. Seejärel parsime salvestuse URI, et välja tõmmata vajalik blob-i nimi ja edastada see kustutamise käsklusele Remove-AzStorageBlob koos salvestuse kontoga. Nii see koodis välja näeb:

if ($vm.DataDiskNames.Count -gt 0) {
    foreach ($uri in $vm.StorageProfile.DataDisks.Vhd.Uri) {
        $dataDiskStorageAcct = Get-AzStorageAccount -Name $uri.Split('/')[2].Split('.')[0]
        $dataDiskStorageAcct | Remove-AzStorageBlob -Container $uri.Split('/')[-2] -Blob $uri.Split('/')[-1]
    }
}

Ja nüüd „oleme õnneliku lõpu lähedal!” Nüüd tuleb kõik need fragmendid kokku koguda. Hea autor Adam Bertram aitas kasutajaid ja tegi selle ise. Siin on link lõppscriptile nimega Remove-AzrVirtualMachine.ps1:

GitHub

Loodan, et need praktilised nõuanded aitavad teil säästa jõudu, aega ja raha Azure VM-idega töötamisel.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster