Il-modifika u t-tħassir ta’ Azure VMs bl-użu ta’ PowerShell

Bl-użu ta’ PowerShell, l-inġiniera u l-amministraturi tal-IT awtomat b’suċċess diversi kompiti meta jaħdmu mhux biss mal-post, iżda wkoll mal-infrastrutturi tal-cloud, b’mod partikolari ma’ Azure. F'xi każijiet, ix-xogħol permezz ta' PowerShell huwa ħafna aktar konvenjenti u aktar mgħaġġel milli jaħdem permezz tal-portal Azure. Grazzi għan-natura cross-platform tiegħu, PowerShell jista 'jintuża fuq kwalunkwe sistema operattiva.

Kemm jekk qed tħaddem Ubuntu, Red Hat, jew Windows, PowerShell jista' jgħinek tikkontrolla r-riżorsi tal-cloud tiegħek. Bl-użu tal-modulu Azure PowerShell, per eżempju, tista 'tissettja kwalunkwe proprjetajiet ta' magni virtwali.

F'dan l-artikolu, aħna ser inħarsu lejn kif tista 'tuża PowerShell biex tibdel id-daqs ta' VM fil-sħaba ta 'Azure, kif ukoll tħassar VM u l-oġġetti assoċjati tagħha.

Il-modifika u t-tħassir ta’ Azure VMs bl-użu ta’ PowerShell

Importanti! Tinsiex timsaħ idejk b'sanitizer biex tipprepara għax-xogħol:

  • Ikollok bżonn modulu Modulu Azure PowerShell - jista 'jitniżżel mill-Gallerija PowerShell bil-kmand Install-Module Az.
  • Ikollok bżonn tawtentika fil-sħaba Azure fejn il-magna virtwali tkun qed taħdem billi tħaddem il-kmand Connect-AzAccount.

L-ewwel, ejja noħolqu skript li se jbiddel id-daqs ta 'Azure VM. Ejja niftħu VS Code u nissejvjaw script PowerShell ġdid imsejjaħ Resize-AzVirtualMachine.ps1 — se nżidu biċċiet ta' kodiċi miegħu hekk kif l-eżempju javvanza.

Aħna nitolbu d-daqsijiet tal-VM disponibbli

Qabel ma tibdel id-daqs tal-VM, trid issir taf x'inhuma d-daqsijiet aċċettabbli għall-magni virtwali fil-sħaba Azure. Biex tagħmel dan għandek bżonn tmexxi l-kmand Get-AzVMSize.

Allura għall-magna virtwali devvm01 mill-grupp tar-riżorsi dev Aħna nitolbu d-daqsijiet aċċettabbli kollha possibbli:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Fi problemi reali, ovvjament, minflok ResourceGroupName=dev и VMName=devvm01 int se tispeċifika l-valuri tiegħek għal dawn il-parametri.)

Il-kmand se jirritorna xi ħaġa bħal din:

Il-modifika u t-tħassir ta’ Azure VMs bl-użu ta’ PowerShell

Dawn huma kollha għażliet ta 'daqs possibbli li jistgħu jiġu stabbiliti għal magna virtwali partikolari.

Ejja nbiddlu d-daqs tal-karozza

Pereżempju, aħna se nbiddlu d-daqs għal daqs ġdid Standard_B1ls - huwa fl-ewwel post fil-lista ta' hawn fuq. (F'applikazzjonijiet tal-ħajja reali, ovvjament, tagħżel kwalunkwe daqs li għandek bżonn.)

  1. L-ewwel tuża l-kmand Get-AzVM nikbru informazzjoni dwar l-oġġett tagħna (magna virtwali) billi naħżnuha f'varjabbli $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Imbagħad nieħdu l-proprjetà minn dan l-oġġett .HardwareProfile.VmSize u ssettja l-valur ġdid mixtieq:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. U issa aħna sempliċement tesegwixxi l-kmand tal-aġġornament tal-VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Aħna niżguraw li kollox mar tajjeb - biex nagħmlu dan, nerġgħu nitolbu informazzjoni dwar l-oġġett tagħna u nħarsu lejn il-proprjetà $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Jekk naraw hemm Standard_B1ls - dan ifisser li kollox huwa fl-ordni, id-daqs tal-karozza nbidel. Tista 'tmur lil hinn u tibni fuq is-suċċess tiegħek billi tibni d-daqs ta' diversi VMs f'daqqa billi tuża firxa.

Xi ngħidu dwar it-tħassir ta' VM f'Azure?

Bit-tħassir, mhux kollox huwa sempliċi u sempliċi kemm jista' jidher. Wara kollox, huwa meħtieġ li jitneħħew numru ta 'riżorsi assoċjati ma' din il-magna, inklużi:

  • Kontenituri tal-ħażna tad-dijanjostiċi tal-boot
  • Interfaces tan-netwerk
  • Indirizzi IP pubbliċi
  • Diska tas-sistema u blob fejn jinħażen l-istatus tagħha
  • Diski tad-dejta

Għalhekk, aħna se noħolqu funzjoni u nsejħulha Remove-AzrVirtualMachine - u se tħassar mhux biss Azure VM, iżda wkoll dak kollu ta 'hawn fuq.

Immorru l-mod standard u l-ewwel nikseb l-oġġett tagħna (VM) billi tuża l-kmand Get-AzVm. Per eżempju, ħalliha tkun karozza WINSRV19 mill-grupp tar-riżorsi MyTestVMs.

