Ndryshoni dhe fshini VM-të Azure duke përdorur PowerShell

Me ndihmën e PowerShell, inxhinierët dhe administratorët IT automatizojnë me sukses detyra të ndryshme duke punuar jo vetëm me infrastrukturat on-premises, por edhe me ato në re, veçanërisht me Azure. Të punosh përmes PowerShell në disa raste është shumë më e lehtë dhe më e shpejtë se përmes portalit Azure. Falë ndërplatformës, PowerShell mund të përdoret për çdo sistem operativ.

Nuk ka rĂ«ndĂ«si nĂ«se po punoni me Ubuntu, Red Hat, apo Windows — PowerShell do t'ju ndihmojĂ« tĂ« kontrolloni burimet e re. Azure PowerShell, pĂ«r shembull, mund tĂ« pĂ«rdoret pĂ«r tĂ« caktuar çdo pronĂ« tĂ« makinave virtuale.

Në këtë artikull, ne do të shqyrtojmë se si mund të përdorim PowerShell për të ndryshuar madhësinë e VM-së në Azure, si dhe për të fshirë VM-në dhe objektet e lidhura me të.

Ndryshoni dhe fshini VM-të Azure duke përdorur PowerShell

Ë rĂ«ndĂ«sishme! Mos harroni tĂ« pastroni duar me dezinfektues para se tĂ« filloni punĂ«n:

  • Do t'ju duhet moduli Azure PowerShell Module — mund ta shkarkoni nga PowerShell Gallery me komandĂ«n Install-Module Az.
  • Duhet tĂ« autentifikoheni nĂ« re Azure ku funksionon makina virtuale, duke e ekzekutuar komandĂ«n Connect-AzAccount.

SĂ« pari, do tĂ« krijojmĂ« njĂ« skript qĂ« ndryshon madhĂ«sinĂ« e Azure VM-sĂ«. Do tĂ« hapim VS Code dhe do ta ruajmĂ« njĂ« skript tĂ« ri PowerShell me emrin Resize-AzVirtualMachine.ps1 — nĂ« tĂ« do tĂ« shtojmĂ« copĂ«za kodi gjatĂ« shembullit.

Kërkojmë madhësitë ekzistuese të VM-së

Para se të ndryshoni madhësinë e VM-së, duhet të dini cilat janë madhësitë e lejueshme për makinat virtuale në Azure. Për këtë, duhet të ekzekutoni komandën Get-AzVMSize.

Pra, për makinën virtuale devvm01 nga grupi i burimeve dev kërkojmë të gjitha madhësitë e lejueshme:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Në detyra reale, sigurisht, në vend të ResourceGroupName=dev dhe VMName=devvm01 do të jepni vlerat tuaja për këto parametra.)

Komanda do të kthejë një listë të tillë:

Ndryshoni dhe fshini VM-të Azure duke përdorur PowerShell

Këto janë të gjitha opsionet e mundshme të madhësisë që mund të caktoni për këtë makinë virtuale.

Rrisim makinën

PĂ«r shembull, ne do ta bĂ«jmĂ« rritjen nĂ« madhĂ«sinĂ« e re Standard_B1ls — ai Ă«shtĂ« nĂ« vendin e parĂ« nĂ« listĂ«n mĂ« sipĂ«r. (NĂ« detyra reale, natyrisht, ju zgjidhni çdo madhĂ«si qĂ« ju nevojitet.)

  1. Së pari, përdorim komandën Get-AzVM për të marrë informacion mbi objektin tonë (makinën virtuale), duke e ruajtur atë në variablin $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Pastaj, nga ky objekt, marrim pronën .HardwareProfile.VmSize dhe e caktuam vlerën e re të nevojshme:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Dhe tani thjesht ekzekutojmĂ« komandĂ«n pĂ«r pĂ«rditĂ«simin e VM-sĂ« — Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Sigurohemi qĂ« gjithçka kaloi me sukses — pĂ«r kĂ«tĂ« pĂ«rsĂ«ri kĂ«rkojmĂ« informacion nĂ« lidhje me objektin tonĂ« dhe shikojmĂ« pronĂ«n $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

NĂ«se aty shohim Standard_B1ls — atĂ«herĂ«, gjithçka Ă«shtĂ« nĂ« rregull, madhĂ«sia e makinĂ«s Ă«shtĂ« ndryshuar. Mund tĂ« shkojmĂ« mĂ« tej dhe tĂ« vazhdojmĂ« suksesin — tĂ« ri-madhĂ«sojmĂ« disa VM menjĂ«herĂ«, duke pĂ«rdorur njĂ« array.

Por çfarë ndodh me fshirjen e VM në Azure?

Fshirja nuk është aq e thjeshtë dhe e drejtpërdrejtë sa mund të duket. Sepse duhet të fshihet edhe një sërë burimesh që lidhen me këtë makinë, duke përfshirë:

  • KontejnerĂ«t e ruajtjes pĂ«r diagnostikimin e ngarkesĂ«s (Boot diagnostics storage containers)
  • NdĂ«rfaqet rrjetike
  • Adresat IP publike
  • Disku sistemor dhe blob-i, ku ruhet statusi i tij
  • Disqet e tĂ« dhĂ«nave (data disks)

Prandaj, do tĂ« krijojmĂ« njĂ« funksion dhe do ta quajmĂ« Remove-AzrVirtualMachine — dhe ai do tĂ« fshijĂ« jo vetĂ«m Azure VM, por edhe tĂ« gjitha tĂ« mĂ«sipĂ«rmet.

Shkëlqejmë rrugën standarde dhe së pari marrim objektin tonë (VM) me komandën Get-AzVm. Për shembull, le të jetë kjo makinë WINSRV19 nga grupi i burimeve MyTestVMs.

