Azure VM keitimas ir ištrynimas naudojant PowerShell

Naudodami „PowerShell“, inžinieriai ir IT administratoriai sėkmingai automatizuoja įvairias užduotis dirbdami ne tik su vietinėmis, bet ir su debesų infrastruktūromis, ypač su „Azure“. Kai kuriais atvejais dirbti naudojant „PowerShell“ yra daug patogiau ir greičiau nei naudojant „Azure“ portalą. Dėl savo kelių platformų pobūdžio „PowerShell“ gali būti naudojamas bet kurioje operacinėje sistemoje.

Nesvarbu, ar naudojate „Ubuntu“, „Red Hat“ ar „Windows“, „PowerShell“ gali padėti valdyti debesies išteklius. Naudojant modulį Azure PowerShell, pavyzdžiui, galite nustatyti bet kokias virtualių mašinų savybes.

Šiame straipsnyje apžvelgsime, kaip galite naudoti „PowerShell“, norėdami pakeisti „Azure“ debesyje esančios VM dydį, taip pat ištrinti VM ir su ja susijusius objektus.

Azure VM keitimas ir ištrynimas naudojant PowerShell

Svarbu! Nepamirškite nusišluostyti rankų dezinfekavimo priemone, kad pasiruoštumėte darbui:

  • Jums reikės modulio Azure PowerShell modulis - jį galima atsisiųsti iš PowerShell galerijos su komanda Install-Module Az.
  • Turite autentifikuoti „Azure“ debesyje, kur veikia virtualioji mašina, vykdydami komandą Connect-AzAccount.

Pirmiausia sukurkime scenarijų, kuris pakeis Azure VM dydį. Atidarykime „VS Code“ ir išsaugokime naują „PowerShell“ scenarijų Resize-AzVirtualMachine.ps1 — Vykstant pavyzdžiui, prie jo pridėsime kodo dalis.

Mes prašome galimų VM dydžių

Prieš keisdami VM dydį, turite išsiaiškinti, kokie yra priimtini virtualių mašinų dydžiai Azure debesyje. Norėdami tai padaryti, turite paleisti komandą Get-AzVMSize.

Taigi virtualiai mašinai devvm01 iš išteklių grupės dev Mes prašome visų galimų priimtinų dydžių:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Žinoma, tikrose problemose vietoj ResourceGroupName=dev и VMName=devvm01 nurodysite savo šių parametrų reikšmes.)

Komanda grąžins maždaug taip:

Azure VM keitimas ir ištrynimas naudojant PowerShell

Tai visos galimos dydžio parinktys, kurias galima nustatyti konkrečiai virtualiai mašinai.

Pakeiskime automobilio dydį

Pavyzdžiui, pakeisime dydį į naują Standartinis_B1ls - jis yra pirmoje vietoje aukščiau esančiame sąraše. (Žinoma, realiame gyvenime pasirenkate bet kokį jums reikalingą dydį.)

  1. Pirmiausia naudokite komandą Get-AzVM informaciją apie savo objektą (virtualią mašiną) gauname išsaugodami ją kintamajame $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Tada paimame turtą iš šio objekto .HardwareProfile.VmSize ir nustatykite norimą naują reikšmę:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ir dabar mes tiesiog vykdome VM atnaujinimo komandą - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Įsitikiname, kad viskas klostėsi gerai – norėdami tai padaryti, vėl prašome informacijos apie mūsų objektą ir apžiūrime turtą $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Jei ten pamatysime Standartinis_B1ls - tai reiškia, kad viskas tvarkoje, pakeistas automobilio dydis. Galite žengti toliau ir remtis savo sėkme pakeisdami kelių virtualių mašinų dydį iš karto naudodami masyvą.

O kaip ištrinti VM „Azure“?

Ištrynus ne viskas taip paprasta ir aišku, kaip gali atrodyti. Galų gale, būtina pašalinti daugybę su šia mašina susijusių išteklių, įskaitant:

  • Įkrovos diagnostikos saugojimo konteineriai
  • Tinklo sąsajos
  • Viešieji IP adresai
  • Sistemos diskas ir blobas, kuriame saugoma jo būsena
  • Duomenų diskai

Todėl sukursime funkciją ir ją iškviesime Remove-AzrVirtualMachine - ir ištrins ne tik „Azure VM“, bet ir visa tai, kas paminėta aukščiau.

Einame standartiniu keliu ir pirmiausia gauname objektą (VM) naudodami komandą Get-AzVm. Pavyzdžiui, tegul tai būna automobilis WINSRV19 iš išteklių grupės MyTestVM.