Ejja nsalvaw dan l-oġġett flimkien mal-proprjetajiet kollha tiegħu f'varjabbli $vm:

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

It-tneħħija tal-kontenitur bil-fajls dijanjostiċi tal-boot

Meta toħloq VM f'Azure, l-utent jintalab ukoll joħloq kontenitur għall-ħażna tad-dijanjostiċi tal-boot (kontenitur tad-dijanjosi tal-boot), sabiex jekk ikun hemm problemi bl-ibbutjar, ikun hemm xi ħaġa li jdur għalih biex issolvi l-problemi. Madankollu, meta l-VM titħassar, dan il-kontenitur jitħalla jkompli l-eżistenza tiegħu issa bla skop. Ejja nirranġaw din is-sitwazzjoni.

  1. L-ewwel, ejja nsiru nafu għal liema kont tal-ħażna jappartjeni dan il-kontenitur - għal dan irridu nsibu l-proprjetà storageUri fl-imsaren tal-oġġett DiagnosticsProfile VM tagħna. Għal dan jien nuża din l-espressjoni regolari:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Issa trid issir taf l-isem tal-kontenitur, u għal dan għandek bżonn tikseb l-ID VM billi tuża l-kmand 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. Sussegwentement, inġibu l-isem tal-grupp tar-riżorsi li għalih jappartjeni l-kontenitur:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. U issa għandna dak kollu li għandna bżonn biex inħassru l-kontenitur bil-kmand Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Tneħħi l-VM

Issa ejja nħassru l-magna virtwali nnifisha, peress li diġà ħloqna varjabbli $vm għall-oġġett korrispondenti. Ukoll, ejja tmexxi l-kmand Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Tneħħi l-interface tan-netwerk u l-indirizz IP pubbliku

Il-VM tagħna għad għandha waħda (jew saħansitra diversi) interfaces tan-netwerk (NICs) - biex tneħħihom bħala mhux meħtieġa, ejja ngħaddu mill-proprjetà NetworkInterfaces l-oġġett VM tagħna u ħassar in-NIC bil-kmand Remove-AzNetworkInterface. F'każ li jkun hemm aktar minn interface tan-netwerk wieħed, nużaw loop. Fl-istess ħin, għal kull NIC aħna niċċekkjaw il-proprjetà IpConfiguration biex tiddetermina jekk l-interface għandhiex indirizz IP pubbliku. Jekk jinstab wieħed, inneħħuha bil-kmand Remove-AzPublicIpAddress.

Hawn eżempju ta 'kodiċi bħal dan biss, fejn inħarsu mill-NICs kollha f'linja, inħassruhom, u niċċekkjaw jekk hemmx IP pubbliku. Jekk ikun hemm, imbagħad parse l-proprjetà PublicIpAddress, sib l-isem tar-riżors korrispondenti bl-ID u ħassarha:


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

Tneħħi d-disk tas-sistema

Id-diska tal-OS hija blob, li għaliha hemm kmand biex tħassarha Remove-AzStorageBlob - iżda qabel ma tesegwixxi, ser ikollok bżonn tissettja l-valuri meħtieġa għall-parametri tagħha. Biex tagħmel dan, b'mod partikolari, għandek bżonn tikseb l-isem tal-kontenitur tal-ħażna li fih id-diska tas-sistema, u mbagħad tgħaddih lil dan il-kmand flimkien mal-kont tal-ħażna korrispondenti.

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

Tneħħi l-Blob tal-Istat tad-Disk tas-Sistema

Biex tagħmel dan, kif probabilment diġà qtajt, nieħdu l-kontenitur tal-ħażna li fih hija maħżuna din id-diska, u, li timplika li l-blob fl-aħħar fih status, jgħaddi l-parametri korrispondenti għall-kmand tat-tħassir Remove-AzStorageBlob:

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

U fl-aħħar nett, inneħħu d-diski tad-dejta

Il-VM tagħna xorta jista 'jkollu diski b'dejta li kienu mehmuża magħha. Jekk ma jkunux meħtieġa, aħna nħassruhom ukoll. Ejja parseha l-ewwel StorageProfile VM tagħna u ssib il-proprjetà Uri. Jekk hemm diversi diski, norganizzaw ċiklu skond URI. Għal kull URI, insibu l-kont tal-ħażna korrispondenti bl-użu Get-AzStorageAccount. Imbagħad analizza l-URI tal-ħażna biex tiġbed l-isem tal-blob mixtieq u għaddih lill-kmand tat-tħassir Remove-AzStorageBlob flimkien ma 'kont tal-ħażna. Dan huwa kif jidher fil-kodiċi:

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

U issa "ilħaqna t-tmiem kuntenti!" Issa għandna bżonn niġbru sħaħ wieħed minn dawn il-frammenti kollha. L-awtur tip Adam Bertram iltaqa' mal-utenti nofs triq u għamel dan hu stess. Hawnhekk hawn link għall-iskrittura finali msejħa Neħħi-AzrVirtualMachine.ps1:

GitHub

Nispera li ssib dawn il-pariri prattiċi ta’ għajnuna biex tiffranka l-isforz, il-ħin u l-flus meta taħdem ma’ Azure VMs.

Sors: www.habr.com

Żid kumment