PowerShell istifadə edərək Azure VM-lərin dəyişdirilməsi və silinməsi

PowerShell-dən istifadə edərək mühəndislər və İT administratorları təkcə yerli şirkətlərlə deyil, həm də bulud infrastrukturları, xüsusən Azure ilə işləyərkən müxtəlif tapşırıqları uğurla avtomatlaşdırırlar. Bəzi hallarda PowerShell vasitəsilə işləmək Azure portalı ilə işləməkdən qat-qat rahat və sürətli olur. Çarpaz platforma xarakteri sayəsində PowerShell istənilən əməliyyat sistemində istifadə edilə bilər.

İstər Ubuntu, Red Hat, istərsə də Windows ilə işləsəniz, PowerShell sizə bulud resurslarınızı idarə etməyə kömək edə bilər. Moduldan istifadə etməklə Azure PowerShellməsələn, virtual maşınların istənilən xassələrini təyin edə bilərsiniz.

Bu yazıda biz Azure buludunda VM-nin ölçüsünü dəyişmək, həmçinin VM-ni və onunla əlaqəli obyektləri silmək üçün PowerShell-dən necə istifadə edə biləcəyinizi nəzərdən keçirəcəyik.

PowerShell istifadə edərək Azure VM-lərin dəyişdirilməsi və silinməsi

Mühüm! İşə hazırlaşmaq üçün əllərinizi dezinfeksiyaedici ilə silməyi unutmayın:

  • Bir modula ehtiyacınız olacaq Azure PowerShell Modulu - əmri ilə PowerShell Qalereyasından endirilə bilər Install-Module Az.
  • Komandanı işlətməklə virtual maşının işlədiyi Azure buludunda autentifikasiya etməlisiniz Connect-AzAccount.

Əvvəlcə Azure VM-nin ölçüsünü dəyişdirəcək skript yaradaq. Gəlin VS Kodunu açaq və adlı yeni PowerShell skriptini saxlayaq Resize-AzVirtualMachine.ps1 — nümunə irəlilədikcə ona kod parçaları əlavə edəcəyik.

Mövcud VM ölçülərini tələb edirik

VM ölçüsünü dəyişməzdən əvvəl Azure buludunda virtual maşınlar üçün məqbul ölçülərin nə olduğunu öyrənməlisiniz. Bunu etmək üçün əmri yerinə yetirməlisiniz Get-AzVMSize.

Beləliklə, virtual maşın üçün devm01 resurs qrupundan dev Bütün mümkün məqbul ölçüləri tələb edirik:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Əsl problemlərdə, əlbəttə ki, əvəzinə ResourceGroupName=dev и VMName=devvm01 bu parametrlər üçün öz dəyərlərinizi təyin edəcəksiniz.)

Komanda bu kimi bir şey qaytaracaq:

PowerShell istifadə edərək Azure VM-lərin dəyişdirilməsi və silinməsi

Bunlar müəyyən bir virtual maşın üçün təyin edilə bilən bütün mümkün ölçü seçimləridir.

Gəlin maşının ölçüsünü dəyişək

Məsələn, ölçüsünü yeni bir ölçüyə dəyişəcəyik Standart_B1ls - yuxarıdakı siyahıda birinci yerdədir. (Real həyat tətbiqlərində, əlbəttə ki, sizə lazım olan ölçüləri seçirsiniz.)

  1. Əvvəlcə əmrdən istifadə edin Get-AzVM obyektimiz (virtual maşın) haqqında məlumatı dəyişəndə ​​saxlamaqla əldə edirik $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Sonra bu obyektdən əmlakı alırıq .HardwareProfile.VmSize və istədiyiniz yeni dəyəri təyin edin:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. İndi biz sadəcə VM yeniləmə əmrini yerinə yetiririk - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Hər şeyin yaxşı getdiyinə əminik - bunun üçün biz yenidən obyektimiz haqqında məlumat tələb edirik və əmlaka baxırıq $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Orda görsək Standart_B1ls - bu o deməkdir ki, hər şey qaydasındadır, maşının ölçüsü dəyişdirilib. Massivdən istifadə edərək eyni anda bir neçə VM-in ölçüsünü dəyişdirərək daha da irəli gedə və uğurunuzu artıra bilərsiniz.

Azure-da VM-i silmək haqqında nə demək olar?

Silinmə ilə hər şey göründüyü qədər sadə və sadə deyil. Axı, bu maşınla əlaqəli bir sıra resursları silmək lazımdır, o cümlədən:

  • Yükləmə diaqnostikası saxlama qabları
  • Şəbəkə interfeysləri
  • İctimai IP ünvanları
  • Sistem diski və onun statusunun saxlandığı blob
  • Məlumat diskləri

Buna görə də bir funksiya yaradacağıq və onu çağıracağıq Remove-AzrVirtualMachine - və o, təkcə Azure VM-ni deyil, həm də yuxarıdakıların hamısını siləcək.

Standart yolla gedirik və əvvəlcə əmrdən istifadə edərək obyektimizi (VM) alırıq Get-AzVm. Məsələn, maşın olsun WINSRV19 resurs qrupundan MyTestVMs.

