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

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.

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.)
- Fillimisht, me ndihmën e komandës
Get-AzVMmarrim informacion rreth objektit tonë (makinës virtuale), duke e ruajtur atë në një variabël$virtualMachine:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 - Pastaj, për këtë objekt marrim pronën
.HardwareProfile.VmSizedhe vendosim vlerĂ«n e re tĂ« nevojshme:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls" - Dhe tani thjesht ekzekutojmĂ« komandĂ«n pĂ«r tĂ« pĂ«rditĂ«suar VM â
Update-AzVm:Update-AzVM -VM devvm01 -ResourceGroupName dev - 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 MyTestVMsPohoqim 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ë.
- SĂ« pari do tĂ« zbulojmĂ« se kujt i takon ky llogari ruajtjeje â pĂ«r kĂ«tĂ« na nevojitet tĂ« gjejmĂ« pronĂ«n
storageUrinë thellësitë e objektitDiagnosticsProfiletë 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 - 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) - Më pas, marrim emrin e grupit të burimeve, i cili i përket kontejnerit:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName - 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 -ForcePo 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-AzStorageBlobDhe, 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:
â
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
