Azure'i VM-ide muutmine ja kustutamine PowerShelli abil

PowerShelli abil automatiseerivad insenerid ja IT-administraatorid edukalt erinevaid ülesandeid, töötades mitte ainult kohapealsete, vaid ka pilveinfrastruktuuridega, eriti Azure'iga. Mõnel juhul on PowerShelli kaudu töötamine palju mugavam ja kiirem kui Azure'i portaali kaudu töötamine. Tänu oma platvormidevahelisele olemusele saab PowerShelli kasutada mis tahes operatsioonisüsteemis.

Olenemata sellest, kas kasutate Ubuntu, Red Hat või Windows, aitab PowerShell teil oma pilveressursse juhtida. Mooduli kasutamine Azure PowerShellNäiteks saate määrata virtuaalmasinate mis tahes atribuute.

Selles artiklis vaatleme, kuidas saate PowerShelli abil muuta Azure'i pilves oleva virtuaalse masina suurust ning kustutada virtuaalmasinat ja sellega seotud objekte.

Azure'i VM-ide muutmine ja kustutamine PowerShelli abil

Tähtis! Ärge unustage tööks valmistumiseks käsi desinfitseerimisvahendiga pühkida:

  • Teil on vaja moodulit Azure PowerShelli moodul - selle saab alla laadida PowerShelli galeriist käsuga Install-Module Az.
  • Peate autentima Azure'i pilves, kus virtuaalmasin töötab, käivitades käsu Connect-AzAccount.

Kõigepealt loome skripti, mis muudab Azure'i virtuaalse masina suurust. Avame VS Code ja salvestame uue PowerShelli skripti nimega Resize-AzVirtualMachine.ps1 — lisame näite edenedes sellele kooditükke.

Soovime saadaolevaid VM-i suurusi

Enne VM-i suuruse muutmist peate välja selgitama, millised on Azure'i pilves olevate virtuaalsete masinate jaoks vastuvõetavad suurused. Selleks peate käivitama käsu Get-AzVMSize.

Nii virtuaalmasina jaoks devvm01 ressursirühmast Dev Soovime kõiki võimalikke vastuvõetavaid suurusi:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Tegelike probleemide korral muidugi selle asemel ResourceGroupName=dev и VMName=devvm01 määrate nende parameetrite jaoks oma väärtused.)

Käsk tagastab midagi sellist:

Azure'i VM-ide muutmine ja kustutamine PowerShelli abil

Need on kõik võimalikud suurusevalikud, mida saab antud virtuaalmasina jaoks määrata.

Muudame auto suurust

Näiteks muudame suuruse uueks Standard_B1ls - ta on ülaltoodud nimekirjas esimesel kohal. (Tegelikes rakendustes valite loomulikult mis tahes suuruse, mida vajate.)

  1. Esmalt käsu kasutamine Get-AzVM saame informatsiooni oma objekti (virtuaalmasina) kohta, salvestades selle muutujasse $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Siis võtame sellelt objektilt kinnistu .HardwareProfile.VmSize ja määrake soovitud uus väärtus:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ja nüüd täidame lihtsalt VM-i värskenduskäsu - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Veendume, et kõik sujus - selleks küsime taas infot oma objekti kohta ja vaatame kinnisvara üle $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Kui me seal näeme Standard_B1ls - see tähendab, et kõik on korras, auto suurust on muudetud. Saate minna kaugemale ja oma edule tugineda, muutes massiivi abil korraga mitme virtuaalse masina suurust.

Aga VM-i kustutamine Azure'is?

Kustutamise korral pole kõik nii lihtne ja arusaadav, kui võib tunduda. Lõppude lõpuks on vaja eemaldada mitu selle masinaga seotud ressurssi, sealhulgas:

  • Alglaadimisdiagnostika salvestuskonteinerid
  • Võrgu liidesed
  • Avalikud IP-aadressid
  • Süsteemi ketas ja blob, kuhu selle olek on salvestatud
  • Andmekettad

Seetõttu loome funktsiooni ja kutsume selle välja Remove-AzrVirtualMachine - ja see kustutab mitte ainult Azure VM-i, vaid ka kõik ülalmainitu.

