Úprava a odstránenie virtuálnych počítačov Azure pomocou PowerShell

Pomocou PowerShell inžinieri a IT administrátori úspešne automatizujú rôzne úlohy pri práci nielen s on-premise, ale aj s cloud infraštruktúrami, najmä s Azure. V niektorých prípadoch je práca cez PowerShell oveľa pohodlnejšia a rýchlejšia ako práca cez portál Azure. Vďaka svojej multiplatformnej povahe môže byť PowerShell použitý na akomkoľvek operačnom systéme.

Či už používate Ubuntu, Red Hat alebo Windows, PowerShell vám môže pomôcť ovládať vaše cloudové zdroje. Pomocou modulu Azure PowerShell, môžete napríklad nastaviť ľubovoľné vlastnosti virtuálnych strojov.

V tomto článku sa pozrieme na to, ako môžete použiť PowerShell na zmenu veľkosti virtuálneho počítača v cloude Azure, ako aj na odstránenie virtuálneho počítača a jeho pridružených objektov.

Úprava a odstránenie virtuálnych počítačov Azure pomocou PowerShell

Dôležité! Nezabudnite si utrieť ruky dezinfekčným prostriedkom, aby ste sa pripravili na prácu:

  • Budete potrebovať modul Modul Azure PowerShell - dá sa stiahnuť z PowerShell Gallery pomocou príkazu Install-Module Az.
  • Musíte sa overiť v cloude Azure, kde je spustený virtuálny počítač, spustením príkazu Connect-AzAccount.

Najprv vytvorte skript, ktorý zmení veľkosť virtuálneho počítača Azure. Otvorme VS Code a uložíme nový skript PowerShell s názvom Resize-AzVirtualMachine.ps1 — v priebehu príkladu k nemu pridáme kúsky kódu.

Požadujeme dostupné veľkosti VM

Pred zmenou veľkosti virtuálneho počítača musíte zistiť, aké sú prijateľné veľkosti pre virtuálne počítače v cloude Azure. Ak to chcete urobiť, musíte spustiť príkaz Get-AzVMSize.

Takže pre virtuálny stroj devvm01 zo skupiny zdrojov dev Požadujeme všetky možné prijateľné veľkosti:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(V skutočných problémoch, samozrejme, namiesto toho ResourceGroupName=dev и VMName=devvm01 pre tieto parametre zadáte svoje vlastné hodnoty.)

Príkaz vráti niečo takéto:

Úprava a odstránenie virtuálnych počítačov Azure pomocou PowerShell

Toto sú všetky možné možnosti veľkosti, ktoré je možné nastaviť pre daný virtuálny stroj.

Zmeníme veľkosť auta

Napríklad zmeníme veľkosť na novú veľkosť Standard_B1ls - je na prvom mieste v zozname vyššie. (V reálnych aplikáciách si samozrejme vyberiete akúkoľvek veľkosť, ktorú potrebujete.)

  1. Najprv pomocou príkazu Get-AzVM informáciu o našom objekte (virtuálnom stroji) získame uložením do premennej $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Potom vezmeme vlastnosť z tohto objektu .HardwareProfile.VmSize a nastavte požadovanú novú hodnotu:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. A teraz jednoducho spustíme príkaz aktualizácie VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Dbáme na to, aby všetko prebehlo v poriadku – aby sme to urobili, opäť si vyžiadame informácie o našom objekte a pozrieme si nehnuteľnosť $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ak tam vidíme Standard_B1ls - to znamená, že je všetko v poriadku, zmenila sa veľkosť auta. Môžete ísť ďalej a stavať na svojom úspechu zmenou veľkosti niekoľkých virtuálnych počítačov naraz pomocou poľa.

A čo odstránenie virtuálneho počítača v Azure?

S vymazaním nie je všetko také jednoduché a priamočiare, ako by sa mohlo zdať. Koniec koncov, je potrebné odstrániť množstvo zdrojov spojených s týmto strojom, vrátane:

  • Zásobníky na diagnostiku zavádzania
  • Sieťové rozhrania
  • Verejné IP adresy
  • Systémový disk a blob, kde je uložený jeho stav
  • Dátové disky

Preto vytvoríme funkciu a zavoláme ju Remove-AzrVirtualMachine - a odstráni nielen Azure VM, ale aj všetky vyššie uvedené.

