Измена и брисање Азуре ВМ-а помоћу ПоверСхелл-а

Користећи ПоверСхелл, инжењери и ИТ администратори успешно аутоматизују различите задатке када раде не само са локалним, већ и са инфраструктурама у облаку, посебно са Азуре-ом. У неким случајевима, рад преко ПоверСхелл-а је много практичнији и бржи од рада преко Азуре портала. Захваљујући својој вишеплатформској природи, ПоверСхелл се може користити на било ком оперативном систему.

Без обзира да ли користите Убунту, Ред Хат или Виндовс, ПоверСхелл вам може помоћи да контролишете своје ресурсе у облаку. Коришћење модула Азуре ПоверСхелл, на пример, можете да подесите било која својства виртуелних машина.

У овом чланку ћемо погледати како можете да користите ПоверСхелл да промените величину ВМ-а у Азуре облаку, као и да избришете ВМ и повезане објекте.

Измена и брисање Азуре ВМ-а помоћу ПоверСхелл-а

Важно! Не заборавите да обришете руке средством за дезинфекцију да бисте се припремили за посао:

  • Требаће вам модул Азуре ПоверСхелл модул - може се преузети из ПоверСхелл галерије помоћу команде Install-Module Az.
  • Потребно је да се аутентификујете у Азуре облаку где виртуелна машина ради тако што ћете покренути команду Connect-AzAccount.

Прво, направимо скрипту која ће променити величину Азуре ВМ-а. Хајде да отворимо ВС Цоде и сачувамо нову ПоверСхелл скрипту под називом Ресизе-АзВиртуалМацхине.пс1 — додаћемо му делове кода како пример буде напредовао.

Захтевамо доступне величине ВМ-а

Пре него што промените величину ВМ-а, морате да сазнате које су прихватљиве величине за виртуелне машине у Азуре облаку. Да бисте то урадили, потребно је да покренете команду Get-AzVMSize.

Дакле, за виртуелну машину деввм01 из групе ресурса дев Захтевамо све могуће прихватљиве величине:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(У стварним проблемима, наравно, уместо РесоурцеГроупНаме=дев и ВМНаме=деввм01 Ви ћете одредити сопствене вредности за ове параметре.)

Команда ће вратити нешто овако:

Измена и брисање Азуре ВМ-а помоћу ПоверСхелл-а

Ово су све могуће опције величине које се могу подесити за дату виртуелну машину.

Хајде да променимо величину аутомобила

На пример, променићемо величину на нову величину Стандард_Б1лс - он је на првом месту на горњој листи. (У реалним апликацијама, наравно, бирате величину која вам је потребна.)

  1. Прво користећи команду Get-AzVM добијамо информације о нашем објекту (виртуелној машини) тако што их чувамо у променљивој $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Затим узимамо својство из овог објекта .HardwareProfile.VmSize и поставите жељену нову вредност:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. А сада једноставно извршавамо наредбу за ажурирање ВМ-а - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Уверавамо се да је све прошло како треба - да бисмо то урадили, поново тражимо информације о нашем објекту и прегледамо имовину $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ако видимо тамо Стандард_Б1лс - то значи да је све у реду, величина аутомобила је промењена. Можете ићи даље и надограђивати свој успех тако што ћете променити величину неколико ВМ одједном користећи низ.

Шта је са брисањем ВМ-а у Азуре-у?

Са брисањем није све тако једноставно и јасно као што се чини. На крају крајева, потребно је уклонити бројне ресурсе повезане са овом машином, укључујући:

  • Контејнери за складиштење дијагностике покретања
  • Мрежни интерфејси
  • Јавне ИП адресе
  • Системски диск и блоб где се чува његов статус
  • Дискови са подацима

Стога ћемо креирати функцију и позвати је Remove-AzrVirtualMachine - и то ће избрисати не само Азуре ВМ, већ и све горе наведено.

Идемо стандардним путем и прво добијамо наш објекат (ВМ) користећи команду Get-AzVm. На пример, нека то буде ауто ВИНСРВ19 из групе ресурса МиТестВМс.

