PowerShelli abil suudavad insenerid ja IT-administratorenid edukalt automatiseerida erinevaid ĂŒlesandeid mitte ainult on-premises, vaid ka pilveinfrastruktuuride, sealhulgas Azure'i, haldamisel. PowerShelliga töötamine on mitmetel juhtudel palju mugavam ja kiirem kui Azure'i portaali kaudu. TĂ€nu PowerShelli platvormideĂŒlestele vĂ”imalustele saab seda kasutada mistahes operatsioonisĂŒsteemides.
Olgu te tegemist Ubuntu, Red Hati vĂ”i Windowsiga â PowerShell aitab hallata pilveressursse. Kasutades moodulit , nĂ€iteks, saab mÀÀrata mistahes virtuaalmasinate omadusi.
Selles artiklis vaatame, kuidas kasutada PowerShelli, et muuta virtuaalmasina suurust Azure'is, samuti kuidas eemaldada virtuaalmasina ja sellega seotud objekte.

Oluline! Ărge unustage kĂ€si desinfitseerida ja tööd alustada:
- Vajate moodulit Azure PowerShell Module â selle saab laadida PowerShell Gallery'st kĂ€suga
Install-Module Az. - Tuleb autentida Azure'is, kus virtuaalmasin töötab, kÀivitades kÀsu
Connect-AzAccount.
Alustame skripti loomisega, mis muudab Azure'i VM-i suurust. Avame VS Code'i ja salvestame uue PowerShelli skripti nimega Resize-AzVirtualMachine.ps1 â sellesse lisame koodilĂ”ike nĂ€itena.
KĂŒsi olemasolevaid VM-i suurusi
Kuna enne VM-i suuruse muutmist tuleb teada, millised suurused on Azure'i pilves virtuaalmasinatele ĂŒldiselt lubatud, tuleb kĂ€ivitada kĂ€sk Get-AzVMSize.
Nii et virtuaalmasina devvm01 ressursside rĂŒhmast dev kĂŒsi kĂ”iki lubatud suurusi:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01(Tegelikus töös on muidugi parem kirjutada oma vÀÀrtused nende parameetrite asemel.) KÀsk tagastab ligikaudu jÀrgmise nimekirja: ja Need on kÔik vÔimalikud suuruse variandid, mida selle virtuaalmasina jaoks saab mÀÀrata. Teeme masina suuruse muutmise
NĂ€iteks muudame suuruseks