Išsaugokime šį objektą su visomis jo savybėmis į kintamąjį $vm:

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

Pašalinamas konteineris su įkrovos diagnostikos failais

Kuriant VM Azure, vartotojo taip pat prašoma sukurti talpyklą įkrovos diagnostikai saugoti (įkrovos diagnostikos konteinerį), kad kilus problemų paleidžiant būtų į ką kreiptis dėl trikčių šalinimo. Tačiau ištrynus VM, šis konteineris paliekamas tęsti savo dabar beprasmišką egzistavimą. Ištaisykime šią situaciją.

  1. Pirmiausia išsiaiškinkime, kuriai saugyklos paskyrai priklauso šis konteineris – tam turime rasti nuosavybę storageUri objekto žarnyne DiagnosticsProfile mūsų VM. Tam naudoju šią reguliariąją išraišką:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Dabar turite sužinoti konteinerio pavadinimą, o tam naudodami komandą turite gauti VM ID 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. Tada gauname išteklių grupės, kuriai priklauso konteineris, pavadinimą:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ir dabar turime viską, ko reikia norint ištrinti konteinerį su komanda Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM pašalinimas

Dabar ištrinkite pačią virtualią mašiną, nes jau sukūrėme kintamąjį $vm atitinkamam objektui. Na, paleiskite komandą Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Pašalinkite tinklo sąsają ir viešąjį IP adresą

Mūsų VM vis dar turi vieną (ar net kelias) tinklo sąsajas (NIC) – norėdami jas pašalinti kaip nereikalingas, pereikime prie nuosavybės NetworkInterfaces mūsų VM objektą ir ištrinkite NIC naudodami komandą Remove-AzNetworkInterface. Jei yra daugiau nei viena tinklo sąsaja, naudojame kilpą. Tuo pačiu metu kiekvienam NIC patikrinsime turtą IpConfiguration nustatyti, ar sąsaja turi viešą IP adresą. Jei toks bus rastas, pašalinsime jį komanda Remove-AzPublicIpAddress.

Štai tokio kodo pavyzdys, kai peržiūrime visus NIC, juos ištriname ir patikriname, ar yra viešas IP. Jei yra, analizuokite nuosavybę PublicIpAddress, suraskite atitinkamo šaltinio pavadinimą pagal ID ir ištrinkite:


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

Sistemos disko pašalinimas

OS diskas yra dėmė, kuriai yra komanda jį ištrinti Remove-AzStorageBlob - bet prieš jį vykdydami turėsite nustatyti reikiamas jo parametrų reikšmes. Norėdami tai padaryti, visų pirma turite gauti saugyklos, kurioje yra sistemos diskas, pavadinimą, tada perduoti jį šiai komandai kartu su atitinkama saugyklos paskyra.

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

Sistemos disko būsenos bloko pašalinimas

Norėdami tai padaryti, kaip tikriausiai jau atspėjote, paimame saugojimo talpyklą, kurioje saugomas šis diskas, ir tai reiškia, kad pabaigoje esančiame blobe yra status, perduokite atitinkamus parametrus trynimo komandai Remove-AzStorageBlob:

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

Ir galiausiai pašaliname duomenų diskus

Mūsų VM vis tiek gali turėti diskus su prie jo pridėtais duomenimis. Jei jie nereikalingi, juos taip pat ištrinsime. Pirmiausia išnagrinėkime StorageProfile mūsų VM ir suraskite turtą Uri. Jei yra keli diskai, organizuojame ciklą pagal URI. Kiekvienam URI rasime atitinkamą saugyklos paskyrą naudodami Get-AzStorageAccount. Tada išanalizuokite saugyklos URI, kad ištrauktumėte norimą blob pavadinimą ir perduokite jį trynimo komandai Remove-AzStorageBlob kartu su saugyklos paskyra. Štai kaip tai atrodytų kode:

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

Ir dabar "mes pasiekėme laimingą pabaigą!" Dabar iš visų šių fragmentų turime surinkti vieną visumą. Malonus autorius Adamas Bertramas sutiko vartotojus pusiaukelėje ir padarė tai pats. Čia yra nuoroda į galutinį scenarijų Remove-AzrVirtualMachine.ps1:

GitHub

Tikiuosi, kad šie praktiniai patarimai padės sutaupyti pastangų, laiko ir pinigų dirbant su „Azure“ virtualiosiomis mašinomis.

Šaltinis: www.habr.com

Добавить комментарий