Spreminjanje in brisanje navideznih računalnikov Azure z lupino PowerShell

Z uporabo PowerShell inženirji in skrbniki IT uspešno avtomatizirajo različne naloge pri delu ne samo z lokalnimi, ampak tudi z infrastrukturami v oblaku, zlasti z Azure. V nekaterih primerih je delo prek lupine PowerShell veliko bolj priročno in hitrejše kot delo prek portala Azure. Zaradi svoje večplatformske narave je PowerShell mogoče uporabljati v katerem koli operacijskem sistemu.

Ne glede na to, ali uporabljate Ubuntu, Red Hat ali Windows, vam PowerShell lahko pomaga nadzorovati vire v oblaku. Uporaba modula Azure PowerShell, lahko na primer nastavite poljubne lastnosti virtualnih strojev.

V tem članku si bomo ogledali, kako lahko uporabite lupino PowerShell za spreminjanje velikosti VM v oblaku Azure ter brisanje VM in z njim povezanih objektov.

Spreminjanje in brisanje navideznih računalnikov Azure z lupino PowerShell

Pomembno! Ne pozabite si obrisati rok z razkužilom, da se pripravite na delo:

  • Potrebovali boste modul Modul Azure PowerShell - lahko ga prenesete iz galerije PowerShell z ukazom Install-Module Az.
  • Preveriti morate v oblaku Azure, kjer se izvaja virtualni stroj, tako da zaženete ukaz Connect-AzAccount.

Najprej ustvarimo skript, ki bo spremenil velikost Azure VM. Odprimo kodo VS in shranimo nov skript PowerShell, imenovan Resize-AzVirtualMachine.ps1 — med napredovanjem primera mu bomo dodajali dele kode.

Zahtevamo razpoložljive velikosti VM

Preden spremenite velikost VM, morate ugotoviti, katere so sprejemljive velikosti za virtualne stroje v oblaku Azure. Če želite to narediti, morate zagnati ukaz Get-AzVMSize.

Torej za virtualni stroj devvm01 iz skupine virov dev Zahtevamo vse možne sprejemljive velikosti:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(V resničnih težavah seveda namesto ResourceGroupName=dev и VMName=devvm01 določili boste svoje vrednosti za te parametre.)

Ukaz bo vrnil nekaj takega:

Spreminjanje in brisanje navideznih računalnikov Azure z lupino PowerShell

To so vse možne možnosti velikosti, ki jih je mogoče nastaviti za določen virtualni stroj.

Spremenimo velikost avtomobila

Na primer, spremenili bomo velikost na novo velikost Standard_B1ls - je na prvem mestu na zgornjem seznamu. (V aplikacijah v resničnem življenju seveda izberete poljubno velikost, ki jo potrebujete.)

  1. Najprej uporabite ukaz Get-AzVM informacije o našem objektu (virtualnem stroju) dobimo tako, da jih shranimo v spremenljivko $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Nato temu predmetu vzamemo lastnino .HardwareProfile.VmSize in nastavite želeno novo vrednost:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. In zdaj preprosto izvedemo ukaz za posodobitev VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Poskrbimo, da je vse potekalo dobro - za to ponovno zahtevamo podatke o našem objektu in si ogledamo nepremičnino $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Če tam vidimo Standard_B1ls - to pomeni, da je vse v redu, velikost avtomobila je bila spremenjena. Lahko greste dlje in nadgrajujete svoj uspeh s spreminjanjem velikosti več navideznih strojev hkrati z uporabo matrike.

Kaj pa brisanje VM v Azure?

Pri brisanju ni vse tako preprosto in preprosto, kot se morda zdi. Navsezadnje je treba odstraniti številne vire, povezane s tem strojem, vključno z:

  • Zabojniki za shranjevanje diagnostike zagona
  • Omrežni vmesniki
  • Javni naslovi IP
  • Sistemski disk in blob, kjer je shranjeno njegovo stanje
  • Podatkovni diski

Zato bomo ustvarili funkcijo in jo poklicali Remove-AzrVirtualMachine - in izbrisal bo ne samo Azure VM, ampak tudi vse zgoraj našteto.

Gremo na standardni način in najprej dobimo naš objekt (VM) z ukazom Get-AzVm. Na primer, naj bo avto WINSRV19 iz skupine virov MyTestVMs.