Standard_B1ls
â see on ĂŒlaltoodud loendis esimesel kohal. (Tegelikus töös valite muidugi endale sobiva suuruse.)
Esiteks saame kÀsu Get-AzVM abil meie objekti (virtuaalmasina) andmed, salvestades need muutujasse
- $virtualMachine
$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01SeejÀrel vÔtame selle objekti omaduse.HardwareProfile.VmSize:ja mÀÀrame vajaliku uue vÀÀrtuse: - $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
Ja nĂŒĂŒd tĂ€idame lihtsalt VM-i vĂ€rskendamise kĂ€su âUpdate-AzVm$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls" - Ja nĂŒĂŒd lihtsalt kĂ€ivitame VM-i uuendamise kĂ€su â
Update-AzVm:Update-AzVM -VM devvm01 -ResourceGroupName dev - Veenduge, et kĂ”ik on lĂ€inud hĂ€sti â selle jaoks kĂŒsime taas meie objekti kohta teavet ja vaatame omadust
$virtualMachine.HardwareProfile:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Kui seal on nĂ€ha Get-AzVM â siis on kĂ”ik korras, masina suurus on muudetud. Saame edasi liikuda ja saavutada edu â suurendame korraga mitut VM-i, kasutades massiivi.
Aga kuidas on Azure'is VM-i kustutamisega?
Kustutamine ei ole nii lihtne ja sirgjooneline, nagu vÔiks tunduda. Tuleb kustutada ka rida ressursse, mis on seotud selle masinaga, sealhulgas:
- KĂ€ivitamise diagnoosi salvestuskonteinerid
- Network interfaces
- Avalikud IP-aadressid
- SĂŒsteemi ketas ja blob, kus hoitakse selle staatust
- Andmekettad
SeetĂ”ttu loome funktsiooni, mille nimeks saame Remove-AzrVirtualMachine â ja see kustutab mitte ainult Azure VM-i, vaid ka kĂ”ik ĂŒlaltoodud.
Liigume tavapĂ€raselt edasi ja saame kĂ”igepealt meie objekti (VM) kĂ€su abil Get-AzVm. NĂ€itena olgu see masin WINSRV19 ressursside rĂŒhmast MyTestVMs.
Salvestame selle objekti koos kÔigi selle omadustega muutujasse $vm:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMsKustutame kÀivitamise diagnoosi failide konteineri
Azure'is VM-i loomisel pakutakse kasutajale samuti luua kĂ€ivitamise diagnoosi konteiner, et probleemide korral oleks midagi, millele tugineda tĂ”rkeotsingu jaoks. Kuid VM-i kustutamisel jÀÀb see konteiner jĂ€tkama oma nĂŒĂŒdseks mĂ”ttetu olemasolu. Lahendame selle olukorra.
- Esiteks selgitame vĂ€lja, millisele salvestuskontole see konteiner kuulub â selle jaoks peame leidma omaduse
storageUrimeie VM-iDiagnosticsProfileseest. Selleks kasutan sellist regulaarset avaldist:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?:\/\/(.+?)\.') .groups[1].value - NĂŒĂŒd peame vĂ€lja selgitama konteineri nime, ja selleks peame saama VM ID kĂ€su abil
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) - SeejÀrel saame teada ressursside grupi nime, kuhu konteiner kuulub:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName - Ja nĂŒĂŒd on meil kĂ”ik vajalikud tingimused konteineri eemaldamiseks kĂ€suga
Remove-AzStorageContainer:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Nimi' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Eemaldame VM
NĂŒĂŒd eemaldame virtuaalmasina ise, hea, et oleme juba loonud muutuja $vm vastava objekti jaoks. Noh, kĂ€ivitame kĂ€su Remove-AzVm:
$null = $vm | Remove-AzVM -ForceEemaldame vÔrguliidese ja avaliku IP-aadressi
Meie VM-il on ĂŒks (vĂ”i isegi mitu) vĂ”rguliidest (NICs) â et need eemaldada, liikumeme lĂ€bi omaduse NetworkInterfaces meie VM objekti pealt ja eemaldame NIC kĂ€suga Remove-AzNetworkInterface. Kui vĂ”rguliideseid on mitu, kasutame tsĂŒklit. Samuti kontrollime iga NIC jaoks omadust IpConfiguration , et nĂ€ha, kas liidese avalik IP-aadress on olemas. Kui see leitakse, eemaldame selle kĂ€suga Remove-AzPublicIpAddress.
Siin on nĂ€ide sellisest koodist, kus me tsĂŒklis vaatame lĂ€bi kĂ”ik NIC-id, eemaldame need, kontrollime, kas avalik IP on olemas. Kui on, siis vaatame omaduse PublicIpAddress, saame ID jĂ€rgi vastava ressursi nime ja eemaldame selle:
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
}
}
}
Eemaldame sĂŒsteemi ketta
OS ketas on blob, mille eemaldamiseks on kĂ€su olemas Remove-AzStorageBlob â kuid enne selle kĂ€ivitamist tuleb mÀÀrata nĂ”utavad vÀÀrtused selle parameetritele. Selleks on nĂ€iteks vajalik saada sisendketta nimega konteiner, mis sisaldab sĂŒsteemi ketta, ja seejĂ€rel edastada see koos vastava salvestusakna nimega sellele kĂ€sule.
$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]
Eemaldame sĂŒsteemi ketta staatuse blobi
Selle jaoks, nagu te tÔenÀoliselt arvate, vÔtame salvestuskonteineri, mis sisaldab seda ketast, ja, eeldades, et blob lÔpus sisaldab staatus, edastame vastavad parameetrid eemaldamise kÀsule Remove-AzStorageBlob:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlobJa, lÔpuks eemaldame andmed sisaldavad kettad
Meie virtuaalsel masinal vĂ”isid alles jÀÀda andmeid sisaldavad kettad, mis olid sellele lisatud. Kui need ei ole vajalikud, eemaldame ka need. Esiteks analĂŒĂŒsime StorageProfile meie virtuaalsest masinast ja leiame omaduse Uri. Kui kettaid on mitu, organiseerime tsĂŒkli ĂŒle URI. Iga URI jaoks leiame vastava salvestuskonto abil Get-AzStorageAccount. SeejĂ€rel analĂŒĂŒsime salvestuse URI-d, et vĂ€lja tĂ”mmata vajalik blob'i nimi ja edastada see kustutamise kĂ€sule Remove-AzStorageBlob koos salvestuskontoga. Nii see koodis vĂ€lja nĂ€eb:
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]
}
}
Ja nĂŒĂŒd "oleme jĂ”udnud Ă”nneliku lĂ”puni!" NĂŒĂŒd tuleb kĂ”ik need fragmendid kokku koguda. HĂ€id nĂ”uandeid pakkus autor Adam Bertram ja tegi selle ise. Siin on link lĂ”ppskriptile pealkirjaga Remove-AzrVirtualMachine.ps1:
â
Loodan, et need praktilised nÀpunÀited on teile abiks, et sÀÀsta jÔudu, aega ja vahendeid Azure'i virtuaalsete masinatega töötamisel.
Allikas: habr.com
