PowerShelli abil automatiseerivad insenerid ja IT-administraatorid edukalt erinevaid ülesandeid, töötades mitte ainult kohapealsete, vaid ka pilveinfrastruktuuridega, eriti Azure'iga. Mõnel juhul on PowerShelli kaudu töötamine palju mugavam ja kiirem kui Azure'i portaali kaudu töötamine. Tänu oma platvormidevahelisele olemusele saab PowerShelli kasutada mis tahes operatsioonisüsteemis.
Olenemata sellest, kas kasutate Ubuntu, Red Hat või Windows, aitab PowerShell teil oma pilveressursse juhtida. Mooduli kasutamine
Selles artiklis vaatleme, kuidas saate PowerShelli abil muuta Azure'i pilves oleva virtuaalse masina suurust ning kustutada virtuaalmasinat ja sellega seotud objekte.
Tähtis! Ärge unustage tööks valmistumiseks käsi desinfitseerimisvahendiga pühkida:
- Teil on vaja moodulit Azure PowerShelli moodul - selle saab alla laadida PowerShelli galeriist käsuga
Install-Module Az
. - Peate autentima Azure'i pilves, kus virtuaalmasin töötab, käivitades käsu
Connect-AzAccount
.
Kõigepealt loome skripti, mis muudab Azure'i virtuaalse masina suurust. Avame VS Code ja salvestame uue PowerShelli skripti nimega Resize-AzVirtualMachine.ps1 — lisame näite edenedes sellele kooditükke.
Soovime saadaolevaid VM-i suurusi
Enne VM-i suuruse muutmist peate välja selgitama, millised on Azure'i pilves olevate virtuaalsete masinate jaoks vastuvõetavad suurused. Selleks peate käivitama käsu Get-AzVMSize
.
Nii virtuaalmasina jaoks devvm01 ressursirühmast Dev Soovime kõiki võimalikke vastuvõetavaid suurusi:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Tegelike probleemide korral muidugi selle asemel ResourceGroupName=dev и VMName=devvm01 määrate nende parameetrite jaoks oma väärtused.)
Käsk tagastab midagi sellist:
Need on kõik võimalikud suurusevalikud, mida saab antud virtuaalmasina jaoks määrata.
Muudame auto suurust
Näiteks muudame suuruse uueks Standard_B1ls - ta on ülaltoodud nimekirjas esimesel kohal. (Tegelikes rakendustes valite loomulikult mis tahes suuruse, mida vajate.)
- Esmalt käsu kasutamine
Get-AzVM
saame informatsiooni oma objekti (virtuaalmasina) kohta, salvestades selle muutujasse$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Siis võtame sellelt objektilt kinnistu
.HardwareProfile.VmSize
ja määrake soovitud uus väärtus:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Ja nüüd täidame lihtsalt VM-i värskenduskäsu -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Veendume, et kõik sujus - selleks küsime taas infot oma objekti kohta ja vaatame kinnisvara üle
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Kui me seal näeme Standard_B1ls - see tähendab, et kõik on korras, auto suurust on muudetud. Saate minna kaugemale ja oma edule tugineda, muutes massiivi abil korraga mitme virtuaalse masina suurust.
Aga VM-i kustutamine Azure'is?
Kustutamise korral pole kõik nii lihtne ja arusaadav, kui võib tunduda. Lõppude lõpuks on vaja eemaldada mitu selle masinaga seotud ressurssi, sealhulgas:
- Alglaadimisdiagnostika salvestuskonteinerid
- Võrgu liidesed
- Avalikud IP-aadressid
- Süsteemi ketas ja blob, kuhu selle olek on salvestatud
- Andmekettad
Seetõttu loome funktsiooni ja kutsume selle välja Remove-AzrVirtualMachine
- ja see kustutab mitte ainult Azure VM-i, vaid ka kõik ülalmainitu.
Me läheme tavapärast teed ja hankime kõigepealt käsu abil oma objekti (VM). Get-AzVm
. Näiteks olgu selleks auto WINSRV19 ressursirühmast MyTestVM-id.
Salvestame selle objekti koos kõigi selle omadustega muutujasse $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Alglaadimisdiagnostika failidega konteineri eemaldamine
Azure'is VM-i loomisel palutakse kasutajal luua ka alglaadimisdiagnostika salvestamiseks konteiner (boot Diagnoss konteiner), et kui alglaadimisel on probleeme, siis oleks mille poole pöörduda tõrkeotsinguks. Kui aga VM kustutatakse, jääb see konteiner oma praegu sihitut eksisteerimist jätkama. Parandame selle olukorra.
- Kõigepealt uurime, millisele salvestuskontole see konteiner kuulub – selleks peame leidma vara
storageUri
objekti soolestikusDiagnosticsProfile
meie VM. Selleks kasutan regulaaravaldist:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Nüüd peate välja selgitama konteineri nime ja selleks peate käsu abil saama 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)
- Järgmisena saame selle ressursirühma nime, kuhu konteiner kuulub:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Ja nüüd on meil kõik, mida vajame konteineri kustutamiseks käsuga
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
VM-i eemaldamine
Nüüd kustutame virtuaalse masina enda, kuna oleme juba muutuja loonud $vm
vastava objekti jaoks. Noh, käivitame käsu Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Võrguliidese ja avaliku IP-aadressi eemaldamine
Meie VM-il on endiselt üks (või isegi mitu) võrguliidest (NIC) – et need mittevajalikena eemaldada, tutvume atribuudiga NetworkInterfaces
meie VM-objekti ja kustutage NIC käsuga Remove-AzNetworkInterface
. Kui võrguliideseid on rohkem kui üks, kasutame silmust. Samal ajal kontrollime iga võrgukaarti vara IpConfiguration
et teha kindlaks, kas liidesel on avalik IP-aadress. Kui selline leitakse, eemaldame selle käsuga Remove-AzPublicIpAddress
.
Siin on näide just sellisest koodist, kus vaatame tsüklis läbi kõik NIC-id, kustutame need ja kontrollime, kas seal on avalik IP. Kui on, siis sõeluge vara PublicIpAddress
, leidke ID järgi vastava ressursi nimi ja kustutage see:
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
}
}
}
Süsteemiketta eemaldamine
OS-i ketas on blob, mille kustutamiseks on käsk Remove-AzStorageBlob
- kuid enne selle käivitamist peate määrama selle parameetrite jaoks vajalikud väärtused. Selleks peate hankima süsteemiketast sisaldava salvestuskonteineri nime ja seejärel edastama selle sellele käsule koos vastava salvestuskontoga.
$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]
Süsteemiketta olekuploki eemaldamine
Selleks, nagu arvatavasti juba arvasite, võtame salvestusmahuti, kuhu see ketas on salvestatud, ja tähendab, et lõpus olev plekk sisaldab status
, edastage vastavad parameetrid kustutamiskäsku Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Ja lõpuks eemaldame andmekettad
Meie virtuaalmasinal võib endiselt olla kettaid andmetega, mis olid sellele lisatud. Kui neid pole vaja, kustutame ka need. Esmalt analüüsime seda StorageProfile
meie VM ja leidke kinnisvara Uri
. Kui plaate on mitu, korraldame tsükli vastavalt URI
. Iga URI jaoks leiame vastava salvestuskonto, kasutades Get-AzStorageAccount
. Seejärel sõeluge salvestusruumi URI, et eraldada soovitud blobi nimi ja edastada see kustutamiskäsule Remove-AzStorageBlob
koos salvestuskontoga. See näeks koodis välja selline:
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 peame kõigist nendest fragmentidest kokku panema ühtse terviku. Lahke autor Adam Bertram tuli kasutajatele poolel teel vastu ja tegi seda ise. Siin on link lõplikule skriptile nimega Eemalda-AzrVirtualMachine.ps1:
→
Loodan, et need praktilised näpunäited aitavad säästa teie vaeva, aega ja raha, kui töötate Azure'i VM-idega.
Allikas: www.habr.com