Promijenite i uklonite Azure VM koristeći PowerShell

Koristeći PowerShell, inženjeri i IT administratori uspješno automatiziraju različite zadatke kada rade ne samo s lokalnim, već i sa cloud infrastrukturama, posebno s Azureom. U nekim slučajevima, rad preko PowerShell-a je mnogo praktičniji i brži od rada preko Azure portala. Zahvaljujući svojoj višeplatformskoj prirodi, PowerShell se može koristiti na bilo kojem operativnom sistemu.

Bilo da koristite Ubuntu, Red Hat ili Windows, PowerShell vam može pomoći da kontrolišete svoje resurse u oblaku. Korištenje modula Azure PowerShell, na primjer, možete postaviti bilo koja svojstva virtuelnih mašina.

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

Promijenite i uklonite Azure VM koristeći PowerShell

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

  • Trebat će vam modul Azure PowerShell modul - može se preuzeti iz PowerShell galerije pomoću naredbe Install-Module Az.
  • Potrebno je da se autentifikujete u Azure oblaku gde virtuelna mašina radi tako što ćete pokrenuti naredbu Connect-AzAccount.

Prvo, napravimo skriptu koja će promijeniti veličinu Azure VM-a. Otvorimo VS Code i spremimo novu PowerShell skriptu pod nazivom Resize-AzVirtualMachine.ps1 — dodaćemo mu delove koda kako primer bude napredovao.

Tražimo dostupne veličine VM-a

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

Dakle, za virtuelnu mašinu 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 odredit ćete vlastite vrijednosti za ove parametre.)

Naredba će vratiti nešto ovako:

Promijenite i uklonite Azure VM koristeći PowerShell

Ovo su sve moguće opcije veličine koje se mogu postaviti za datu virtuelnu mašinu.

Hajde da promenimo veličinu auta

Na primjer, promijenit ćemo veličinu na novu veličinu Standard_B1ls - on je na prvom mestu na gornjoj listi. (U stvarnim aplikacijama, naravno, birate bilo koju veličinu koja vam je potrebna.)

  1. Prvo koristeći komandu Get-AzVM dobijamo informacije o našem objektu (virtuelnoj mašini) pohranjivanjem u varijablu $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Zatim uzimamo svojstvo iz ovog objekta .HardwareProfile.VmSize i postavite željenu novu vrijednost:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. A sada jednostavno izvršavamo naredbu za ažuriranje VM-a - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Uvjeravamo se da je sve prošlo kako treba - da bismo to učinili, ponovo tražimo informacije o našem objektu i razgledamo nekretninu $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ako vidimo tamo Standard_B1ls - to znači da je sve u redu, veličina automobila je promijenjena. Možete ići dalje i nadograđivati ​​svoj uspjeh tako što ćete promijeniti veličinu nekoliko VM odjednom koristeći niz.

Šta je sa brisanjem VM-a u Azureu?

Sa brisanjem nije sve tako jednostavno i jasno kao što se čini. Uostalom, potrebno je ukloniti niz resursa povezanih s ovom mašinom, uključujući:

  • Kontejneri za pohranu dijagnostike pokretanja
  • Mrežni interfejsi
  • Javne IP adrese
  • Sistemski disk i blob gdje je pohranjen njegov status
  • Diskovi sa podacima

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 dobijemo naš objekat (VM) koristeći naredbu Get-AzVm. Na primjer, neka to bude auto WINSRV19 iz grupe resursa MyTestVMs.

Sačuvajmo ovaj objekat zajedno sa svim njegovim svojstvima u varijablu $vm:

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

Uklanjanje kontejnera sa dijagnostičkim datotekama za pokretanje

Prilikom kreiranja VM-a u Azureu, od korisnika se također traži da kreira spremnik za pohranjivanje dijagnostike pokretanja (kontejner dijagnostike pokretanja), tako da ako dođe do problema s pokretanjem, ima čemu da se obrati za rješavanje problema. Međutim, kada se VM izbriše, ovaj kontejner ostaje da nastavi svoje sada besmisleno postojanje. Hajde da popravimo ovu situaciju.

  1. Prvo, otkrijmo kojem nalogu za pohranu pripada ovaj kontejner - za to 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 ime kontejnera, 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 dobijamo ime grupe resursa kojoj kontejner pripada:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. I sada imamo sve što nam je potrebno da naredbom izbrišemo kontejner Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Uklanjanje VM-a

Sada izbrišemo samu virtuelnu mašinu, pošto smo već kreirali varijablu $vm za odgovarajući objekat. Pa, pokrenimo komandu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Uklanjanje mrežnog interfejsa 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 objekat i naredbom izbrišite NIC Remove-AzNetworkInterface. U slučaju da postoji više od jednog mrežnog interfejsa, koristimo petlju. U isto vrijeme, za svaki NIC ćemo provjeriti imovinu IpConfiguration da odredite da li interfejs ima javnu IP adresu. Ako se pronađe, mi ćemo ga ukloniti naredbom Remove-AzPublicIpAddress.

Evo primjera upravo takvog koda, gdje pregledavamo sve NIC-ove u petlji, brišemo ih i provjeravamo da li postoji javna IP adresa. Ako postoji, onda analizirajte svojstvo PublicIpAddress, pronađite naziv odgovarajućeg resursa po ID-u i obriš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 ime spremnika za pohranu koji sadrži sistemski disk, a zatim ga proslijediti ovoj komandi zajedno sa odgovarajućim nalogom za skladištenje.

$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 Bloba statusa sistemskog diska

Da bismo to učinili, kao što ste vjerovatno već pretpostavili, uzimamo spremnik za pohranu u kojem je pohranjen ovaj disk, i, podrazumijevajući da blob na kraju sadrži status, proslijediti odgovarajuće parametre naredbi za brisanje Remove-AzStorageBlob:

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

I na kraju uklanjamo diskove sa podacima

Naš VM bi još uvijek mogao imati diskove s podacima koji su mu bili pridruženi. Ako nisu potrebni, i njih ćemo izbrisati. Hajde da ga prvo raščlanimo StorageProfile naš VM i pronađite nekretninu Uri. Ako postoji nekoliko diskova, organiziramo ciklus prema URI. Za svaki URI ćemo pronaći odgovarajući račun za pohranu koji koristi Get-AzStorageAccount. Zatim raščlanite URI za skladištenje da biste izdvojili željeno ime blob-a i prosledili ga naredbi za brisanje Remove-AzStorageBlob zajedno sa nalogom za skladištenje. 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]
    }
}

A sada "došli smo do srećnog kraja!" Sada moramo sastaviti jednu celinu od svih ovih fragmenata. Ljubazni autor Adam Bertram upoznao je korisnike na pola puta i to sam uradio. Evo linka do konačne skripte pod nazivom Remove-AzrVirtualMachine.ps1:

GitHub

Nadam se da će vam ovi praktični savjeti pomoći u uštedi truda, vremena i novca pri radu s Azure VM-ovima.

izvor: www.habr.com

Dodajte komentar