Izmjena i brisanje Azure VM-ova pomoću PowerShell-a

Koristeći PowerShell, inženjeri i IT administratori uspješno automatiziraju različite zadatke pri radu ne samo s lokalnim već i s infrastrukturama u oblaku, posebice s Azureom. U nekim je slučajevima rad putem PowerShell-a mnogo praktičniji i brži od rada putem Azure portala. Zahvaljujući svojoj višeplatformskoj prirodi, PowerShell se može koristiti na bilo kojem operativnom sustavu.

Bez obzira koristite li Ubuntu, Red Hat ili Windows, PowerShell vam može pomoći u kontroli resursa u oblaku. Korištenje modula Azure PowerShell, na primjer, možete postaviti bilo koja svojstva virtualnih strojeva.

U ovom članku ćemo pogledati kako možete koristiti PowerShell za promjenu veličine VM-a u Azure oblaku, kao i brisanje VM-a i njegovih povezanih objekata.

Izmjena i brisanje Azure VM-ova pomoću PowerShell-a

Važno! Ne zaboravite obrisati ruke dezinficijensom kako biste se pripremili za posao:

  • Trebat će vam modul Modul Azure PowerShell - može se preuzeti iz galerije PowerShell pomoću naredbe Install-Module Az.
  • Morate se autentificirati u Azure oblaku gdje je pokrenut virtualni stroj tako što ćete pokrenuti naredbu Connect-AzAccount.

Prvo, stvorimo skriptu koja će promijeniti veličinu Azure VM-a. Otvorimo VS Code i spremimo novu PowerShell skriptu pod nazivom Promjena veličine-AzVirtualMachine.ps1 — dodavat ćemo mu dijelove koda kako primjer napreduje.

Tražimo dostupne veličine VM-a

Prije nego što promijenite veličinu VM-a, morate saznati koje su prihvatljive veličine za virtualna računala u Azure oblaku. Da biste to učinili, morate pokrenuti naredbu Get-AzVMSize.

Dakle za virtualni stroj devvm01 iz grupe resursa dev Tražimo sve moguće prihvatljive veličine:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(U stvarnim problemima, naravno, umjesto ResourceGroupName=dev и VMName=devvm01 navest ćete vlastite vrijednosti za ove parametre.)

Naredba će vratiti nešto poput ovoga:

Izmjena i brisanje Azure VM-ova pomoću PowerShell-a

Ovo su sve moguće opcije veličine koje se mogu postaviti za određeno virtualno računalo.

Promijenimo veličinu automobila

Na primjer, promijenit ćemo veličinu na novu veličinu Standard_B1ls - on je na prvom mjestu na gornjoj listi. (U stvarnim aplikacijama, naravno, odabirete veličinu koju god želite.)

  1. Prvo pomoću naredbe Get-AzVM informacije o našem objektu (virtualnom stroju) dobivamo pohranjujući ih u varijablu $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Zatim uzimamo vlasništvo od ovog objekta .HardwareProfile.VmSize i postavite željenu novu vrijednost:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Sada jednostavno izvršavamo naredbu VM update - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Brinemo se da je sve prošlo dobro - da bismo to učinili, ponovno tražimo informacije o našem objektu i pregledavamo nekretninu $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ako tamo vidimo Standard_B1ls - to znači da je sve u redu, veličina automobila je promijenjena. Možete ići dalje i graditi na svom uspjehu mijenjanjem veličine nekoliko VM-ova odjednom pomoću polja.

Što je s brisanjem VM-a u Azureu?

S brisanjem nije sve tako jednostavno i jednostavno kao što se čini. Uostalom, potrebno je ukloniti brojne resurse povezane s ovim strojem, uključujući:

  • Spremnici za pohranu dijagnostike pokretanja
  • Mrežna sučelja
  • Javne IP adrese
  • Sistemski disk i blob gdje je pohranjen njegov status
  • Podatkovni diskovi

Stoga ćemo kreirati funkciju i pozvati je Remove-AzrVirtualMachine - i to će izbrisati ne samo Azure VM, već i sve gore navedeno.

Idemo standardnim putem i prvo dobivamo naš objekt (VM) pomoću naredbe Get-AzVm. Na primjer, neka to bude auto WINSRV19 iz grupe resursa MyTestVMs.