Shranimo ta objekt skupaj z vsemi njegovimi lastnostmi v spremenljivko $vm:

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

Odstranjevanje vsebnika z zagonskimi diagnostičnimi datotekami

Pri ustvarjanju VM v Azure se od uporabnika zahteva tudi, da ustvari vsebnik za shranjevanje zagonske diagnostike (boot diagnostics container), tako da se v primeru težav z zagonom lahko obrne na kaj za odpravljanje težav. Ko pa je VM izbrisan, ostane ta vsebnik, da nadaljuje svoj zdaj nesmiselni obstoj. Popravimo to situacijo.

  1. Najprej ugotovimo, kateremu računu za shranjevanje pripada ta vsebnik – za to moramo poiskati lastnost storageUri v črevesju predmeta DiagnosticsProfile naš VM. Za to uporabljam ta regularni izraz:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Zdaj morate ugotoviti ime vsebnika in za to morate pridobiti ID VM z ukazom 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. Nato dobimo ime skupine virov, ki ji vsebnik pripada:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. In zdaj imamo vse, kar potrebujemo za brisanje vsebnika z ukazom Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Odstranjevanje VM

Zdaj pa izbrišemo sam virtualni stroj, saj smo že ustvarili spremenljivko $vm za ustrezni objekt. No, zaženimo ukaz Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Odstranitev omrežnega vmesnika in javnega naslova IP

Naš VM še vedno ima enega (ali celo več) omrežnih vmesnikov (NIC) - če jih želimo odstraniti kot nepotrebne, pojdimo skozi lastnost NetworkInterfaces naš objekt VM in izbrišite omrežno kartico z ukazom Remove-AzNetworkInterface. V primeru, da je omrežnih vmesnikov več, uporabimo zanko. Hkrati bomo za vsako NIC preverili lastnino IpConfiguration da ugotovite, ali ima vmesnik javni naslov IP. Če ga najdemo, ga odstranimo z ukazom Remove-AzPublicIpAddress.

Tukaj je primer takšne kode, kjer v zanki pregledamo vse NIC-je, jih izbrišemo in preverimo, ali obstaja javni IP. Če obstaja, razčlenite lastnost PublicIpAddress, poiščite ime ustreznega vira po ID-ju in ga izbrišite:


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

Odstranjevanje sistemskega diska

Disk OS je blob, za katerega obstaja ukaz za brisanje Remove-AzStorageBlob - vendar preden ga izvedete, boste morali nastaviti zahtevane vrednosti za njegove parametre. Če želite to narediti, morate predvsem pridobiti ime vsebnika za shranjevanje, ki vsebuje sistemski disk, in ga nato posredovati temu ukazu skupaj z ustreznim računom za shranjevanje.

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

Odstranjevanje bloba stanja sistemskega diska

Da bi to naredili, kot ste verjetno že uganili, vzamemo vsebnik za shranjevanje, v katerem je shranjen ta disk, in, kar pomeni, da blob na koncu vsebuje status, posredujte ustrezne parametre ukazu za brisanje Remove-AzStorageBlob:

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

In končno odstranimo podatkovne diske

Naš VM bi lahko še vedno imel diske s podatki, ki so mu bili priloženi. Če jih ne potrebujemo, jih bomo tudi izbrisali. Najprej ga razčlenimo StorageProfile naš VM in poiščite nepremičnino Uri. Če je diskov več, organiziramo cikel glede na URI. Za vsak URI bomo našli ustrezni račun za shranjevanje z uporabo Get-AzStorageAccount. Nato razčlenite URI shranjevanja, da izvlečete želeno ime bloba in ga posredujete ukazu za brisanje Remove-AzStorageBlob skupaj z računom za shranjevanje. Tako bi izgledalo v kodi:

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

In zdaj "smo dosegli srečen konec!" Zdaj moramo iz vseh teh drobcev sestaviti eno celoto. Prijazni avtor Adam Bertram se je uporabnikom srečal na pol poti in to naredil sam. Tukaj je povezava do končnega skripta, imenovanega Odstrani-AzrVirtualMachine.ps1:

GitHub

Upam, da vam bodo ti praktični nasveti v pomoč pri prihranku truda, časa in denarja pri delu z navideznimi stroji Azure.

Vir: www.habr.com

Dodaj komentar