PowerShell erabiliz Azure VM-ak aldatzea eta ezabatzea

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 Azure PowerShell, adibidez, makina birtualen edozein propietate ezar dezakezu.

Artikulu honetan, PowerShell nola erabil dezakezun aztertuko dugu Azure hodeian VM bat tamaina aldatzeko, baita VM bat eta hari lotutako objektuak ezabatzeko ere.

PowerShell erabiliz Azure VM-ak aldatzea eta ezabatzea

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:

PowerShell erabiliz Azure VM-ak aldatzea eta ezabatzea

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.)

  1. Lehenengo komandoa erabiliz Get-AzVM gure objektuari (makina birtuala) informazioa lortzen dugu aldagai batean gordeta $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Ondoren, objektu honetatik propietatea hartuko dugu .HardwareProfile.VmSize eta ezarri nahi duzun balio berria:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Eta orain VM eguneratzeko komandoa exekutatu besterik ez dugu egiten - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. 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.

  1. Lehenik eta behin, jakin dezagun zein biltegiratze konturi dagokion edukiontzi hori; horretarako, jabetza aurkitu behar dugu storageUri objektuaren erraietan DiagnosticsProfile gure VM. Horretarako esamolde erregular hau erabiltzen dut:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. 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)
    
  3. Ondoren, edukiontziari dagokion baliabide-taldearen izena jasoko dugu:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. 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:

β†’ GitHub

Aholku praktiko hauek lagungarriak izango zaizkizula esfortzua, denbora eta dirua aurrezteko Azure VM-ekin lan egiten duzunean.

Iturria: www.habr.com

Gehitu iruzkin berria