Хајде да сачувамо овај објекат заједно са свим његовим својствима у променљиву $vm:

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

Уклањање контејнера са дијагностичким датотекама за покретање

Када креирате ВМ у Азуре-у, од корисника се такође тражи да креира контејнер за складиштење дијагностике покретања (контејнер дијагностике покретања), тако да ако дође до проблема са покретањем, има чему да се обрати за решавање проблема. Међутим, када се ВМ избрише, овај контејнер остаје да настави своје сада бесмислено постојање. Хајде да поправимо ову ситуацију.

  1. Прво, хајде да сазнамо ком налогу за складиштење припада овај контејнер - за ово морамо да пронађемо својство storageUri у утроби предмета DiagnosticsProfile наш ВМ. За ово користим овај регуларни израз:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Сада морате да сазнате име контејнера, а за то морате да добијете ВМ ИД помоћу команде 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. Затим добијамо име групе ресурса којој контејнер припада:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. И сада имамо све што нам је потребно да избришемо контејнер са командом Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Уклањање ВМ-а

Сада избришемо саму виртуелну машину, пошто смо већ направили променљиву $vm за одговарајући објекат. Па, хајде да покренемо команду Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Уклањање мрежног интерфејса и јавне ИП адресе

Наш ВМ још увек има један (или чак неколико) мрежних интерфејса (НИЦ) - да бисмо их уклонили као непотребне, прођимо кроз својство NetworkInterfaces наш ВМ објекат и избришите НИЦ командом Remove-AzNetworkInterface. У случају да постоји више од једног мрежног интерфејса, користимо петљу. Истовремено, за сваки НИЦ ћемо проверити имовину IpConfiguration да бисте утврдили да ли интерфејс има јавну ИП адресу. Ако се један пронађе, уклонићемо га командом Remove-AzPublicIpAddress.

Ево примера управо таквог кода, где прегледавамо све НИЦ-ове у петљи, бришемо их и проверавамо да ли постоји јавна ИП адреса. Ако постоји, онда анализирајте својство PublicIpAddress, пронађите име одговарајућег ресурса по ИД-у и избришите га:


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

Уклањање системског диска

ОС диск је блоб, за који постоји команда за брисање Remove-AzStorageBlob - али пре него што га извршите, мораћете да подесите потребне вредности за његове параметре. Да бисте то урадили, посебно морате да добијете име контејнера за складиштење који садржи системски диск, а затим га проследите овој команди заједно са одговарајућим налогом за складиштење.

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

Уклањање Блоба статуса системског диска

Да бисмо то урадили, као што сте вероватно већ претпоставили, узимамо контејнер за складиштење у којем је смештен овај диск, и, подразумевајући да блоб на крају садржи status, проследите одговарајуће параметре команди за брисање Remove-AzStorageBlob:

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

И на крају уклањамо дискове са подацима

Наш ВМ би још увек могао да има дискове са подацима који су му били прикачени. Ако нису потребни, и њих ћемо избрисати. Хајде да га прво рашчланимо StorageProfile наш ВМ и пронађите имовину Uri. Ако постоји неколико дискова, организујемо циклус према URI. За сваки УРИ ћемо пронаћи одговарајући налог за складиштење користећи Get-AzStorageAccount. Затим анализирајте УРИ складишта да бисте издвојили жељено име блоб-а и проследили га команди за брисање Remove-AzStorageBlob заједно са налогом за складиштење. Овако би то изгледало у коду:

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

А сада „дошли смо до срећног краја!“ Сада треба да саставимо једну целину од свих ових фрагмената. Љубазни аутор Адам Бертрам упознао је кориснике на пола пута и то сам урадио. Ево везе до коначне скрипте под називом Ремове-АзрВиртуалМацхине.пс1:

ГитХуб

Надам се да ће вам ови практични савети помоћи у уштеди труда, времена и новца када радите са Азуре ВМ-овима.

Извор: ввв.хабр.цом

Додај коментар