Gəlin bu obyekti bütün xassələri ilə birlikdə dəyişənə saxlayaq $vm:

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

Yükləmə diaqnostikası faylları ilə konteynerin çıxarılması

Azure-da VM yaradarkən istifadəçidən yükləmə diaqnostikasının (yükləmə diaqnostikası konteyneri) saxlanması üçün konteyner yaratması da xahiş olunur ki, yükləmə ilə bağlı problemlər yaranarsa, problemlərin aradan qaldırılması üçün müraciət edə biləcəyiniz bir şey olsun. Bununla belə, VM silindikdə, bu konteyner indi məqsədsiz mövcudluğunu davam etdirmək üçün qalır. Gəlin bu vəziyyəti düzəldək.

  1. Əvvəlcə bu konteynerin hansı saxlama hesabına aid olduğunu öyrənək - bunun üçün əmlakı tapmalıyıq storageUri obyektin bağırsaqlarında DiagnosticsProfile bizim VM. Bunun üçün bu müntəzəm ifadədən istifadə edirəm:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. İndi konteynerin adını öyrənməlisiniz və bunun üçün əmrdən istifadə edərək VM ID-ni əldə etməlisiniz 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. Sonra konteynerin aid olduğu resurs qrupunun adını alırıq:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. İndi əmrlə konteyneri silmək üçün lazım olan hər şey var Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM-nin çıxarılması

İndi virtual maşının özünü silək, çünki biz artıq dəyişən yaratmışıq $vm müvafiq obyekt üçün. Yaxşı, əmri yerinə yetirək Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Şəbəkə interfeysinin və ictimai IP ünvanının silinməsi

Bizim VM-də hələ də bir (və ya bir neçə) şəbəkə interfeysi (NIC) var - onları lazımsız kimi aradan qaldırmaq üçün mülkdən keçək. NetworkInterfaces VM obyektimizi və NIC-ni əmrlə silin Remove-AzNetworkInterface. Birdən çox şəbəkə interfeysi olduqda, bir döngə istifadə edirik. Eyni zamanda, hər bir NIC üçün əmlakı yoxlayacağıq IpConfiguration interfeysin ümumi IP ünvanının olub olmadığını müəyyən etmək üçün. Əgər biri tapılarsa, biz onu komanda ilə siləcəyik Remove-AzPublicIpAddress.

Məhz belə kodun bir nümunəsidir, burada biz bir dövrədə bütün NIC-ləri nəzərdən keçiririk, onları silir və ictimai IP-nin olub olmadığını yoxlayırıq. Əgər varsa, əmlakı təhlil edin PublicIpAddress, ID ilə uyğun resursun adını tapın və silin:


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

Sistem diskinin çıxarılması

OS diski bir blobdur, bunun üçün onu silmək əmri var Remove-AzStorageBlob - lakin onu yerinə yetirməzdən əvvəl onun parametrləri üçün tələb olunan dəyərləri təyin etməlisiniz. Bunu etmək üçün, xüsusən, sistem diskini ehtiva edən saxlama konteynerinin adını almalı və sonra müvafiq saxlama hesabı ilə birlikdə bu əmrə ötürməlisiniz.

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

Sistem Diskinin Status Blobunun Silinməsi

Bunu etmək üçün, yəqin ki, artıq təxmin etdiyiniz kimi, biz bu diskin saxlandığı saxlama qabını götürürük və sonunda blob ehtiva etdiyini nəzərdə tuturuq. status, müvafiq parametrləri sil əmrinə ötürün Remove-AzStorageBlob:

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

Və nəhayət, məlumat disklərini çıxarırıq

Bizim VM-də hələ də ona əlavə edilmiş məlumatların olduğu disklər ola bilər. Onlara ehtiyac yoxdursa, onları da siləcəyik. Əvvəlcə onu təhlil edək StorageProfile bizim VM və əmlakı tapın Uri. Bir neçə disk varsa, ona görə bir dövr təşkil edirik URI. Hər bir URI üçün istifadə edərək müvafiq yaddaş hesabını tapacağıq Get-AzStorageAccount. Sonra istədiyiniz blob adını çıxarmaq və onu sil əmrinə ötürmək üçün yaddaş URI-ni təhlil edin Remove-AzStorageBlob yaddaş hesabı ilə birlikdə. Bu kodda belə görünəcək:

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

İndi "xoşbəxt sona çatdıq!" İndi bütün bu fraqmentlərdən vahid bir bütöv yığmaq lazımdır. Xeyirxah müəllif Adam Bertram istifadəçilərlə yarı yolda görüşdü və bunu özü etdi. Budur adlanan son skriptə bir keçid Remove-AzrVirtualMachine.ps1:

Github

Ümid edirəm ki, bu praktiki məsləhətləri Azure VM-lərlə işləyərkən səyinizə, vaxtınıza və pulunuza qənaət etmək üçün faydalı tapacaqsınız.

Mənbə: www.habr.com

Добавить комментарий