Azure VM-ek módosítása és törlése PowerShell segítségével

PowerShell segítségével a mérnökök és IT-adminisztrátorok sikeresen automatizálnak különböző feladatokat nemcsak on-premises, hanem felhőinfrastruktúrákkal, különösen az Azure-ra vonatkozóan is. A PowerShell használata sok esetben kényelmesebb és gyorsabb, mint az Azure portál. A PowerShell platformfüggetlensége lehetővé teszi, hogy bármilyen operációs rendszeren használhassuk.

Nem számít, hogy Ubuntu, Red Hat vagy Windows rendszeren dolgozik-e — a PowerShell segít a felhőerőforrások irányításában. A Azure PowerShellmodul használatával például bármilyen virtuális gép tulajdonságait beállíthatja.

Ez a cikk azt vizsgálja, hogyan lehet a PowerShell-t használni egy Azure VM méretének módosítására, valamint a VM és a hozzá kapcsolódó objektumok törlésére.

Azure VM-ek módosítása és törlése PowerShell segítségével

Fontos! Ne felejtsd el fertőtlenítani a kezed, és készülni a munkára:

  • Szükséged lesz a Azure PowerShell Module modulra — ezt a PowerShell Gallery-ből töltheted le a következő parancsot futtatva: Install-Module Az.
  • Be kell jelentkezned az Azure felhőbe, ahol a virtuális gép fut, a következő parancs kiadásával: Connect-AzAccount.

Kezdjük el egy szkript létrehozását, amely átméretezi az Azure VM-et. Nyissuk meg a VS Code-ot és mentsük el az új PowerShell szkriptet a következő néven: Resize-AzVirtualMachine.ps1 — ebbe folyamatosan hozzá fogjuk adni a kódrészleteket a példa során.

Kérdezzük le a meglévő VM méreteket

Mielőtt megváltoztatnánk a VM méretét, tudnunk kell, hogy milyen elfogadható méretek állnak rendelkezésre az Azure felhőben. Ehhez futtassuk a következő parancsot: Get-AzVMSize.

Tehát a devvm01 virtuális géphez a dev erőforráscsoportból kérjük le a lehetséges méreteket:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Valós feladatok során természetesen a ResourceGroupName=dev és VMName=devvm01 paraméterekhez a saját értékeidet fogod használni.)

A parancs körülbelül a következő listát fogja visszaadni:

Azure VM-ek módosítása és törlése PowerShell segítségével

Ezek az összes lehetséges méret, amit beállíthatunk az adott virtuális géphez.

A VM átméretezése

Példaként az új méretet állítjuk be Standard_B1ls — ez az első helyen áll a fenti listán. (Valós feladatok során természetesen bármilyen szükséges méretet választhat.)

  1. Először, a Get-AzVM parancs segítségével szerezzük meg a VM-ről (virtuális gépről) szóló információt, és tároljuk azokat a $virtualMachine:
    változóban:
  2. $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 Ezután ebből az objektumból kinyerjük a .HardwareProfile.VmSize
    tulajdonságot, és beállítjuk a szükséges új értéket:
  3. Most már csak végrehajtjuk a VM frissítő parancsot — Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Biztosítjuk, hogy minden sikeresen ment — ehhez ismét lekérjük az objektumunk adatait, és megnézzük a következő tulajdonságot $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ha ott látjuk, Standard_B1ls — akkor minden rendben, a gép mérete megváltozott. Tovább léphetünk, és kihasználhatjuk a sikert — egyszerre több VM-et is átméretezhetünk egy tömb használatával.

Mi a helyzet az Azure VM-ek törlésével?

A törlés nem olyan egyszerű és egyenes, mint ahogy azt elsőre gondolnánk. Hiszen számos egyéb erőforrást is el kell távolítani, amely ehhez a géphez kapcsolódik, például:

  • Indítási diagnosztika tároló (Boot diagnostics storage containers)
  • Hálózati interfészek
  • Nyilvános IP címek
  • A rendszerlemez és blob, amely tárolja annak állapotát
  • Adatlemezek (data disks)

Ezért létrehozunk egy funkciót, amelyet Remove-AzrVirtualMachine — és ez nemcsak az Azure VM-et fogja törölni, hanem mindezeket az erőforrásokat is.

A szokásos módon járunk el, először lekérjük az objektumunkat (VM) a Get-AzVmparancs segítségével. Például legyen ez a gép WINSRV19 virtuális géphez a MyTestVMs.

Ezt az objektumot és annak összes tulajdonságát egy változóba mentjük $vm:

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

Töröljük a diagnostic boot file-ok tárolóját.

