Breyta og eyða Azure VMs með PowerShell

Með því að nota PowerShell, gera verkfræðingar og upplýsingatæknistjórar sjálfvirkan árangur af ýmsum verkefnum þegar þeir vinna ekki aðeins með innviði á staðnum heldur einnig með skýjainnviði, sérstaklega með Azure. Í sumum tilfellum er mun þægilegra og hraðari að vinna í gegnum PowerShell en að vinna í gegnum Azure gáttina. Þökk sé þverpallaeðli er hægt að nota PowerShell á hvaða stýrikerfi sem er.

Hvort sem þú ert að keyra Ubuntu, Red Hat eða Windows getur PowerShell hjálpað þér að stjórna skýjaauðlindunum þínum. Að nota eininguna Azure PowerShell, til dæmis, þú getur stillt hvaða eiginleika sýndarvélar sem er.

Í þessari grein munum við skoða hvernig þú getur notað PowerShell til að breyta stærð VM í Azure skýinu, auk þess að eyða VM og tengdum hlutum þess.

Breyta og eyða Azure VMs með PowerShell

Mikilvægt! Ekki gleyma að þurrka hendurnar með sótthreinsiefni til að undirbúa vinnuna:

  • Þú þarft einingu Azure PowerShell Module - það er hægt að hlaða niður frá PowerShell Gallery með skipuninni Install-Module Az.
  • Þú þarft að auðkenna í Azure skýinu þar sem sýndarvélin er í gangi með því að keyra skipunina Connect-AzAccount.

Fyrst skulum við búa til handrit sem mun breyta stærð Azure VM. Við skulum opna VS kóða og vista nýtt PowerShell skriftu sem heitir Resize-AzVirtualMachine.ps1 — við munum bæta kóða við það eftir því sem dæmið þróast.

Við óskum eftir tiltækum VM stærðum

Áður en þú breytir VM stærðinni þarftu að komast að því hverjar ásættanlegar stærðir eru fyrir sýndarvélar í Azure skýinu. Til að gera þetta þarftu að keyra skipunina Get-AzVMSize.

Svo fyrir sýndarvélina devvm01 frá auðlindahópi dev Við óskum eftir öllum mögulegum viðunandi stærðum:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Í raunverulegum vandamálum, auðvitað, í staðinn fyrir ResourceGroupName=dev и VMName=devvm01 þú munt tilgreina eigin gildi fyrir þessar breytur.)

Skipunin mun skila eitthvað á þessa leið:

Breyta og eyða Azure VMs með PowerShell

Þetta eru allt mögulegir stærðarvalkostir sem hægt er að stilla fyrir tiltekna sýndarvél.

Við skulum breyta stærð bílsins

Til dæmis munum við breyta stærð í nýja stærð Standard_B1ls - hann er í fyrsta sæti á listanum hér að ofan. (Í raunverulegum forritum velurðu auðvitað hvaða stærð sem þú þarft.)

  1. Notaðu fyrst skipunina Get-AzVM við fáum upplýsingar um hlutinn okkar (sýndarvél) með því að geyma hann í breytu $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Síðan tökum við eignina af þessum hlut .HardwareProfile.VmSize og stilltu nýtt gildi sem þú vilt:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Og nú keyrum við einfaldlega VM uppfærsluskipunina - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Við sjáum til þess að allt hafi gengið vel - til að gera þetta óskum við aftur eftir upplýsingum um hlut okkar og skoðum eignina $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ef við sjáum þar Standard_B1ls - það þýðir að allt er í lagi, stærð bílsins hefur verið breytt. Þú getur gengið lengra og byggt á árangri þínum með því að breyta stærð nokkurra VM í einu með því að nota fylki.

Hvað með að eyða VM í Azure?

Með eyðingu er ekki allt eins einfalt og einfalt og það kann að virðast. Þegar öllu er á botninn hvolft er nauðsynlegt að fjarlægja fjölda auðlinda sem tengjast þessari vél, þar á meðal:

  • Geymsluílát fyrir ræsigreiningar
  • Netviðmót
  • Opinber IP tölur
  • Kerfisdiskur og kubb þar sem staða hans er geymd
  • Gagnadiskar

Þess vegna munum við búa til fall og kalla það Remove-AzrVirtualMachine - og það mun eyða ekki aðeins Azure VM, heldur einnig öllu ofangreindu.

Við förum venjulega leiðina og fáum fyrst hlutinn okkar (VM) með því að nota skipunina Get-AzVm. Láttu það til dæmis vera bíll WINSRV19 frá auðlindahópi MyTestVMs.

