Muuda ja eemalda Azure VM-e PowerShelli abil

PowerShelli abil suudavad insenerid ja IT-administratorenid edukalt automatiseerida erinevaid ülesandeid mitte ainult on-premises, vaid ka pilveinfrastruktuuride, sealhulgas Azure'i, haldamisel. PowerShelliga töötamine on mitmetel juhtudel palju mugavam ja kiirem kui Azure'i portaali kaudu. Tänu PowerShelli platvormideülestele võimalustele saab seda kasutada mistahes operatsioonisüsteemides.

Olgu te tegemist Ubuntu, Red Hati või Windowsiga — PowerShell aitab hallata pilveressursse. Kasutades moodulit Azure PowerShell, näiteks, saab määrata mistahes virtuaalmasinate omadusi.

Selles artiklis vaatame, kuidas kasutada PowerShelli, et muuta virtuaalmasina suurust Azure'is, samuti kuidas eemaldada virtuaalmasina ja sellega seotud objekte.

Muuda ja eemalda Azure VM-e PowerShelli abil

Oluline! Ärge unustage käsi desinfitseerida ja tööd alustada:

  • Vajate moodulit Azure PowerShell Module — selle saab laadida PowerShell Gallery'st käsuga Install-Module Az.
  • Tuleb autentida Azure'is, kus virtuaalmasin töötab, käivitades käsu Connect-AzAccount.

Alustame skripti loomisega, mis muudab Azure'i VM-i suurust. Avame VS Code'i ja salvestame uue PowerShelli skripti nimega Resize-AzVirtualMachine.ps1 — sellesse lisame koodilõike näitena.

Küsi olemasolevaid VM-i suurusi

Kuna enne VM-i suuruse muutmist tuleb teada, millised suurused on Azure'i pilves virtuaalmasinatele üldiselt lubatud, tuleb käivitada käsk Get-AzVMSize.

Nii et virtuaalmasina devvm01 ressursside rühmast dev küsi kõiki lubatud suurusi:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Tegelikus töös on muidugi parem kirjutada oma väärtused nende parameetrite asemel.) Käsk tagastab ligikaudu järgmise nimekirja: ja Need on kõik võimalikud suuruse variandid, mida selle virtuaalmasina jaoks saab määrata. Teeme masina suuruse muutmise

Näiteks muudame suuruseks

Muuda ja eemalda Azure VM-e PowerShelli abil

Standard_B1ls

— see on ülaltoodud loendis esimesel kohal. (Tegelikus töös valite muidugi endale sobiva suuruse.)

Esiteks saame käsu Get-AzVM abil meie objekti (virtuaalmasina) andmed, salvestades need muutujasse

  1. $virtualMachine $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 Seejärel võtame selle objekti omaduse .HardwareProfile.VmSize:
    ja määrame vajaliku uue väärtuse:
  2. $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls" Ja nüüd täidame lihtsalt VM-i värskendamise käsu — Update-AzVm
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ja nüüd lihtsalt käivitame VM-i uuendamise käsu — Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Veenduge, et kõik on läinud hästi — selle jaoks küsime taas meie objekti kohta teavet ja vaatame omadust $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Kui seal on näha Get-AzVM — siis on kõik korras, masina suurus on muudetud. Saame edasi liikuda ja saavutada edu — suurendame korraga mitut VM-i, kasutades massiivi.

Aga kuidas on Azure'is VM-i kustutamisega?

Kustutamine ei ole nii lihtne ja sirgjooneline, nagu võiks tunduda. Tuleb kustutada ka rida ressursse, mis on seotud selle masinaga, sealhulgas:

  • Käivitamise diagnoosi salvestuskonteinerid
  • Network interfaces
  • Avalikud IP-aadressid
  • Süsteemi ketas ja blob, kus hoitakse selle staatust
  • Andmekettad

Seetõttu loome funktsiooni, mille nimeks saame Remove-AzrVirtualMachine — ja see kustutab mitte ainult Azure VM-i, vaid ka kõik ülaltoodud.