Az Azure VM létrehozásakor a felhasználónak lehetősége van indítási diagnosztikai tároló létrehozására is, hogy ha probléma adódik az indítással, legyen mibe belefuttatni a hibaelhárítást. Azonban a VM törlésekor ez a tároló továbbra is létezik, már céltalanul. Helyrehozzuk ezt a helyzetet.

  1. Először meg kell találnunk, hogy melyik tárolóhoz tartozik ez a tároló — ehhez meg kell találnunk a következő tulajdonságot storageUri az objektum mélyén DiagnosticsProfile a VM-ünkben. Ezt a következő reguláris kifejezést használom:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?:\/\/(.+?)\.').groups[1].value
  2. Most meg kell tudnunk a tároló nevét, ehhez a VM ID-t kell lekérnünk a 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. Ezután megkapjuk annak a tárolócsoportnak a nevét, amelyikhez a tároló tartozik:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Most már minden szükséges információnk megvan a tároló parancssal való törléséhez Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Virtuális gép törlése

Most töröljük magát a virtuális gépet, mivel már létrehoztuk a megfelelő objektum változót. Nos, futtassuk a parancsot $vm Remove-AzVm $null = $vm | Remove-AzVM -Force:

Hálózati interfész és nyilvános IP-cím törlése

A virtuális gépünknél egy (vagy akár több) hálózati interfész (NIC) maradt – hogy töröljük őket, mivel nem szükségesek, nézzük át a "

NetworkInterfaces " tulajdonságát a VM objektumunkon, és töröljük a NIC-et a következő parancs segítségével Remove-AzNetworkInterface . Ha több hálózati interfész van, akkor ciklust használunk. Mindeközben minden NIC-nél ellenőrizzük az "IpConfiguration " tulajdonságot, hogy van-e nyilvános IP-cím. Ha van, a következő paranccsal töröljük Remove-AzPublicIpAddress Itt egy példa arra a kódra, ahol ciklusban végigjárjuk az összes NIC-t, töröljük őket, ellenőrizzük, hogy van-e nyilvános IP. Ha van, akkor a ".

PublicIpAddress ", azonosítóra hivatkozva megszerezzük a megfelelő erőforrás nevét, és töröljük azt: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 -Forceforeach($ipConfig in $nic.IpConfigurations) { if($ipConfig.PublicIpAddress -ne $null) { Remove-AzPublicIpAddress -ResourceGroupName $vm.ResourceGroupName -Name $ipConfig.PublicIpAddress.Id.Split('\/')[-1] -Force } } }


Rendszerlemez törlése

A rendszerlemez egy blob, amelynek törléséhez parancs érhető el

Remove-AzStorageBlob – de a parancs végrehajtása előtt szükséges megadni a paramétereihez a szükséges értékeket. Ehhez például meg kell szerezni a rendszerlemez tároló konténerének nevét, és aztán ezt az információt továbbítani a megadott parancshoz a megfelelő tárolófiókkal együtt. $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]

A rendszerlemez állapotának blob törlése

Ehhez, ahogy már bizonyára kitaláltad, a tároló konténert vesszük, amelyben ez a lemez található, és, feltételezve, hogy a blob végén található

, átadjuk a megfelelő paramétereket a törlési parancsnak status, átadjuk a megfelelő paramétereket az eltávolító csapatnak – de a parancs végrehajtása előtt szükséges megadni a paramétereihez a szükséges értékeket. Ehhez például meg kell szerezni a rendszerlemez tároló konténerének nevét, és aztán ezt az információt továbbítani a megadott parancshoz a megfelelő tárolófiókkal együtt.:

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

Végül eltávolítjuk az adatlemezeket

A virtuális gépünkhöz csatlakoztatott adatlemezek maradhattak. Ha nincs rájuk szükség, azokat is törölni fogjuk. Először feldolgozzuk őket. StorageProfile a virtuális gépünkön, és megkeressük a tulajdonságot Uri. Ha több lemez áll rendelkezésre, ciklust hozunk létre a URI. Minden URI-hoz megkeressük a megfelelő tárolófiókot a Get-AzStorageAccount. Ezután feldolgozzuk a storage URI-t, hogy kivonjuk a szükséges blob nevét, és átadjuk a törlési parancsnak – de a parancs végrehajtása előtt szükséges megadni a paramétereihez a szükséges értékeket. Ehhez például meg kell szerezni a rendszerlemez tároló konténerének nevét, és aztán ezt az információt továbbítani a megadott parancshoz a megfelelő tárolófiókkal együtt. a tárolófiókkal együtt. Így fog kinézni a kód:

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

És itt vagyunk, elérkeztünk a boldog véghez! Most ezeket a részeket egy egységgé kell összeállítani. A kedves szerző, Adam Bertram, a felhasználók kedvéért megtette ezt. Íme a végső szkript, amelynek címe Remove-AzrVirtualMachine.ps1:

→ GitHub

Remélem, ezek a gyakorlati tanácsok segítenek Önnek, hogy energiát, időt és pénzt takarítson meg az Azure VM-ekkel való munkavégzés során.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster