Modifikimi dhe fshirja e VM-ve Azure duke përdorur PowerShell

Duke përdorur PowerShell, inxhinierët dhe administratorët e TI-së automatizojnë me sukses detyra të ndryshme kur punojnë jo vetëm me mjedise, por edhe me infrastrukturat cloud, veçanërisht me Azure. Në disa raste, puna përmes PowerShell është shumë më e përshtatshme dhe më e shpejtë sesa të punosh përmes portalit Azure. Falë natyrës së tij ndër-platformë, PowerShell mund të përdoret në çdo sistem operativ.

Pavarësisht nëse përdorni Ubuntu, Red Hat ose Windows, PowerShell mund t'ju ndihmojë të kontrolloni burimet tuaja në renë kompjuterike. Duke përdorur modulin Azure PowerShell, për shembull, mund të vendosni çdo veti të makinave virtuale.

Në këtë artikull, ne do të shikojmë se si mund të përdorni PowerShell për të ndryshuar madhësinë e një VM në cloud Azure, si dhe për të fshirë një VM dhe objektet e lidhura me të.

Modifikimi dhe fshirja e VM-ve Azure duke përdorur PowerShell

Rëndësishme! Mos harroni të fshini duart me dezinfektues për t'u përgatitur për punë:

  • Do t'ju duhet një modul Moduli Azure PowerShell - mund të shkarkohet nga Galeria PowerShell me komandën Install-Module Az.
  • Ju duhet të vërtetoni në renë Azure ku makina virtuale po funksionon duke ekzekutuar komandën Connect-AzAccount.

Së pari, le të krijojmë një skript që do të ndryshojë madhësinë e një VM Azure. Le të hapim VS Code dhe të ruajmë një skript të ri PowerShell të quajtur Resize-AzVirtualMachine.ps1 — Ne do t'i shtojmë pjesë kodi teksa shembulli përparon.

Ne kërkojmë madhësitë e disponueshme të VM

Përpara se të ndryshoni madhësinë VM, duhet të zbuloni se cilat janë madhësitë e pranueshme për makinat virtuale në renë Azure. Për ta bërë këtë, duhet të ekzekutoni komandën Get-AzVMSize.

Pra, për makinën virtuale devvm01 nga grupi i burimeve dev Ne kërkojmë të gjitha madhësitë e mundshme të pranueshme:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Në problemet reale, natyrisht, në vend të Emri i grupit të burimit=dev и VMName=devvm01 ju do të specifikoni vlerat tuaja për këto parametra.)

Komanda do të kthejë diçka si kjo:

Modifikimi dhe fshirja e VM-ve Azure duke përdorur PowerShell

Këto janë të gjitha opsionet e mundshme të madhësisë që mund të vendosen për një makinë virtuale të caktuar.

Le të ndryshojmë madhësinë e makinës

Për shembull, ne do të ndryshojmë përmasat në një madhësi të re Standard_B1ls - ai është në vendin e parë në listën e mësipërme. (Në aplikacionet e jetës reale, sigurisht, ju zgjidhni çfarëdo madhësie që ju nevojitet.)

  1. Së pari duke përdorur komandën Get-AzVM ne marrim informacion për objektin tonë (makinë virtuale) duke e ruajtur atë në një variabël $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Më pas marrim pronën nga ky objekt .HardwareProfile.VmSize dhe vendosni vlerën e re të dëshiruar:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Dhe tani ne thjesht ekzekutojmë komandën e përditësimit të VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Ne sigurohemi që gjithçka shkoi mirë - për ta bërë këtë, ne përsëri kërkojmë informacion për objektin tonë dhe shikojmë pronën $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Nëse shohim atje Standard_B1ls - kjo do të thotë se gjithçka është në rregull, madhësia e makinës është ndryshuar. Ju mund të shkoni më tej dhe të ndërtoni suksesin tuaj duke ndryshuar përmasat e disa VM-ve në të njëjtën kohë duke përdorur një grup.

Po në lidhje me fshirjen e një VM në Azure?

Me fshirje, jo gjithçka është aq e thjeshtë dhe e drejtpërdrejtë sa mund të duket. Në fund të fundit, është e nevojshme të hiqni një numër burimesh që lidhen me këtë makinë, duke përfshirë:

  • Kontejnerët e ruajtjes së diagnostikimit të çizmeve
  • Ndërfaqet e rrjetit
  • Adresat IP publike
  • Disku i sistemit dhe pika ku ruhet statusi i tij
  • Disqet e të dhënave

Prandaj, ne do të krijojmë një funksion dhe do ta thërrasim atë Remove-AzrVirtualMachine - dhe do të fshijë jo vetëm Azure VM, por edhe të gjitha sa më sipër.

Ne shkojmë në mënyrën standarde dhe së pari marrim objektin tonë (VM) duke përdorur komandën Get-AzVm. Për shembull, le të jetë një makinë WINSRV19 nga grupi i burimeve MyTestVMs.

