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