Við skulum vista þennan hlut ásamt öllum eiginleikum hans í breytu $vm:

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

Fjarlægir ílátið með ræsigreiningarskrám

Þegar VM er búið til í Azure er notandinn einnig beðinn um að búa til gám til að geyma ræsigreiningu (boot diagnostics gámur), þannig að ef vandamál koma upp við ræsingu er eitthvað til að leita til við bilanaleit. Hins vegar, þegar VM er eytt, er þessi gámur látinn halda áfram tilgangslausri tilveru sinni. Við skulum laga þetta ástand.

  1. Fyrst skulum við komast að hvaða geymslureikningi þessi gámur tilheyrir - til þess þurfum við að finna eignina storageUri í iðrum hlutarins DiagnosticsProfile VM okkar. Fyrir þetta nota ég þessa reglulegu tjáningu:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Nú þarftu að finna út nafnið á ílátinu og til þess þarftu að fá VM ID með skipuninni 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. Næst fáum við nafn auðlindahópsins sem gámurinn tilheyrir:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Og nú höfum við allt sem við þurfum til að eyða ílátinu með skipuninni Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Fjarlægir VM

Nú skulum við eyða sýndarvélinni sjálfri þar sem við höfum þegar búið til breytu $vm fyrir samsvarandi hlut. Jæja, við skulum keyra skipunina Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Fjarlægir netviðmótið og opinbera IP tölu

VM okkar hefur enn eitt (eða jafnvel nokkur) netviðmót (NIC) - til að fjarlægja þau sem óþörf skulum við fara í gegnum eignina NetworkInterfaces VM hlutnum okkar og eyða NIC með skipuninni Remove-AzNetworkInterface. Ef það eru fleiri en eitt netviðmót notum við lykkju. Á sama tíma munum við athuga eignina fyrir hvert NIC IpConfiguration til að ákvarða hvort viðmótið hafi opinbera IP tölu. Ef einn finnst munum við fjarlægja hann með skipuninni Remove-AzPublicIpAddress.

Hér er dæmi um einmitt slíkan kóða, þar sem við skoðum öll NIC í lykkju, eyðum þeim og athugum hvort það sé til opinber IP. Ef það er til, þá flokka eignina PublicIpAddress, finndu nafn samsvarandi tilföngs eftir auðkenni og eyddu því:


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

Fjarlægir kerfisdiskinn

Stýrikerfisdiskurinn er klumpur, sem það er skipun fyrir til að eyða honum Remove-AzStorageBlob - en áður en þú keyrir það þarftu að stilla nauðsynleg gildi fyrir færibreytur þess. Til að gera þetta, sérstaklega, þarftu að fá nafn geymsluílátsins sem inniheldur kerfisdiskinn og senda það síðan í þessa skipun ásamt samsvarandi geymslureikningi.

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

Fjarlægir System Disk Status Blob

Til að gera þetta, eins og þú hefur sennilega þegar giskað á, tökum við geymsluílátið sem þessi diskur er geymdur í og ​​gefur til kynna að kubburinn í lokin innihaldi status, sendu samsvarandi færibreytur í eyða skipunina Remove-AzStorageBlob:

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

Og að lokum fjarlægjum við gagnadiskana

VM okkar gæti samt verið með diska með gögnum sem voru tengd við það. Ef þeirra er ekki þörf, munum við eyða þeim líka. Við skulum flokka það fyrst StorageProfile VM okkar og finndu eignina Uri. Ef það eru nokkrir diskar skipuleggjum við lotu skv URI. Fyrir hverja URI finnum við samsvarandi geymslureikning með því að nota Get-AzStorageAccount. Þáttaðu síðan geymslu-URI til að draga út viðeigandi blob-heiti og sendu það til eyða skipunarinnar Remove-AzStorageBlob ásamt geymslureikningi. Svona myndi það líta út í kóða:

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

Og nú „höfum við náð hamingjusömum endalokum“! Nú þurfum við að setja saman eina heild úr öllum þessum brotum. Rithöfundurinn góði Adam Bertram hitti notendurna á miðri leið og gerði það sjálfur. Hér er hlekkur á lokahandritið sem heitir Remove-AzrVirtualMachine.ps1:

GitHub

Ég vona að þér finnist þessar hagnýtu ráðleggingar gagnlegar til að spara þér fyrirhöfn, tíma og peninga þegar þú vinnur með Azure VMs.

Heimild: www.habr.com

Bæta við athugasemd