Le ta ruajmë këtë objekt së bashku me të gjitha vetitë e tij në një ndryshore $vm:

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

Heqja e kontejnerit me skedarë diagnostikues të nisjes

Kur krijoni një VM në Azure, përdoruesit i kërkohet gjithashtu të krijojë një enë për ruajtjen e diagnostikimit të nisjes (kontejneri i diagnostikimit të nisjes), në mënyrë që nëse ka probleme me nisjen, të ketë diçka për t'u drejtuar për zgjidhjen e problemeve. Megjithatë, kur VM-ja fshihet, ky kontejner lihet të vazhdojë ekzistencën e tij tani të pa qëllim. Le ta rregullojmë këtë situatë.

  1. Së pari, le të zbulojmë se cilës llogari ruajtëse i përket ky kontejner - për këtë duhet të gjejmë pronën storageUri në zorrët e objektit DiagnosticsProfile VM-ja jonë. Për këtë unë përdor këtë shprehje të rregullt:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Tani duhet të zbuloni emrin e kontejnerit, dhe për këtë ju duhet të merrni ID VM duke përdorur komandën 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. Tjetra, marrim emrin e grupit të burimeve të cilit i përket kontejneri:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Dhe tani kemi gjithçka që na nevojitet për të fshirë kontejnerin me komandën Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Heqja e VM-së

Tani le të fshijmë vetë makinën virtuale, pasi tashmë kemi krijuar një ndryshore $vm për objektin përkatës. Epo, le të ekzekutojmë komandën Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Heqja e ndërfaqes së rrjetit dhe adresës IP publike

VM-ja jonë ka ende një (ose edhe disa) ndërfaqe rrjeti (NIC) - për t'i hequr ato si të panevojshme, le të kalojmë në pronë NetworkInterfaces objektin tonë VM dhe fshini NIC me komandën Remove-AzNetworkInterface. Në rast se ka më shumë se një ndërfaqe rrjeti, ne përdorim një lak. Në të njëjtën kohë, për çdo NIC ne do të kontrollojmë pronën IpConfiguration për të përcaktuar nëse ndërfaqja ka një adresë IP publike. Nëse gjendet një, do ta heqim me komandë Remove-AzPublicIpAddress.

Këtu është një shembull i një kodi të tillë, ku ne shikojmë të gjitha NIC-të në një lak, i fshijmë ato dhe kontrollojmë nëse ka një IP publike. Nëse ka, atëherë analizoni pronën PublicIpAddress, gjeni emrin e burimit përkatës me ID dhe fshijeni atë:


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

Heqja e diskut të sistemit

Disku OS është një blob, për të cilin ekziston një komandë për ta fshirë Remove-AzStorageBlob - por para se ta ekzekutoni, do t'ju duhet të vendosni vlerat e kërkuara për parametrat e tij. Për ta bërë këtë, në veçanti, duhet të merrni emrin e kontejnerit të ruajtjes që përmban diskun e sistemit dhe më pas ta kaloni atë në këtë komandë së bashku me llogarinë përkatëse të ruajtjes.

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

Heqja e pikës së statusit të diskut të sistemit

Për ta bërë këtë, siç ndoshta e keni marrë tashmë me mend, ne marrim enën e ruajtjes në të cilën ruhet ky disk, dhe, duke nënkuptuar që njolla në fund përmban status, kaloni parametrat përkatës në komandën e fshirjes Remove-AzStorageBlob:

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

Dhe së fundi, ne heqim disqet e të dhënave

VM-ja jonë mund të kishte ende disqe me të dhëna që i ishin bashkangjitur. Nëse nuk nevojiten, do t'i fshijmë gjithashtu. Le ta analizojmë së pari StorageProfile VM-në tonë dhe gjeni pronën Uri. Nëse ka disa disqe, ne organizojmë një cikël sipas URI. Për çdo URI, do të gjejmë llogarinë përkatëse të ruajtjes duke përdorur Get-AzStorageAccount. Më pas analizoni URI-në e ruajtjes për të nxjerrë emrin e dëshiruar të pikës dhe ia kaloni komandës së fshirjes Remove-AzStorageBlob së bashku me një llogari ruajtëse. Kështu do të dukej në kod:

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

Dhe tani "ne kemi arritur fundin e lumtur!" Tani duhet të mbledhim një tërësi të vetme nga të gjitha këto fragmente. Autori i sjellshëm Adam Bertram takoi përdoruesit në gjysmë të rrugës dhe e bëri vetë. Këtu është një lidhje me skenarin përfundimtar të quajtur Hiq-AzrVirtualMachine.ps1:

GitHub

Shpresoj që këto këshilla praktike t'i gjeni të dobishme për të kursyer përpjekje, kohë dhe para kur punoni me VM-të Azure.

Burimi: www.habr.com

Shto një koment