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

Me PowerShell, inxhinierët dhe administratorët IT automatizojnë me sukses detyra të ndryshme jo vetëm në infrastrukturat on-premises, por edhe në ato cloud, veçanërisht me Azure. Të punosh përmes PowerShell në disa raste është shumë më e lehtë dhe më e shpejtë sesa përmes portalit të Azure. Falë përkrahjes për disa platforma, PowerShell mund të përdoret për çdo SO.

S'ka rĂ«ndĂ«si nĂ«se jeni duke punuar me Ubuntu, Red Hat apo Windows — PowerShell do t'ju ndihmojĂ« tĂ« kontrolloni burimet cloud. Duke pĂ«rdorur modul Azure PowerShell, pĂ«r shembull, mund tĂ« caktoni ç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-ve në cloud 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

E rëndësishme! Mos harroni të lani duar me dezinfektues para se të filloni punën:

  • Do t'ju nevojitet moduli Azure PowerShell Module — mund ta shkarkoni nga PowerShell Gallery me komandĂ«n Install-Module Az.
  • Duhet tĂ« autentikoheni nĂ« cloud Azure ku po funksionon makina virtuale duke ekzekutuar komandĂ«n Connect-AzAccount.

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

Kërkojmë dimensionet e disponueshme të VM

Para se të ndryshoni madhësinë e VM-së, duhet të dini se cilat janë dimensionet 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ë detyrat reale, natyrisht, do të specifikoni vlerat tuaja për këto parametra.) ResourceGroupName=dev dhe VMName=devvm01 Komanda do të kthejë një listë të tillë:

Këto janë të gjitha mundësitë e dimensioneve që mund të caktoni për këtë makinë virtuale.

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

Rrisim makinën

РДсаĐčĐ·ĐžĐŒ ĐŒĐ°ŃˆĐžĐœŃƒ

Si njĂ« shembull, ne do ta rrisim nĂ« madhĂ«sinĂ« e re Standard_B1ls — ai Ă«shtĂ« nĂ« vendin e parĂ« nĂ« listĂ«n mĂ« sipĂ«r. (NĂ« detyrat reale, natyrisht, ju zgjidhni çdo madhĂ«si qĂ« ju nevojitet.)

  1. Fillimisht, me ndihmën e komandës Get-AzVM marrim informacion rreth objektit tonë (makinës virtuale), duke e ruajtur atë në një variabël $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Pastaj, për këtë objekt marrim pronën .HardwareProfile.VmSize dhe vendosim vlerën e re të nevojshme:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Dhe tani thjesht ekzekutojmĂ« komandĂ«n pĂ«r tĂ« pĂ«rditĂ«suar VM — Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Sigurohemi qĂ« gjithçka shkon mirĂ« — pĂ«r kĂ«tĂ«, sĂ«rish kĂ«rkojmĂ« informacionin pĂ«r objektin tonĂ« dhe shohim 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Ă« zhvillojmĂ« suksesin — tĂ« rrisim menjĂ«herĂ« disa VM, duke pĂ«rdorur njĂ« array.

ÇfarĂ« ndodh me fshirjen e VM nĂ« Azure?

Me fshirjen nuk është gjithçka aq e thjeshtë dhe e drejtpërdrejtë sa mund të duket. Në fakt, duhet të fshijmë një sërë burimesh që janë të lidhura me këtë makinë, përfshirë:

  • KontejnerĂ«t e ruajtjes pĂ«r diagnozĂ«n e boot-it (Boot diagnostics storage containers)
  • Interface tĂ« rrjeteve
  • Adresat IP publike
  • Disqi sistemor dhe blob, ku ruhet statusi i tij
  • Disket e tĂ« dhĂ«nave (data disks)

Prandaj, ne do tĂ« krijojmĂ« njĂ« funksion dhe do ta quajmĂ« Remove-AzrVirtualMachine — dhe do tĂ« fshijĂ« jo vetĂ«m VM nĂ« Azure, por edhe tĂ« gjitha elementet e mĂ«sipĂ«rme.

Shkruajmë rrugën standarde dhe fillimisht marrim objektin tonë (VM) duke përdorur komandën Get-AzVm. Për shembull, le të jetë kjo makinë WINSRV19 nga grupi i burimeve MyTestVMs.

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

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

Pohoqim kontejnerin me skedarët e diagnostikës së ngarkesës

