Naudodami „PowerShell“, inžinieriai ir IT administratoriai sėkmingai automatizuoja įvairias užduotis dirbdami ne tik su vietinėmis, bet ir su debesų infrastruktūromis, ypač su „Azure“. Kai kuriais atvejais dirbti naudojant „PowerShell“ yra daug patogiau ir greičiau nei naudojant „Azure“ portalą. Dėl savo kelių platformų pobūdžio „PowerShell“ gali būti naudojamas bet kurioje operacinėje sistemoje.
Nesvarbu, ar naudojate „Ubuntu“, „Red Hat“ ar „Windows“, „PowerShell“ gali padėti valdyti debesies išteklius. Naudojant modulį
Šiame straipsnyje apžvelgsime, kaip galite naudoti „PowerShell“, norėdami pakeisti „Azure“ debesyje esančios VM dydį, taip pat ištrinti VM ir su ja susijusius objektus.
Svarbu! Nepamirškite nusišluostyti rankų dezinfekavimo priemone, kad pasiruoštumėte darbui:
- Jums reikės modulio Azure PowerShell modulis - jį galima atsisiųsti iš PowerShell galerijos su komanda
Install-Module Az
. - Turite autentifikuoti „Azure“ debesyje, kur veikia virtualioji mašina, vykdydami komandą
Connect-AzAccount
.
Pirmiausia sukurkime scenarijų, kuris pakeis Azure VM dydį. Atidarykime „VS Code“ ir išsaugokime naują „PowerShell“ scenarijų Resize-AzVirtualMachine.ps1 — Vykstant pavyzdžiui, prie jo pridėsime kodo dalis.
Mes prašome galimų VM dydžių
Prieš keisdami VM dydį, turite išsiaiškinti, kokie yra priimtini virtualių mašinų dydžiai Azure debesyje. Norėdami tai padaryti, turite paleisti komandą Get-AzVMSize
.
Taigi virtualiai mašinai devvm01 iš išteklių grupės dev Mes prašome visų galimų priimtinų dydžių:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Žinoma, tikrose problemose vietoj ResourceGroupName=dev и VMName=devvm01 nurodysite savo šių parametrų reikšmes.)
Komanda grąžins maždaug taip:
Tai visos galimos dydžio parinktys, kurias galima nustatyti konkrečiai virtualiai mašinai.
Pakeiskime automobilio dydį
Pavyzdžiui, pakeisime dydį į naują Standartinis_B1ls - jis yra pirmoje vietoje aukščiau esančiame sąraše. (Žinoma, realiame gyvenime pasirenkate bet kokį jums reikalingą dydį.)
- Pirmiausia naudokite komandą
Get-AzVM
informaciją apie savo objektą (virtualią mašiną) gauname išsaugodami ją kintamajame$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Tada paimame turtą iš šio objekto
.HardwareProfile.VmSize
ir nustatykite norimą naują reikšmę:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Ir dabar mes tiesiog vykdome VM atnaujinimo komandą -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Įsitikiname, kad viskas klostėsi gerai – norėdami tai padaryti, vėl prašome informacijos apie mūsų objektą ir apžiūrime turtą
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Jei ten pamatysime Standartinis_B1ls - tai reiškia, kad viskas tvarkoje, pakeistas automobilio dydis. Galite žengti toliau ir remtis savo sėkme pakeisdami kelių virtualių mašinų dydį iš karto naudodami masyvą.
O kaip ištrinti VM „Azure“?
Ištrynus ne viskas taip paprasta ir aišku, kaip gali atrodyti. Galų gale, būtina pašalinti daugybę su šia mašina susijusių išteklių, įskaitant:
- Įkrovos diagnostikos saugojimo konteineriai
- Tinklo sąsajos
- Viešieji IP adresai
- Sistemos diskas ir blobas, kuriame saugoma jo būsena
- Duomenų diskai
Todėl sukursime funkciją ir ją iškviesime Remove-AzrVirtualMachine
- ir ištrins ne tik „Azure VM“, bet ir visa tai, kas paminėta aukščiau.
Einame standartiniu keliu ir pirmiausia gauname objektą (VM) naudodami komandą Get-AzVm
. Pavyzdžiui, tegul tai būna automobilis WINSRV19 iš išteklių grupės MyTestVM.
Išsaugokime šį objektą su visomis jo savybėmis į kintamąjį $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Pašalinamas konteineris su įkrovos diagnostikos failais
Kuriant VM Azure, vartotojo taip pat prašoma sukurti talpyklą įkrovos diagnostikai saugoti (įkrovos diagnostikos konteinerį), kad kilus problemų paleidžiant būtų į ką kreiptis dėl trikčių šalinimo. Tačiau ištrynus VM, šis konteineris paliekamas tęsti savo dabar beprasmišką egzistavimą. Ištaisykime šią situaciją.
- Pirmiausia išsiaiškinkime, kuriai saugyklos paskyrai priklauso šis konteineris – tam turime rasti nuosavybę
storageUri
objekto žarnyneDiagnosticsProfile
mūsų VM. Tam naudoju šią reguliariąją išraišką:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Dabar turite sužinoti konteinerio pavadinimą, o tam naudodami komandą turite gauti VM ID
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)
- Tada gauname išteklių grupės, kuriai priklauso konteineris, pavadinimą:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Ir dabar turime viską, ko reikia norint ištrinti konteinerį su komanda
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
VM pašalinimas
Dabar ištrinkite pačią virtualią mašiną, nes jau sukūrėme kintamąjį $vm
atitinkamam objektui. Na, paleiskite komandą Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Pašalinkite tinklo sąsają ir viešąjį IP adresą
Mūsų VM vis dar turi vieną (ar net kelias) tinklo sąsajas (NIC) – norėdami jas pašalinti kaip nereikalingas, pereikime prie nuosavybės NetworkInterfaces
mūsų VM objektą ir ištrinkite NIC naudodami komandą Remove-AzNetworkInterface
. Jei yra daugiau nei viena tinklo sąsaja, naudojame kilpą. Tuo pačiu metu kiekvienam NIC patikrinsime turtą IpConfiguration
nustatyti, ar sąsaja turi viešą IP adresą. Jei toks bus rastas, pašalinsime jį komanda Remove-AzPublicIpAddress
.
Štai tokio kodo pavyzdys, kai peržiūrime visus NIC, juos ištriname ir patikriname, ar yra viešas IP. Jei yra, analizuokite nuosavybę PublicIpAddress
, suraskite atitinkamo šaltinio pavadinimą pagal ID ir ištrinkite:
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
}
}
}
Sistemos disko pašalinimas
OS diskas yra dėmė, kuriai yra komanda jį ištrinti Remove-AzStorageBlob
- bet prieš jį vykdydami turėsite nustatyti reikiamas jo parametrų reikšmes. Norėdami tai padaryti, visų pirma turite gauti saugyklos, kurioje yra sistemos diskas, pavadinimą, tada perduoti jį šiai komandai kartu su atitinkama saugyklos paskyra.
$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]
Sistemos disko būsenos bloko pašalinimas
Norėdami tai padaryti, kaip tikriausiai jau atspėjote, paimame saugojimo talpyklą, kurioje saugomas šis diskas, ir tai reiškia, kad pabaigoje esančiame blobe yra status
, perduokite atitinkamus parametrus trynimo komandai Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Ir galiausiai pašaliname duomenų diskus
Mūsų VM vis tiek gali turėti diskus su prie jo pridėtais duomenimis. Jei jie nereikalingi, juos taip pat ištrinsime. Pirmiausia išnagrinėkime StorageProfile
mūsų VM ir suraskite turtą Uri
. Jei yra keli diskai, organizuojame ciklą pagal URI
. Kiekvienam URI rasime atitinkamą saugyklos paskyrą naudodami Get-AzStorageAccount
. Tada išanalizuokite saugyklos URI, kad ištrauktumėte norimą blob pavadinimą ir perduokite jį trynimo komandai Remove-AzStorageBlob
kartu su saugyklos paskyra. Štai kaip tai atrodytų kode:
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]
}
}
Ir dabar "mes pasiekėme laimingą pabaigą!" Dabar iš visų šių fragmentų turime surinkti vieną visumą. Malonus autorius Adamas Bertramas sutiko vartotojus pusiaukelėje ir padarė tai pats. Čia yra nuoroda į galutinį scenarijų Remove-AzrVirtualMachine.ps1:
→
Tikiuosi, kad šie praktiniai patarimai padės sutaupyti pastangų, laiko ir pinigų dirbant su „Azure“ virtualiosiomis mašinomis.
Šaltinis: www.habr.com