PowerShell erabiliz, ingeniariek eta informatika-administratzaileek hainbat zeregin automatizatzen dituzte lokalekin ez ezik, hodeiko azpiegiturekin ere lan egiten dutenean, batez ere Azurerekin. Zenbait kasutan, PowerShell bidez lan egitea askoz erosoagoa eta azkarragoa da Azure atariaren bidez lan egitea baino. Plataforma anitzeko izaerari esker, PowerShell edozein sistema eragiletan erabil daiteke.
Ubuntu, Red Hat edo Windows exekutatzen ari zaren ala ez, PowerShell-ek zure hodeiko baliabideak kontrolatzen lagunduko dizu. Modulua erabiliz
Artikulu honetan, PowerShell nola erabil dezakezun aztertuko dugu Azure hodeian VM bat tamaina aldatzeko, baita VM bat eta hari lotutako objektuak ezabatzeko ere.
Garrantzitsua da! Ez ahaztu eskuak desinfektatzailearekin garbitzea lanerako prestatzeko:
- Modulu bat beharko duzu Azure PowerShell modulua - PowerShell Gallery-tik deskargatu daiteke komandoarekin
Install-Module Az
. - Makina birtuala exekutatzen ari den Azure hodeian autentifikatu behar duzu komandoa exekutatuz
Connect-AzAccount
.
Lehenik eta behin, sor dezagun Azure VM baten tamaina aldatuko duen script bat. Ireki dezagun VS Code eta gorde dezagun izeneko PowerShell script berri bat Tamaina aldatu-AzVirtualMachine.ps1 β adibidea aurrera doan heinean kode zatiak gehituko dizkiogu.
Eskuragarri dauden VM tamainak eskatzen ditugu
VM tamaina aldatu aurretik, aurkitu behar duzu zein diren onargarriak diren tamaina makina birtualek Azure hodeian. Horretarako komandoa exekutatu behar duzu Get-AzVMSize
.
Beraz, makina birtualarentzat devvm01 baliabide taldetik dev Onar daitezkeen neurri guztiak eskatzen ditugu:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Benetako arazoetan, noski, beharrean ResourceGroupName=garapena ΠΈ VMName=devvm01 parametro hauetarako zure balioak zehaztuko dituzu.)
Komandoak honelako zerbait itzuliko du:
Hauek makina birtual jakin baterako ezar daitezkeen tamaina aukera posible guztiak dira.
Aldatu dezagun autoa
Adibidez, tamaina berri batera aldatuko dugu Standard_B1ls - goiko zerrendako lehen postuan dago. (Bizitza errealeko aplikazioetan, noski, behar duzun tamaina aukeratzen duzu.)
- Lehenengo komandoa erabiliz
Get-AzVM
gure objektuari (makina birtuala) informazioa lortzen dugu aldagai batean gordeta$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Ondoren, objektu honetatik propietatea hartuko dugu
.HardwareProfile.VmSize
eta ezarri nahi duzun balio berria:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Eta orain VM eguneratzeko komandoa exekutatu besterik ez dugu egiten -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Dena ondo joan dela ziurtatzen dugu; horretarako, berriro ere gure objektuari buruzko informazioa eskatzen dugu eta jabetza begiratu
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Hor ikusten badugu Standard_B1ls - Horrek esan nahi du dena ondo dagoela, autoaren tamaina aldatu dela. Harago joan zaitezke eta zure arrakasta eraiki dezakezu hainbat VM aldi berean tamainaz array bat erabiliz.
Zer gertatzen da Azure-n VM bat ezabatzearekin?
Ezabatzearekin, dena ez da dirudien bezain erraza eta zuzena. Azken finean, beharrezkoa da makina honekin lotutako baliabide batzuk kentzea, besteak beste:
- Abio-diagnostikoak biltegiratzeko edukiontziak
- Sareko interfazeak
- IP helbide publikoak
- Sistemaren diskoa eta bere egoera gordetzen den blob
- Datu-diskoak
Horregatik, funtzio bat sortu eta deituko diogu Remove-AzrVirtualMachine
- eta Azure VM ez ezik, goiko guztiak ere ezabatuko ditu.
Modu estandarrera joango gara eta lehenik gure objektua (VM) lortzen dugu komandoa erabiliz Get-AzVm
. Esaterako, kotxe bat izan dadila WINSRV19 baliabide taldetik MyTestVMs.
Gorde dezagun objektu hau bere propietate guztiekin aldagai batean $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Abioko diagnostiko fitxategiekin edukiontzia kentzea
Azure-n VM bat sortzean, erabiltzaileari ere eskatzen zaio abioko diagnostikoak gordetzeko edukiontzi bat sortzea (abioko diagnostikoen edukiontzia), abiaraztearekin arazoak izanez gero, arazoak konpontzeko zerbaitetara jotzeko. Hala ere, VM ezabatzen denean, edukiontzi honek orain helbururik gabeko existentzian jarraitzeko uzten da. Konpon dezagun egoera hau.
- Lehenik eta behin, jakin dezagun zein biltegiratze konturi dagokion edukiontzi hori; horretarako, jabetza aurkitu behar dugu
storageUri
objektuaren erraietanDiagnosticsProfile
gure VM. Horretarako esamolde erregular hau erabiltzen dut:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Orain edukiontziaren izena ezagutu behar duzu, eta horretarako VM IDa lortu behar duzu komandoa erabiliz
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)
- Ondoren, edukiontziari dagokion baliabide-taldearen izena jasoko dugu:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Eta orain komandoarekin edukiontzia ezabatzeko behar dugun guztia daukagu
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
VM kentzea
Orain ezaba dezagun makina birtuala bera, aldagai bat sortu baitugu jada $vm
dagokion objekturako. Tira, exekutatu dezagun komandoa Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Sareko interfazea eta IP helbide publikoa kentzea
Gure VM sare-interfaze (NIC) bat (edo hainbat) ditu oraindik - beharrezkoak ez diren moduan kentzeko, joan gaitezen jabetza NetworkInterfaces
gure VM objektua eta ezabatu NIC komandoarekin Remove-AzNetworkInterface
. Sareko interfaze bat baino gehiago badago, begizta bat erabiltzen dugu. Aldi berean, NIC bakoitzeko jabetza egiaztatuko dugu IpConfiguration
interfazeak IP helbide publikoa duen zehazteko. Bat aurkitzen bada, komandoarekin kenduko dugu Remove-AzPublicIpAddress
.
Hona hemen kode horren adibide bat, non NIC guztiak begizta batean begiratu, ezabatu eta IP publikorik dagoen egiaztatzen dugun. Bada, analizatu propietatea PublicIpAddress
, bilatu dagokion baliabidearen izena IDaren arabera eta ezabatu:
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
}
}
}
Sistemaren diskoa kentzea
OS diskoa blob bat da, eta horretarako ezabatzeko komando bat dago Remove-AzStorageBlob
- baina exekutatu aurretik, bere parametroetarako beharrezko balioak ezarri beharko dituzu. Horretarako, bereziki, sistemaren diskoa duen biltegiratze-edukiontziaren izena lortu behar duzu, eta, ondoren, komando honi dagokion biltegiratze-kontuarekin batera pasatu.
$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]
Sistemaren diskoaren egoera blob kentzea
Horretarako, ziurrenik dagoeneko asmatu duzuen bezala, disko hau gordetzen den biltegiratze-edukiontzia hartuko dugu, eta, amaierako blobak duela adieraziz. status
, pasa ezazu dagozkion parametroak ezabatu komandoari Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Eta azkenik, datu-diskoak kenduko ditugu
Gure VM-k oraindik erantsita zeuden datuak dituzten diskoak izan ditzake. Behar ez badira, horiek ere ezabatu egingo ditugu. Analiza dezagun lehenik StorageProfile
gure VM eta aurkitu jabetza Uri
. Hainbat disko badaude, ziklo bat antolatzen dugu URI
. URI bakoitzeko, dagokion biltegiratze-kontua aurkituko dugu erabiliz Get-AzStorageAccount
. Ondoren, analizatu biltegiratze URIa nahi duzun blob izena ateratzeko eta pasa ezazu ezabatu komandora Remove-AzStorageBlob
biltegiratze kontu batekin batera. Hauxe izango litzateke kodean:
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]
}
}
Eta orain "bukaera zoriontsura iritsi gara!" Orain zati horietatik guztietatik osotasun bakar bat muntatu behar dugu. Adam Bertram egile jatorra erdibidean ezagutu zituen erabiltzaileak eta berak egin zuen. Hona hemen izeneko azken gidoirako esteka Kendu-AzrVirtualMachine.ps1:
β
Aholku praktiko hauek lagungarriak izango zaizkizula esfortzua, denbora eta dirua aurrezteko Azure VM-ekin lan egiten duzunean.
Iturria: www.habr.com