Kur krijoni një VM në Azure, përdoruesit u ofrohet gjithashtu të krijojnë një kontejner për ruajtjen e diagnostikës së ngarkesës (kontejneri i diagnostikës së ngarkesës), në mënyrë që në rast të problemeve me ngarkesën të ketë çfarë të konsultohet për rregullimin e tyre. Megjithatë, kur hiqet VM, ky kontejner vazhdon të ekzistojë pa qëllim. Le të rregullojmë këtë situatë.

  1. SĂ« pari do tĂ« zbulojmĂ« se kujt i takon ky llogari ruajtjeje — 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Ă« do tĂ« pĂ«rdor njĂ« shprehje tĂ« rregullt tĂ« tillĂ«:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Tani duhet të zbulojmë emrin e kontejnerit, dhe për këtë duhet të marrim ID-në e VM 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. Më pas, marrim emrin e grupit të burimeve, i cili i përket kontejnerit:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Tani tani kemi gjithçka të nevojshme për të fshirë enën me komandën Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Po fshijmë VM

Tani do të fshijmë vetë makinën virtuale, fatmirësisht kemi krijuar tashmë një variabël $vm për objektin përkatës. Le të ekzekutojmë komandën Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Po fshijmë ndërfaqen rrjetore dhe IP-në publike

VM-ja jonĂ« ka njĂ« (ose madje disa) ndĂ«rfaqe rrjetore (NICs) — pĂ«r tĂ« fshirĂ« ato qĂ« nuk janĂ« mĂ« tĂ« nevojshme, do tĂ« kontrollojmĂ« pronĂ«n NetworkInterfaces tĂ« objektit VM dhe do tĂ« fshijmĂ« NIC me komandĂ«n Remove-AzNetworkInterface. NĂ« rast se ka mĂ« shumĂ« se njĂ« ndĂ«rfaqe, do tĂ« pĂ«rdorim njĂ« cikĂ«l. Gjithashtu, pĂ«r secilĂ«n NIC do tĂ« kontrollojmĂ« pronĂ«n IpConfiguration pĂ«r tĂ« parĂ« nĂ«se ndĂ«rfaqja ka njĂ« adresĂ« IP publike. NĂ«se e gjejmĂ«, do ta fshijmĂ« me komandĂ«n Remove-AzPublicIpAddress.

Ja një shembull i tillë i kodit, ku ne shqyrtojmë të gjitha NICs në cikël, i fshijmë ato dhe kontrollojmë nëse ekziston një IP publike. Nëse ekziston, java shqyrtojmë pronën PublicIpAddress, marrimë emrin e burimit përkatës sipas ID-së dhe e fshijmë 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
        }
    }
}

Fshijmë diskun sistemor

Disku i OS Ă«shtĂ« njĂ« blob, pĂ«r fshirjen e sĂ« cilit ka njĂ« komandĂ« Remove-AzStorageBlob — por para se ta ekzekutojmĂ«, do tĂ« duhet tĂ« caktojmĂ« vlerat e nevojshme pĂ«r parametrat e saj. PĂ«r kĂ«tĂ«, do tĂ« nevojitet tĂ« marrim emrin e kontejnerit tĂ« storage-it qĂ« pĂ«rmban diskun sistemor, dhe pastaj ta japim atĂ« kĂ«tĂ« komandĂ« sĂ« bashku me llogarinĂ« pĂ«rkatĂ«se tĂ« storage-it.

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

Fshijmë Blob-in e statusit të diskut sistemor

Për këtë, siç e keni menduar, marrim kontejnerin e storage-it ku ruhet ky disk, dhe, duke supozuar se blob-i në fund përmban status, i kalojmë parametrat për komandën e fshirjes Remove-AzStorageBlob:

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

Dhe, në fund, fshijmë disqet e të dhënave

VM-ja jonë mund të kishte disqe të dhënash që ishin bashkangjitur. Nëse nuk ka nevojë për to, le t'i fshijmë gjithashtu. Së pari do të analizojmë StorageProfile të VM-së tonë dhe do të gjejmë pronën Uri. Nëse ka disa disqe, do të organizojmë një cikël mbi URI. Për çdo URI do të gjejmë llogarinë përkatëse të ruajtjes përmes Get-AzStorageAccount. Atëherë do të analizojmë URI-në e ruajtjes për të nxjerrë emrin e nevojshëm të blob-it dhe t'ia kalojmë komandës për fshirje Remove-AzStorageBlob bashkë me llogarinë e ruajtjes. Ja 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 se “ne arritĂ«m nĂ« fundin e lumtur!” Tani nga kĂ«to fragmente duhet tĂ« mbledhim njĂ« tĂ« tĂ«rĂ«. Autori i mirĂ« Adam Bertram i Ă«shtĂ« pĂ«rgjigjur pĂ«rdoruesve dhe e bĂ«ri vetĂ«. Ja linku pĂ«r skriptin pĂ«rfundimtar tĂ« quajtur Remove-AzrVirtualMachine.ps1:

→ GitHub

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

Burimi: habr.com

Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« đŸ”„ Bli njĂ« hosting tĂ« besueshĂ«m pĂ«r faqet me mbrojtje DDoS, VPS VDS serverĂ« | ProHoster