Me läheme tavapärast teed ja hankime kõigepealt käsu abil oma objekti (VM). Get-AzVm. Näiteks olgu selleks auto WINSRV19 ressursirühmast MyTestVM-id.

Salvestame selle objekti koos kõigi selle omadustega muutujasse $vm:

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

Alglaadimisdiagnostika failidega konteineri eemaldamine

Azure'is VM-i loomisel palutakse kasutajal luua ka alglaadimisdiagnostika salvestamiseks konteiner (boot Diagnoss konteiner), et kui alglaadimisel on probleeme, siis oleks mille poole pöörduda tõrkeotsinguks. Kui aga VM kustutatakse, jääb see konteiner oma praegu sihitut eksisteerimist jätkama. Parandame selle olukorra.

  1. Kõigepealt uurime, millisele salvestuskontole see konteiner kuulub – selleks peame leidma vara storageUri objekti soolestikus DiagnosticsProfile meie VM. Selleks kasutan regulaaravaldist:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Nüüd peate välja selgitama konteineri nime ja selleks peate käsu abil saama 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. Järgmisena saame selle ressursirühma nime, kuhu konteiner kuulub:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ja nüüd on meil kõik, mida vajame konteineri kustutamiseks käsuga Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM-i eemaldamine

Nüüd kustutame virtuaalse masina enda, kuna oleme juba muutuja loonud $vm vastava objekti jaoks. Noh, käivitame käsu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Võrguliidese ja avaliku IP-aadressi eemaldamine

Meie VM-il on endiselt üks (või isegi mitu) võrguliidest (NIC) – et need mittevajalikena eemaldada, tutvume atribuudiga NetworkInterfaces meie VM-objekti ja kustutage NIC käsuga Remove-AzNetworkInterface. Kui võrguliideseid on rohkem kui üks, kasutame silmust. Samal ajal kontrollime iga võrgukaarti vara IpConfiguration et teha kindlaks, kas liidesel on avalik IP-aadress. Kui selline leitakse, eemaldame selle käsuga Remove-AzPublicIpAddress.

Siin on näide just sellisest koodist, kus vaatame tsüklis läbi kõik NIC-id, kustutame need ja kontrollime, kas seal on avalik IP. Kui on, siis sõeluge vara PublicIpAddress, leidke ID järgi vastava ressursi nimi ja kustutage see:


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

Süsteemiketta eemaldamine

OS-i ketas on blob, mille kustutamiseks on käsk Remove-AzStorageBlob - kuid enne selle käivitamist peate määrama selle parameetrite jaoks vajalikud väärtused. Selleks peate hankima süsteemiketast sisaldava salvestuskonteineri nime ja seejärel edastama selle sellele käsule koos vastava salvestuskontoga.

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

Süsteemiketta olekuploki eemaldamine

Selleks, nagu arvatavasti juba arvasite, võtame salvestusmahuti, kuhu see ketas on salvestatud, ja tähendab, et lõpus olev plekk sisaldab status, edastage vastavad parameetrid kustutamiskäsku Remove-AzStorageBlob:

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

Ja lõpuks eemaldame andmekettad

Meie virtuaalmasinal võib endiselt olla kettaid andmetega, mis olid sellele lisatud. Kui neid pole vaja, kustutame ka need. Esmalt analüüsime seda StorageProfile meie VM ja leidke kinnisvara Uri. Kui plaate on mitu, korraldame tsükli vastavalt URI. Iga URI jaoks leiame vastava salvestuskonto, kasutades Get-AzStorageAccount. Seejärel sõeluge salvestusruumi URI, et eraldada soovitud blobi nimi ja edastada see kustutamiskäsule Remove-AzStorageBlob koos salvestuskontoga. See näeks koodis välja selline:

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

Ja nüüd "oleme jõudnud õnneliku lõpuni!" Nüüd peame kõigist nendest fragmentidest kokku panema ühtse terviku. Lahke autor Adam Bertram tuli kasutajatele poolel teel vastu ja tegi seda ise. Siin on link lõplikule skriptile nimega Eemalda-AzrVirtualMachine.ps1:

GitHub

Loodan, et need praktilised näpunäited aitavad säästa teie vaeva, aega ja raha, kui töötate Azure'i VM-idega.

Allikas: www.habr.com

Lisa kommentaar