Spremimo ovaj objekt zajedno sa svim njegovim svojstvima u varijablu $vm:

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

Uklanjanje spremnika s dijagnostičkim datotekama za pokretanje

Prilikom izrade VM-a u Azureu, od korisnika se također traži da kreira spremnik za pohranjivanje dijagnostike pokretanja (boot diagnostics container), tako da se u slučaju problema s pokretanjem ima nešto obratiti za rješavanje problema. Međutim, kada se VM izbriše, ovaj spremnik ostaje da nastavi svoje sada besmisleno postojanje. Popravimo ovu situaciju.

  1. Prvo, saznajmo kojem računu za pohranu pripada ovaj spremnik - za ovo moramo pronaći svojstvo storageUri u utrobi objekta DiagnosticsProfile naš VM. Za ovo koristim ovaj regularni izraz:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Sada morate saznati naziv spremnika, a za to trebate dobiti VM ID pomoću naredbe 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. Zatim dobivamo naziv grupe resursa kojoj spremnik pripada:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. I sada imamo sve što nam je potrebno za brisanje spremnika s naredbom Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Uklanjanje VM-a

Sada izbrišite sam virtualni stroj, budući da smo već stvorili varijablu $vm za odgovarajući objekt. Pa, pokrenimo naredbu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Uklanjanje mrežnog sučelja i javne IP adrese

Naš VM još uvijek ima jedno (ili čak nekoliko) mrežnih sučelja (NIC) - da ih uklonimo kao nepotrebne, prođimo kroz svojstvo NetworkInterfaces naš VM objekt i izbrišite NIC s naredbom Remove-AzNetworkInterface. U slučaju da postoji više od jednog mrežnog sučelja, koristimo petlju. U isto vrijeme, za svaki NIC provjerit ćemo imovinu IpConfiguration kako biste utvrdili ima li sučelje javnu IP adresu. Ako se pronađe, uklonit ćemo ga naredbom Remove-AzPublicIpAddress.

Evo primjera upravo takvog koda, gdje pregledavamo sve NIC-ove u petlji, brišemo ih i provjeravamo postoji li javni IP. Ako postoji, analizirajte svojstvo PublicIpAddress, pronađite naziv odgovarajućeg izvora prema ID-u i izbrišite ga:


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
        }
    }
}

Uklanjanje sistemskog diska

OS disk je blob, za koji postoji naredba za brisanje Remove-AzStorageBlob - ali prije nego što ga izvršite, morat ćete postaviti potrebne vrijednosti za njegove parametre. Da biste to učinili, posebno morate dobiti naziv spremnika za pohranu koji sadrži sistemski disk, a zatim ga proslijediti ovoj naredbi zajedno s odgovarajućim računom za pohranu.

$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]

Uklanjanje statusne mrlje diska sustava

Da bismo to učinili, kao što ste vjerojatno već pogodili, uzimamo spremnik za pohranu u kojem je ovaj disk pohranjen i, implicirajući da mrlja na kraju sadrži status, proslijedite odgovarajuće parametre naredbi za brisanje Remove-AzStorageBlob:

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

I na kraju uklanjamo podatkovne diskove

Naš VM još uvijek može imati diskove s podacima koji su mu priloženi. Ako nisu potrebni, i njih ćemo izbrisati. Prvo raščlanimo StorageProfile naš VM i pronađite nekretninu Uri. Ako postoji nekoliko diskova, organiziramo ciklus prema URI. Za svaki URI pronaći ćemo odgovarajući račun za pohranu pomoću Get-AzStorageAccount. Zatim raščlanite URI za pohranu da izdvojite željeni naziv bloba i proslijedite ga naredbi za brisanje Remove-AzStorageBlob zajedno s računom za pohranu. Ovako bi to izgledalo u kodu:

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]
    }
}

I sada "stigli smo sretan kraj!" Sada moramo sastaviti jednu cjelinu od svih tih fragmenata. Ljubazni autor Adam Bertram izašao je u susret korisnicima i sam to učinio. Ovdje je poveznica na konačnu skriptu tzv Ukloni-AzrVirtualMachine.ps1:

GitHub

Nadam se da će vam ovi praktični savjeti pomoći da uštedite trud, vrijeme i novac pri radu s Azure VM-ovima.

Izvor: www.habr.com

Dodajte komentar