Do ta ruajmë këtë objekt së bashku me të gjithë pronat e tij në një variabël $vm:

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

Fshijmë kontenierin me skedarët e diagnostikimit të ngarkesës

Kur krijoni një VM në Azure, përdoruesit u ofrohet gjithashtu të krijojnë një kontenier për ruajtjen e diagnostikimit të ngarkesës (boot diagnostics container), për të pasur diçka për të kontrolluar në rast të problemeve me ngarkesën. Megjithatë, kur fshihet VM, ky kontenier vazhdon të ekzistojë pa qëllim. Le ta zgjidhim këtë situatë.

  1. SĂ« pari, le tĂ« zbulojmĂ« se cilit llogari tĂ« ruajtjes i takon ky kontenier — pĂ«r kĂ«tĂ« na nevojitet tĂ« gjejmĂ« pronĂ«n storageUri nĂ« thellĂ«sitĂ« e objektit DiagnosticsProfile tĂ« VM-sĂ« sonĂ«. PĂ«r kĂ«tĂ«, unĂ« pĂ«rdor kĂ«tĂ« shprehje tĂ« rregullt:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?:\/\/(.+?)\.') .groups[1].value
  2. Tani duhet të mësojmë emrin e kontenierit, dhe për këtë duhet të marrim VM ID me komandën 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. Për mëtejse, marrim emrin e grupit të burimeve, të cilit i përket kontenieri:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Dhe tani kemi gjithçka që na nevojitet për të hequr kontejnerin me komandën Remove-AzStorageContainer:
    $saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Po heqim VM

Tani do të heqim vetë makinën virtuale, për fat të mirë kemi krijuar tashmë një variabël $vm për objektin përkatës. E pra, le të ekzekutojmë komandën Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Po heqim ndërfaqen rrjet dhe adresën IP publike

VM-ja jonĂ« ka njĂ« (ose madje disa) ndĂ«rfaqe rrjeti (NICs) — pĂ«r tĂ« hequr ato qĂ« nuk na nevojiten, do tĂ« kalojmĂ« pĂ«rmes pronĂ«s NetworkInterfaces tĂ« objektit VM dhe do tĂ« heqim NIC me komandĂ«n Remove-AzNetworkInterface. NĂ« rast se ka mĂ« shumĂ« se njĂ« ndĂ«rfaqe rrjeti, do tĂ« pĂ«rdorim njĂ« cikĂ«l. Po ashtu, pĂ«r çdo NIC do tĂ« kontrollojmĂ« pronĂ«n IpConfiguration pĂ«r tĂ« parĂ« nĂ«se ndĂ«rfaqja ka njĂ« adresĂ« IP publike. NĂ«se e tillĂ« zbulohet, do ta heqim me komandĂ«n Remove-AzPublicIpAddress.

Këtu është një shembull i kodit të tillë, ku ne kalojmë përmes të gjithë NICs, i heqim ato, kontrollojmë nëse ka një IP publike. Nëse ka, atëherë nxjerrim pronën PublicIpAddress, nxjerrim emrin e resurset përkatëse nga ID dhe e heqim atë:


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

Po heqim diskun sistemor

Disku OS Ă«shtĂ« njĂ« blob, pĂ«r heqjen e tĂ« cilit ka njĂ« komandĂ« Remove-AzStorageBlob — por para se tĂ« ekzekutojmĂ« atĂ«, do tĂ« duhet tĂ« vendosim vlerat e kĂ«rkuara pĂ«r parametrat e saj. PĂ«r kĂ«tĂ«, veçanĂ«risht, duhet tĂ« marrim emrin e kontejnerit tĂ« ruajtjes qĂ« pĂ«rmban diskun sistemor dhe pastaj ta kalojmĂ« atĂ« komandĂ«s sĂ« bashku me llogarinĂ« pĂ«rkatĂ«se tĂ« ruajtjes.

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

Po heqim Blob-in e statusit të diskut sistemor

Për këtë, siç e keni kuptuar ndoshta, ne marrim kontejnerin e ruajtjes që përmban këtë disk dhe, duke nënkuptuar se blob-i në fund përmban status, kalojmë parametrat përkatës komandës së heqjes Remove-AzStorageBlob:

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

Dhe, në fund, fshijmë diskët me të dhëna

VM-ja jonë mund të kishte diskë me të dhëna të lidhura me të. Nëse nuk janë të nevojshme, do t'i fshijmë ato gjithashtu. Së pari, do të analizuam StorageProfile të VM-së tonë dhe do të gjejmë pronën Uri. Nëse ka disa disqe, do të organizojmë një cikël për URI. Për çdo URI do të gjejmë llogarinë përkatëse të ruajtjes me ndihmën e Get-AzStorageAccount. Pastaj do të analizojmë URI-në e ruajtjes për të nxjerrë emrin e nevojshëm të blobs dhe për ta kaluar atë në komandën e fshirjes Remove-AzStorageBlob së bashku me llogarinë e ruajtjes. Këtu është si do të duket në kod:

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

Dhe ja, "arritëm në fundin e lumtur!" Tani nga të gjithë këto fragmente duhet të mblidhet një e tërë. Autori i mirë Adam Bertram i është përgjigjur përdoruesve dhe e ka bërë këtë vetë. Ja lidhja për skriptin përfundimtar me emrin Remove-AzrVirtualMachine.ps1:

→ GitHub

Shpresoj se këto këshilla praktike do t'ju ndihmojnë të kurseni energji, kohë dhe burime gjatë punës me Azure VMs.

Burimi: habr.com

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster