Изменување и бришење на Azure VM со помош на PowerShell

Користејќи го PowerShell, инженерите и ИТ администраторите успешно автоматизираат различни задачи кога работат не само со внатрешен простор, туку и со облак инфраструктури, особено со Azure. Во некои случаи, работата преку PowerShell е многу поудобна и побрза од работата преку порталот Azure. Благодарение на својата крос-платформска природа, PowerShell може да се користи на кој било оперативен систем.

Без разлика дали користите Ubuntu, Red Hat или Windows, PowerShell може да ви помогне да ги контролирате ресурсите на облакот. Користење на модулот Azure PowerShell, на пример, можете да поставите какви било својства на виртуелните машини.

Во оваа статија, ќе погледнеме како можете да го користите PowerShell за да ја промените големината на VM во облакот Azure, како и да избришете VM и неговите поврзани објекти.

Изменување и бришење на Azure VM со помош на PowerShell

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

  • Ќе ви треба модул Модул Azure PowerShell - може да се преземе од галерија PowerShell со командата Install-Module Az.
  • Треба да се автентицирате во облакот Azure каде работи виртуелната машина со извршување на командата Connect-AzAccount.

Прво, ајде да создадеме скрипта што ќе ја промени големината на Azure VM. Ајде да отвориме VS Code и да зачуваме нова PowerShell скрипта наречена Промени големина-AzVirtualMachine.ps1 — ќе додаваме парчиња код на него како што напредува примерот.

Ги бараме достапните големини на VM

Пред да ја промените големината на VM, треба да дознаете кои се прифатливите големини за виртуелните машини во облакот Azure. За да го направите ова, треба да ја извршите командата Get-AzVMSize.

Значи за виртуелната машина devvm01 од групата на ресурси dev Ги бараме сите можни прифатливи големини:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Во реални проблеми, се разбира, наместо ResourceGroupName=dev и VMName=devvm01 ќе ги наведете вашите сопствени вредности за овие параметри.)

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

Изменување и бришење на Azure VM со помош на PowerShell

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

Ајде да ја промениме големината на автомобилот

На пример, ќе ја промениме големината на нова големина Standard_B1ls - тој е на првото место на листата погоре. (Во реалните апликации, се разбира, вие избирате која било големина што ви треба.)

  1. Прво користејќи ја командата Get-AzVM добиваме информации за нашиот објект (виртуелна машина) со складирање во променлива $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Потоа го земаме имотот од овој објект .HardwareProfile.VmSize и поставете ја саканата нова вредност:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. И сега едноставно ја извршуваме командата за ажурирање на VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Се грижиме дека сè е добро - за да го направиме ова, повторно бараме информации за нашиот објект и го разгледуваме имотот $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ако видиме таму Standard_B1ls - тоа значи дека се е во ред, големината на автомобилот е сменета. Можете да одите понатаму и да го надградите вашиот успех со промена на големината на неколку VM одеднаш користејќи низа.

Што е со бришењето на VM во Azure?

Со бришење, не е сè толку едноставно и едноставно како што може да изгледа. На крајот на краиштата, неопходно е да се отстранат голем број ресурси поврзани со оваа машина, вклучувајќи:

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

Затоа, ќе создадеме функција и ќе ја повикаме Remove-AzrVirtualMachine - и ќе ги избрише не само Azure VM, туку и сите горенаведени.

Одиме на стандарден начин и прво го добиваме нашиот објект (VM) користејќи ја командата Get-AzVm. На пример, нека биде автомобил WINSRV19 од групата на ресурси MyTestVMs.

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

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

Отстранување на контејнерот со дијагностички датотеки за подигање

Кога креирате VM во Azure, од корисникот исто така се бара да создаде контејнер за складирање на дијагностика за подигање (контејнер за дијагностика на подигање), така што ако има проблеми со подигнувањето, има на што да се обрати за смена на проблеми. Меѓутоа, кога VM ќе се избрише, овој контејнер останува да го продолжи своето сега бесцелно постоење. Ајде да ја поправиме оваа ситуација.

  1. Прво, ајде да дознаеме на која сметка за складирање припаѓа овој контејнер - за ова треба да го најдеме имотот storageUri во утробата на предметот DiagnosticsProfile нашиот VM. За ова го користам овој редовен израз:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Сега треба да го дознаете името на контејнерот, а за ова треба да го добиете VM ID користејќи ја командата 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

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

$null = $vm | Remove-AzVM -Force

Отстранување на мрежниот интерфејс и јавната IP адреса

Нашиот VM сè уште има еден (или дури неколку) мрежни интерфејси (NIC) - за да ги отстраниме како непотребни, ајде да поминеме низ имотот NetworkInterfaces нашиот VM објект и избришете го NIC со командата Remove-AzNetworkInterface. Во случај да има повеќе од еден мрежен интерфејс, користиме јамка. Во исто време, за секој NIC ќе го провериме имотот IpConfiguration за да се утврди дали интерфејсот има јавна IP адреса. Ако се најде некој, ќе го отстраниме со командата Remove-AzPublicIpAddress.

Еве пример за токму таков код, каде што ги разгледуваме сите NIC во циклус, ги бришеме и проверуваме дали има јавна IP адреса. Ако има, тогаш анализирајте го имотот PublicIpAddress, пронајдете го името на соодветниот ресурс по ID и избришете го:


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

И, конечно, ги отстрануваме дисковите со податоци

Нашиот VM сè уште може да има дискови со податоци што биле прикачени на него. Доколку не се потребни, ќе ги избришеме и нив. Ајде прво да го анализираме StorageProfile нашиот VM и пронајдете го имотот Uri. Ако има неколку дискови, организираме циклус според URI. За секој URI, ќе ја најдеме соодветната сметка за складирање со користење Get-AzStorageAccount. Потоа анализирајте го URI-то за складирање за да го извлечете саканото име на дупка и префрлете го на командата за бришење 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]
    }
}

И сега „дојдовме до среќниот крај!“ Сега треба да собереме една целина од сите овие фрагменти. Љубезниот автор Адам Бертрам ги сретнал корисниците на половина пат и тоа сам го направил. Еве линк до последното сценарио наречено Отстрани-AzrVirtualMachine.ps1:

GitHub

Се надевам дека овие практични совети ќе ви бидат корисни за да ви заштеди напор, време и пари кога работите со Azure VMs.

Извор: www.habr.com

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