Liigume tavapäraselt edasi ja saame kõigepealt meie objekti (VM) käsu abil Get-AzVm. Näitena olgu see masin WINSRV19 ressursside rühmast MyTestVMs.

Salvestame selle objekti koos kõigi selle omadustega muutujasse $vm:

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

Kustutame käivitamise diagnoosi failide konteineri

Azure'is VM-i loomisel pakutakse kasutajale samuti luua käivitamise diagnoosi konteiner, et probleemide korral oleks midagi, millele tugineda tõrkeotsingu jaoks. Kuid VM-i kustutamisel jääb see konteiner jätkama oma nüüdseks mõttetu olemasolu. Lahendame selle olukorra.

  1. Esiteks selgitame välja, millisele salvestuskontole see konteiner kuulub — selle jaoks peame leidma omaduse storageUri meie VM-i DiagnosticsProfile seest. Selleks kasutan sellist regulaarset avaldist:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?:\/\/(.+?)\.') .groups[1].value
  2. Nüüd peame välja selgitama konteineri nime, ja selleks peame saama VM ID käsu abil 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 teada ressursside grupi nime, kuhu konteiner kuulub:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ja nüüd on meil kõik vajalikud tingimused konteineri eemaldamiseks käsuga Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Nimi' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Eemaldame VM

Nüüd eemaldame virtuaalmasina ise, hea, et oleme juba loonud muutuja $vm vastava objekti jaoks. Noh, käivitame käsu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Eemaldame võrguliidese ja avaliku IP-aadressi

Meie VM-il on üks (või isegi mitu) võrguliidest (NICs) — et need eemaldada, liikumeme läbi omaduse NetworkInterfaces meie VM objekti pealt ja eemaldame NIC käsuga Remove-AzNetworkInterface. Kui võrguliideseid on mitu, kasutame tsüklit. Samuti kontrollime iga NIC jaoks omadust IpConfiguration , et näha, kas liidese avalik IP-aadress on olemas. Kui see leitakse, eemaldame selle käsuga Remove-AzPublicIpAddress.

Siin on näide sellisest koodist, kus me tsüklis vaatame läbi kõik NIC-id, eemaldame need, kontrollime, kas avalik IP on olemas. Kui on, siis vaatame omaduse PublicIpAddress, saame ID järgi vastava ressursi nime 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äsu olemas Remove-AzStorageBlob — kuid enne selle käivitamist tuleb määrata nõutavad väärtused selle parameetritele. Selleks on näiteks vajalik saada sisendketta nimega konteiner, mis sisaldab süsteemi ketta, ja seejärel edastada see koos vastava salvestusakna nimega sellele käsule.

$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

Selle jaoks, nagu te tõenäoliselt arvate, võtame salvestuskonteineri, mis sisaldab seda ketast, ja, eeldades, et blob lõpus sisaldab staatus, edastame vastavad parameetrid eemaldamise käsule Remove-AzStorageBlob:

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

Ja, lõpuks eemaldame andmed sisaldavad kettad

Meie virtuaalsel masinal võisid alles jääda andmeid sisaldavad kettad, mis olid sellele lisatud. Kui need ei ole vajalikud, eemaldame ka need. Esiteks analüüsime StorageProfile meie virtuaalsest masinast ja leiame omaduse Uri. Kui kettaid on mitu, organiseerime tsükli üle URI. Iga URI jaoks leiame vastava salvestuskonto abil Get-AzStorageAccount. Seejärel analüüsime salvestuse URI-d, et välja tõmmata vajalik blob'i nimi ja edastada see kustutamise käsule Remove-AzStorageBlob koos salvestuskontoga. 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 jõudnud õnneliku lõpuni!" Nüüd tuleb kõik need fragmendid kokku koguda. Häid nõuandeid pakkus autor Adam Bertram ja tegi selle ise. Siin on link lõppskriptile pealkirjaga Remove-AzrVirtualMachine.ps1:

→ GitHub

Loodan, et need praktilised näpunäited on teile abiks, et säästa jõudu, aega ja vahendeid Azure'i virtuaalsete masinatega töötamisel.

Allikas: habr.com

Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid 🔥 Osta usaldusväärne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster