Guhertin û jêbirina VM-yên Azure bi karanîna PowerShell

Bi karanîna PowerShell, endezyar û rêveberên IT-ê dema ku ne tenê bi hundurê hundur, lê di heman demê de bi binesaziyên ewr re, nemaze bi Azure re dixebitin, karên cihêreng bi serfirazî otomatîk dikin. Di hin rewşan de, xebitandina bi PowerShell ji xebata bi portalê Azure re pir hêsantir û zûtir e. Bi saya cewhera xwe ya cross-platform, PowerShell dikare li ser her pergala xebitandinê were bikar anîn.

Ma hûn Ubuntu, Red Hat, an Windows-ê dimeşînin, PowerShell dikare ji we re bibe alîkar ku hûn çavkaniyên cloudê xwe kontrol bikin. Modulê bikar tînin Azure PowerShellMînakî, hûn dikarin her taybetmendiyên makîneyên virtual saz bikin.

Di vê gotarê de, em ê binihêrin ka hûn çawa dikarin PowerShell-ê bikar bînin da ku mezinahiya VM-ê di ewrê Azure de biguhezîne, û her weha VM-ek û tiştên pê ve girêdayî jêbirin.

Guhertin û jêbirina VM-yên Azure bi karanîna PowerShell

Girîng! Ji bîr nekin ku hûn destên xwe bi paqijkerê paqij bikin da ku ji bo xebatê amade bibin:

  • Hûn ê hewceyê modulek bikin Modula Azure PowerShell - ew dikare bi fermanê ji Galeriya PowerShell were dakêşandin Install-Module Az.
  • Pêdivî ye ku hûn di ewrê Azure de ku makîneya virtual bi xebitandina fermanê dimeşe rast rast bikin Connect-AzAccount.

Pêşîn, em skrîptek biafirînin ku dê mezinahiya Azure VM-ê biguhezîne. Werin em VS Code vekin û skrîptek nû ya PowerShell ku jê re tê gotin hilînin Biguherîne-AzVirtualMachine.ps1 - Her ku mînak pêş dikeve em ê perçeyên kodê lê zêde bikin.

Em pîvanên VM yên berdest daxwaz dikin

Berî ku hûn mezinahiya VM-ê biguhezînin, hûn hewce ne ku fêr bibin ka pîvanên pejirandî ji bo makîneyên virtual di ewrê Azure de çi ne. Ji bo vê yekê hûn hewce ne ku fermanê bimeşînin Get-AzVMSize.

Ji ber vê yekê ji bo makîneya virtual devvm01 ji koma çavkaniyê dev Em hemî pîvanên pejirandî yên gengaz daxwaz dikin:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Di pirsgirêkên rastîn de, bê guman, li şûna ResourceGroupName=dev и VMName=devvm01 hûn ê ji bo van pîvanan nirxên xwe diyar bikin.)

Ferman dê tiştek mîna vê vegerîne:

Guhertin û jêbirina VM-yên Azure bi karanîna PowerShell

Vana hemî vebijarkên mezinahiyê yên gengaz in ku dikarin ji bo makîneyek virtual ya diyarkirî werin danîn.

Werin em mezinahiya otomobîlê biguherînin

Mînakî, em ê mezinahiyek nû veguherînin Standard_B1ls - ew di lîsteya jorîn de di rêza yekem de ye. (Di serîlêdanên jiyana rast de, bê guman, hûn çi pîvana ku hûn hewce ne hilbijêrin.)

  1. Pêşî fermanê bikar tîne Get-AzVM em bi hilanîna wê di guherbarekê de li ser tişta xwe (makîna virtual) agahiyê distînin $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Dûv re em milkê ji vê tiştê digirin .HardwareProfile.VmSize û nirxa nû ya xwestî destnîşan bikin:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Û naha em tenê fermana nûvekirina VM-ê bicîh dikin - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Em pê ewle ne ku her tişt baş derbas bû - ji bo vê yekê, em dîsa li ser tiştê xwe agahdariya daxwaz dikin û li milkê dinêrin $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ger em li wir bibînin Standard_B1ls - ev tê wê wateyê ku her tişt bi rêkûpêk e, mezinahiya otomobîlê hatiye guhertin. Hûn dikarin pêşdetir biçin û serkeftina xwe bi nûkirina pîvana çend VM-an bi yekcarî bi karanîna arrayek ava bikin.

Di derbarê jêbirina VM-ê de li Azure çi ye?

Bi jêbirinê re, ne her tişt ew qas hêsan û hêsan e ku ew xuya dike. Beriya her tiştî, pêdivî ye ku hejmarek çavkaniyên ku bi vê makîneyê ve girêdayî ne werin rakirin, di nav de:

  • Konteynerên hilanînê yên tespîtkirina boot
  • Têkiliyên torê
  • Navnîşanên IP-ya gelemperî
  • Dîska pergalê û bloba ku rewşa wê tê hilanîn
  • Dîskên daneyê

Ji ber vê yekê, em ê fonksiyonek çêbikin û jê re bang bikin Remove-AzrVirtualMachine - û ew ê ne tenê Azure VM, lê her weha hemî jorîn jî jê bibe.

