Koristeći PowerShell, inženjeri i IT administratori uspješno automatiziraju različite zadatke pri radu ne samo s lokalnim već i s infrastrukturama u oblaku, posebice s Azureom. U nekim je slučajevima rad putem PowerShell-a mnogo praktičniji i brži od rada putem Azure portala. Zahvaljujući svojoj višeplatformskoj prirodi, PowerShell se može koristiti na bilo kojem operativnom sustavu.
Bez obzira koristite li Ubuntu, Red Hat ili Windows, PowerShell vam može pomoći u kontroli resursa u oblaku. Korištenje modula
U ovom članku ćemo pogledati kako možete koristiti PowerShell za promjenu veličine VM-a u Azure oblaku, kao i brisanje VM-a i njegovih povezanih objekata.
Važno! Ne zaboravite obrisati ruke dezinficijensom kako biste se pripremili za posao:
- Trebat će vam modul Modul Azure PowerShell - može se preuzeti iz galerije PowerShell pomoću naredbe
Install-Module Az
. - Morate se autentificirati u Azure oblaku gdje je pokrenut virtualni stroj tako što ćete pokrenuti naredbu
Connect-AzAccount
.
Prvo, stvorimo skriptu koja će promijeniti veličinu Azure VM-a. Otvorimo VS Code i spremimo novu PowerShell skriptu pod nazivom Promjena veličine-AzVirtualMachine.ps1 — dodavat ćemo mu dijelove koda kako primjer napreduje.
Tražimo dostupne veličine VM-a
Prije nego što promijenite veličinu VM-a, morate saznati koje su prihvatljive veličine za virtualna računala u Azure oblaku. Da biste to učinili, morate pokrenuti naredbu Get-AzVMSize
.
Dakle za virtualni stroj devvm01 iz grupe resursa dev Tražimo sve moguće prihvatljive veličine:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(U stvarnim problemima, naravno, umjesto ResourceGroupName=dev и VMName=devvm01 navest ćete vlastite vrijednosti za ove parametre.)
Naredba će vratiti nešto poput ovoga:
Ovo su sve moguće opcije veličine koje se mogu postaviti za određeno virtualno računalo.
Promijenimo veličinu automobila
Na primjer, promijenit ćemo veličinu na novu veličinu Standard_B1ls - on je na prvom mjestu na gornjoj listi. (U stvarnim aplikacijama, naravno, odabirete veličinu koju god želite.)
- Prvo pomoću naredbe
Get-AzVM
informacije o našem objektu (virtualnom stroju) dobivamo pohranjujući ih u varijablu$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Zatim uzimamo vlasništvo od ovog objekta
.HardwareProfile.VmSize
i postavite željenu novu vrijednost:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Sada jednostavno izvršavamo naredbu VM update -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Brinemo se da je sve prošlo dobro - da bismo to učinili, ponovno tražimo informacije o našem objektu i pregledavamo nekretninu
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Ako tamo vidimo Standard_B1ls - to znači da je sve u redu, veličina automobila je promijenjena. Možete ići dalje i graditi na svom uspjehu mijenjanjem veličine nekoliko VM-ova odjednom pomoću polja.
Što je s brisanjem VM-a u Azureu?
S brisanjem nije sve tako jednostavno i jednostavno kao što se čini. Uostalom, potrebno je ukloniti brojne resurse povezane s ovim strojem, uključujući:
- Spremnici za pohranu dijagnostike pokretanja
- Mrežna sučelja
- Javne IP adrese
- Sistemski disk i blob gdje je pohranjen njegov status
- Podatkovni diskovi
Stoga ćemo kreirati funkciju i pozvati je Remove-AzrVirtualMachine
- i to će izbrisati ne samo Azure VM, već i sve gore navedeno.
Idemo standardnim putem i prvo dobivamo naš objekt (VM) pomoću naredbe Get-AzVm
. Na primjer, neka to bude auto WINSRV19 iz grupe resursa MyTestVMs.
Spremimo ovaj objekt zajedno sa svim njegovim svojstvima u varijablu $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Uklanjanje spremnika s dijagnostičkim datotekama za pokretanje
Prilikom izrade VM-a u Azureu, od korisnika se također traži da kreira spremnik za pohranjivanje dijagnostike pokretanja (boot diagnostics container), tako da se u slučaju problema s pokretanjem ima nešto obratiti za rješavanje problema. Međutim, kada se VM izbriše, ovaj spremnik ostaje da nastavi svoje sada besmisleno postojanje. Popravimo ovu situaciju.
- Prvo, saznajmo kojem računu za pohranu pripada ovaj spremnik - za ovo moramo pronaći svojstvo
storageUri
u utrobi objektaDiagnosticsProfile
naš VM. Za ovo koristim ovaj regularni izraz:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Sada morate saznati naziv spremnika, a za to trebate dobiti VM ID pomoću naredbe
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)
- Zatim dobivamo naziv grupe resursa kojoj spremnik pripada:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- I sada imamo sve što nam je potrebno za brisanje spremnika s naredbom
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Uklanjanje VM-a
Sada izbrišite sam virtualni stroj, budući da smo već stvorili varijablu $vm
za odgovarajući objekt. Pa, pokrenimo naredbu Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Uklanjanje mrežnog sučelja i javne IP adrese
Naš VM još uvijek ima jedno (ili čak nekoliko) mrežnih sučelja (NIC) - da ih uklonimo kao nepotrebne, prođimo kroz svojstvo NetworkInterfaces
naš VM objekt i izbrišite NIC s naredbom Remove-AzNetworkInterface
. U slučaju da postoji više od jednog mrežnog sučelja, koristimo petlju. U isto vrijeme, za svaki NIC provjerit ćemo imovinu IpConfiguration
kako biste utvrdili ima li sučelje javnu IP adresu. Ako se pronađe, uklonit ćemo ga naredbom Remove-AzPublicIpAddress
.
Evo primjera upravo takvog koda, gdje pregledavamo sve NIC-ove u petlji, brišemo ih i provjeravamo postoji li javni IP. Ako postoji, analizirajte svojstvo PublicIpAddress
, pronađite naziv odgovarajućeg izvora prema ID-u i izbrišite ga:
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
}
}
}
Uklanjanje sistemskog diska
OS disk je blob, za koji postoji naredba za brisanje Remove-AzStorageBlob
- ali prije nego što ga izvršite, morat ćete postaviti potrebne vrijednosti za njegove parametre. Da biste to učinili, posebno morate dobiti naziv spremnika za pohranu koji sadrži sistemski disk, a zatim ga proslijediti ovoj naredbi zajedno s odgovarajućim računom za pohranu.
$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]
Uklanjanje statusne mrlje diska sustava
Da bismo to učinili, kao što ste vjerojatno već pogodili, uzimamo spremnik za pohranu u kojem je ovaj disk pohranjen i, implicirajući da mrlja na kraju sadrži status
, proslijedite odgovarajuće parametre naredbi za brisanje Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
I na kraju uklanjamo podatkovne diskove
Naš VM još uvijek može imati diskove s podacima koji su mu priloženi. Ako nisu potrebni, i njih ćemo izbrisati. Prvo raščlanimo StorageProfile
naš VM i pronađite nekretninu Uri
. Ako postoji nekoliko diskova, organiziramo ciklus prema URI
. Za svaki URI pronaći ćemo odgovarajući račun za pohranu pomoću Get-AzStorageAccount
. Zatim raščlanite URI za pohranu da izdvojite željeni naziv bloba i proslijedite ga naredbi za brisanje Remove-AzStorageBlob
zajedno s računom za pohranu. Ovako bi to izgledalo u kodu:
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]
}
}
I sada "stigli smo sretan kraj!" Sada moramo sastaviti jednu cjelinu od svih tih fragmenata. Ljubazni autor Adam Bertram izašao je u susret korisnicima i sam to učinio. Ovdje je poveznica na konačnu skriptu tzv Ukloni-AzrVirtualMachine.ps1:
→
Nadam se da će vam ovi praktični savjeti pomoći da uštedite trud, vrijeme i novac pri radu s Azure VM-ovima.
Izvor: www.habr.com