Ideme štandardným spôsobom a najprv získame náš objekt (VM) pomocou príkazu Get-AzVm. Nech je to napríklad auto WINSRV19 zo skupiny zdrojov MyTestVMs.

Uložme tento objekt spolu so všetkými jeho vlastnosťami do premennej $vm:

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

Odstránenie kontajnera s diagnostickými súbormi zavádzania

Pri vytváraní virtuálneho počítača v Azure je používateľ tiež požiadaný o vytvorenie kontajnera na ukladanie diagnostiky zavádzania (kontajner diagnostiky zavádzania), aby sa v prípade problémov so zavádzaním mal na čo obrátiť pri riešení problémov. Keď sa však VM odstráni, tento kontajner zostane naďalej bezúčelný. Poďme napraviť túto situáciu.

  1. Najprv zistime, ku ktorému účtu úložiska patrí tento kontajner - na to musíme nájsť vlastnosť storageUri v útrobách objektu DiagnosticsProfile náš VM. Na tento účel používam tento regulárny výraz:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Teraz musíte zistiť názov kontajnera, a preto musíte pomocou príkazu získať ID VM 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. Ďalej dostaneme názov skupiny prostriedkov, do ktorej kontajner patrí:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. A teraz máme všetko, čo potrebujeme na vymazanie kontajnera príkazom Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Odstránenie VM

Teraz vymažte samotný virtuálny stroj, pretože sme už vytvorili premennú $vm pre príslušný objekt. No, poďme spustiť príkaz Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Odstránenie sieťového rozhrania a verejnej IP adresy

Náš virtuálny počítač má stále jedno (alebo dokonca niekoľko) sieťových rozhraní (NIC) – aby sme ich odstránili ako nepotrebné, prejdime si vlastnosť NetworkInterfaces náš objekt VM a vymažte NIC pomocou príkazu Remove-AzNetworkInterface. V prípade, že existuje viac sieťových rozhraní, používame slučku. Zároveň pri každom NIC preveríme nehnuteľnosť IpConfiguration zistiť, či má rozhranie verejnú IP adresu. Ak sa nejaký nájde, príkazom ho odstránime Remove-AzPublicIpAddress.

Tu je príklad práve takéhoto kódu, kde v slučke prezeráme všetky NIC, vymažeme ich a skontrolujeme, či existuje verejná IP. Ak existuje, analyzujte vlastnosť PublicIpAddress, nájdite názov zodpovedajúceho zdroja podľa ID a odstráňte ho:


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

Odstránenie systémového disku

Disk OS je blob, pre ktorý existuje príkaz na jeho odstránenie Remove-AzStorageBlob - ale pred jeho spustením budete musieť nastaviť požadované hodnoty jeho parametrov. Aby ste to dosiahli, musíte získať názov úložného kontajnera obsahujúceho systémový disk a potom ho odovzdať tomuto príkazu spolu s príslušným účtom úložiska.

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

Odstránenie blob Stav systémového disku

Aby sme to urobili, ako ste už pravdepodobne uhádli, vezmeme úložný kontajner, v ktorom je tento disk uložený, a z toho vyplýva, že blob na konci obsahuje status, odovzdajte zodpovedajúce parametre príkazu delete Remove-AzStorageBlob:

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

A nakoniec odstránime datadisky

Náš VM mohol mať stále disky s údajmi, ktoré k nemu boli pripojené. Ak nie sú potrebné, tiež ich vymažeme. Najprv to analyzujme StorageProfile náš VM a nájdite nehnuteľnosť Uri. Ak je diskov viacero, cyklus organizujeme podľa URI. Pre každý URI nájdeme zodpovedajúci účet úložiska pomocou Get-AzStorageAccount. Potom analyzujte identifikátor URI úložiska, aby ste extrahovali požadovaný názov objektu blob a odovzdali ho príkazu delete Remove-AzStorageBlob spolu s účtom úložiska. Takto by to vyzeralo v kóde:

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 teraz "dosiahli sme šťastný koniec!" Teraz musíme zo všetkých týchto fragmentov zostaviť jeden celok. Milý autor Adam Bertram sa s užívateľmi stretol na polceste a urobil to sám. Tu je odkaz na finálny skript tzv Remove-AzrVirtualMachine.ps1:

GitHub

Dúfam, že tieto praktické tipy vám pomôžu ušetriť námahu, čas a peniaze pri práci s virtuálnymi počítačmi Azure.

Zdroj: hab.com

Pridať komentár