Em bi awayê standard diçin û pêşî mebesta xwe (VM) bi kar tînin Get-AzVm. Bo nimûne, bila ew otomobîlek be WINSRV19 ji koma çavkaniyê MyTestVMs.

Werin em vê nesnê digel hemî taybetmendiyên wê di nav guhêrbarekê de hilînin $vm:

$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs

Rakirina konteynerê bi pelên tespîtkirina bootê

Dema ku di Azure de VM-yek diafirîne, ji bikarhêner jî tê xwestin ku konteynirek ji bo hilanîna tespîtkirina bootê (konteynera tespîtkirina bootê) biafirîne, da ku heke di bootkirinê de pirsgirêk hebin, tiştek heye ku meriv ji bo çareserkirina pirsgirêkê serî lê bide. Lêbelê, dema ku VM were jêbirin, ev konteynir tê hiştin ku hebûna xwe ya nuha bê armanc bidomîne. Werin em vê rewşê sererast bikin.

  1. Pêşîn, em fêr bibin ka ev konteynir ji kîjan hesabê hilanînê ye - ji bo vê yekê em hewce ne ku milkê bibînin storageUri di nav gewriya tiştan de DiagnosticsProfile VM me. Ji bo vê ez vê îfadeya birêkûpêk bikar tînim:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Naha hûn hewce ne ku navê konteynerê fêr bibin, û ji bo vê yekê hûn hewce ne ku bi karanîna fermanê nasnameya VM bistînin 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. Dûv re, em navê koma çavkaniyê ya ku konteynir tê de ye digirin:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Û naha her tiştê me heye ku em bi fermanê konteynerê jêbirin Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Rakirina VM

Naha em makîneya virtual bixwe jêbirin, ji ber ku me berê guhêrbarek çêkiriye $vm ji bo tiştê têkildar. Baş e, em fermanê bimeşînin Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Rakirina pêwendiya torê û navnîşana IP-ya gelemperî

VM-ya me hîn jî yek (an tewra çend) navgînên torê (NIC) heye - ji bo ku wan wekî nepêwist derxînin, werin em li milkê biçin NetworkInterfaces object VM me û jêbirin NIC bi fermana Remove-AzNetworkInterface. Di rewşê de ku ji yek pêwendiya torê zêdetir hebe, em pêlekek bikar tînin. Di heman demê de, ji bo her NIC-ê em ê xanî kontrol bikin IpConfiguration ji bo destnîşankirina ka navber navnîşek IP-ya gelemperî heye yan na. Ger yek hat dîtin, em ê bi fermanê jêbirin Remove-AzPublicIpAddress.

Li vir mînakek kodek wusa ye, ku em li hemî NIC-ê di dorpêkek de digerin, wan jêbirin, û kontrol bikin ka IP-ya gelemperî heye. Ger hebe, wê hingê milkê parsek bikin PublicIpAddress, navê çavkaniya têkildar bi ID-ê bibînin û jêbirin:


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
        }
    }
}

Rakirina dîska pergalê

Dîska OS blobek e, ji bo ku emrê jêbirinê heye Remove-AzStorageBlob - lê berî ku hûn wê bicîh bikin, hûn ê hewce bikin ku ji bo pîvanên wê nirxên pêwîst destnîşan bikin. Ji bo kirina vê yekê, bi taybetî, hûn hewce ne ku navê konteynera hilanînê ya ku dîska pergalê vedihewîne bistînin, û dûv re wê bi hesabê hilanînê ya têkildar re vê fermanê derbas bikin.

$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]

Rakirina Blob Status Disk System

Ji bo vê yekê, wekî ku we berê jî texmîn kir, em konteynira hilanînê ya ku ev dîsk tê de hatî hilanîn digirin, û tê vê wateyê ku blobeya li dawiyê dihewîne status, Parametreyên têkildar bi fermana jêbirinê re derbas bikin Remove-AzStorageBlob:

$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob

Û di dawiyê de, em dîskên daneyê jê dikin

VM-ya me hîn jî dikare dîskên bi daneyên ku pê ve hatine girêdan hebin. Ger hewce nebe, em ê wan jî jêbirin. Ka em pêşî wê parsek bikin StorageProfile VM me û milkê bibînin Uri. Ger çend dîsk hebin, em li gorî çerxekê organîze dikin URI. Ji bo her URI, em ê hesabê hilanînê ya têkildar bikar bînin bibînin Get-AzStorageAccount. Dûv re URI-ya hilanînê parsek bikin da ku navê blobê ya xwestî derxînin û wê bidin fermana jêbirinê Remove-AzStorageBlob li gel hesabek hilanînê. Ya ku ew ê di kodê de xuya bike ev e:

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]
    }
}

Û naha "em gihîştin dawiya xweş!" Naha pêdivî ye ku em ji van hemî perçeyan yekaneyek bicivînin. Nivîskarê dilovan Adam Bertram di nîvê rê de bi bikarhêneran re hevdîtin kir û ew bixwe kir. Li vir lînka skrîpta dawî ya ku jê re tê gotin heye Rake-AzrVirtualMachine.ps1:

GitHub

Ez hêvî dikim ku hûn van serişteyên pratîkî ji bo ku hûn bi Azure VM-yan re bixebitin ji we re hewildan, dem û dravê xilas bikin alîkar bibînin.

Source: www.habr.com

Add a comment