Z uporabo PowerShell inženirji in skrbniki IT uspešno avtomatizirajo različne naloge pri delu ne samo z lokalnimi, ampak tudi z infrastrukturami v oblaku, zlasti z Azure. V nekaterih primerih je delo prek lupine PowerShell veliko bolj priročno in hitrejše kot delo prek portala Azure. Zaradi svoje večplatformske narave je PowerShell mogoče uporabljati v katerem koli operacijskem sistemu.
Ne glede na to, ali uporabljate Ubuntu, Red Hat ali Windows, vam PowerShell lahko pomaga nadzorovati vire v oblaku. Uporaba modula
V tem članku si bomo ogledali, kako lahko uporabite lupino PowerShell za spreminjanje velikosti VM v oblaku Azure ter brisanje VM in z njim povezanih objektov.
Pomembno! Ne pozabite si obrisati rok z razkužilom, da se pripravite na delo:
- Potrebovali boste modul Modul Azure PowerShell - lahko ga prenesete iz galerije PowerShell z ukazom
Install-Module Az
. - Preveriti morate v oblaku Azure, kjer se izvaja virtualni stroj, tako da zaženete ukaz
Connect-AzAccount
.
Najprej ustvarimo skript, ki bo spremenil velikost Azure VM. Odprimo kodo VS in shranimo nov skript PowerShell, imenovan Resize-AzVirtualMachine.ps1 — med napredovanjem primera mu bomo dodajali dele kode.
Zahtevamo razpoložljive velikosti VM
Preden spremenite velikost VM, morate ugotoviti, katere so sprejemljive velikosti za virtualne stroje v oblaku Azure. Če želite to narediti, morate zagnati ukaz Get-AzVMSize
.
Torej za virtualni stroj devvm01 iz skupine virov dev Zahtevamo vse možne sprejemljive velikosti:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(V resničnih težavah seveda namesto ResourceGroupName=dev и VMName=devvm01 določili boste svoje vrednosti za te parametre.)
Ukaz bo vrnil nekaj takega:
To so vse možne možnosti velikosti, ki jih je mogoče nastaviti za določen virtualni stroj.
Spremenimo velikost avtomobila
Na primer, spremenili bomo velikost na novo velikost Standard_B1ls - je na prvem mestu na zgornjem seznamu. (V aplikacijah v resničnem življenju seveda izberete poljubno velikost, ki jo potrebujete.)
- Najprej uporabite ukaz
Get-AzVM
informacije o našem objektu (virtualnem stroju) dobimo tako, da jih shranimo v spremenljivko$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Nato temu predmetu vzamemo lastnino
.HardwareProfile.VmSize
in nastavite želeno novo vrednost:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- In zdaj preprosto izvedemo ukaz za posodobitev VM -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Poskrbimo, da je vse potekalo dobro - za to ponovno zahtevamo podatke o našem objektu in si ogledamo nepremičnino
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Če tam vidimo Standard_B1ls - to pomeni, da je vse v redu, velikost avtomobila je bila spremenjena. Lahko greste dlje in nadgrajujete svoj uspeh s spreminjanjem velikosti več navideznih strojev hkrati z uporabo matrike.
Kaj pa brisanje VM v Azure?
Pri brisanju ni vse tako preprosto in preprosto, kot se morda zdi. Navsezadnje je treba odstraniti številne vire, povezane s tem strojem, vključno z:
- Zabojniki za shranjevanje diagnostike zagona
- Omrežni vmesniki
- Javni naslovi IP
- Sistemski disk in blob, kjer je shranjeno njegovo stanje
- Podatkovni diski
Zato bomo ustvarili funkcijo in jo poklicali Remove-AzrVirtualMachine
- in izbrisal bo ne samo Azure VM, ampak tudi vse zgoraj našteto.
Gremo na standardni način in najprej dobimo naš objekt (VM) z ukazom Get-AzVm
. Na primer, naj bo avto WINSRV19 iz skupine virov MyTestVMs.
Shranimo ta objekt skupaj z vsemi njegovimi lastnostmi v spremenljivko $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Odstranjevanje vsebnika z zagonskimi diagnostičnimi datotekami
Pri ustvarjanju VM v Azure se od uporabnika zahteva tudi, da ustvari vsebnik za shranjevanje zagonske diagnostike (boot diagnostics container), tako da se v primeru težav z zagonom lahko obrne na kaj za odpravljanje težav. Ko pa je VM izbrisan, ostane ta vsebnik, da nadaljuje svoj zdaj nesmiselni obstoj. Popravimo to situacijo.
- Najprej ugotovimo, kateremu računu za shranjevanje pripada ta vsebnik – za to moramo poiskati lastnost
storageUri
v črevesju predmetaDiagnosticsProfile
naš VM. Za to uporabljam ta regularni izraz:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Zdaj morate ugotoviti ime vsebnika in za to morate pridobiti ID VM z ukazom
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)
- Nato dobimo ime skupine virov, ki ji vsebnik pripada:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- In zdaj imamo vse, kar potrebujemo za brisanje vsebnika z ukazom
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Odstranjevanje VM
Zdaj pa izbrišemo sam virtualni stroj, saj smo že ustvarili spremenljivko $vm
za ustrezni objekt. No, zaženimo ukaz Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Odstranitev omrežnega vmesnika in javnega naslova IP
Naš VM še vedno ima enega (ali celo več) omrežnih vmesnikov (NIC) - če jih želimo odstraniti kot nepotrebne, pojdimo skozi lastnost NetworkInterfaces
naš objekt VM in izbrišite omrežno kartico z ukazom Remove-AzNetworkInterface
. V primeru, da je omrežnih vmesnikov več, uporabimo zanko. Hkrati bomo za vsako NIC preverili lastnino IpConfiguration
da ugotovite, ali ima vmesnik javni naslov IP. Če ga najdemo, ga odstranimo z ukazom Remove-AzPublicIpAddress
.
Tukaj je primer takšne kode, kjer v zanki pregledamo vse NIC-je, jih izbrišemo in preverimo, ali obstaja javni IP. Če obstaja, razčlenite lastnost PublicIpAddress
, poiščite ime ustreznega vira po ID-ju in ga izbrišite:
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
}
}
}
Odstranjevanje sistemskega diska
Disk OS je blob, za katerega obstaja ukaz za brisanje Remove-AzStorageBlob
- vendar preden ga izvedete, boste morali nastaviti zahtevane vrednosti za njegove parametre. Če želite to narediti, morate predvsem pridobiti ime vsebnika za shranjevanje, ki vsebuje sistemski disk, in ga nato posredovati temu ukazu skupaj z ustreznim računom za shranjevanje.
$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]
Odstranjevanje bloba stanja sistemskega diska
Da bi to naredili, kot ste verjetno že uganili, vzamemo vsebnik za shranjevanje, v katerem je shranjen ta disk, in, kar pomeni, da blob na koncu vsebuje status
, posredujte ustrezne parametre ukazu za brisanje Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
In končno odstranimo podatkovne diske
Naš VM bi lahko še vedno imel diske s podatki, ki so mu bili priloženi. Če jih ne potrebujemo, jih bomo tudi izbrisali. Najprej ga razčlenimo StorageProfile
naš VM in poiščite nepremičnino Uri
. Če je diskov več, organiziramo cikel glede na URI
. Za vsak URI bomo našli ustrezni račun za shranjevanje z uporabo Get-AzStorageAccount
. Nato razčlenite URI shranjevanja, da izvlečete želeno ime bloba in ga posredujete ukazu za brisanje Remove-AzStorageBlob
skupaj z računom za shranjevanje. Tako bi izgledalo v kodi:
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]
}
}
In zdaj "smo dosegli srečen konec!" Zdaj moramo iz vseh teh drobcev sestaviti eno celoto. Prijazni avtor Adam Bertram se je uporabnikom srečal na pol poti in to naredil sam. Tukaj je povezava do končnega skripta, imenovanega Odstrani-AzrVirtualMachine.ps1:
→
Upam, da vam bodo ti praktični nasveti v pomoč pri prihranku truda, časa in denarja pri delu z navideznimi stroji Azure.
Vir: www.habr.com