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. , 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ë.

à 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ë:

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.)
- Së pari, përdorim komandën
Get-AzVMpër të marrë informacion mbi objektin tonë (makinën virtuale), duke e ruajtur atë në variablin$virtualMachine:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 - Pastaj, nga ky objekt, marrim pronën
.HardwareProfile.VmSizedhe e caktuam vlerĂ«n e re tĂ« nevojshme:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls" - Dhe tani thjesht ekzekutojmĂ« komandĂ«n pĂ«r pĂ«rditĂ«simin e VM-sĂ« â
Update-AzVm:Update-AzVM -VM devvm01 -ResourceGroupName dev - 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 MyTestVMsFshijmë 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ë.
- SĂ« pari, le tĂ« zbulojmĂ« se cilit llogari tĂ« ruajtjes i takon ky kontenier â pĂ«r kĂ«tĂ« na nevojitet tĂ« gjejmĂ« pronĂ«n
storageUrinë thellësitë e objektitDiagnosticsProfiletë 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 - 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) - Për mëtejse, marrim emrin e grupit të burimeve, të cilit i përket kontenieri:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName - 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 -ForcePo 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-AzStorageBlobDhe, 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:
â
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
