PowerShell көмегімен Azure VM құрылғыларын өзгерту және жою

PowerShell көмегімен инженерлер мен АТ әкімшілері тек жергілікті емес, сонымен қатар бұлттық инфрақұрылымдармен, атап айтқанда Azure-мен жұмыс істегенде әртүрлі тапсырмаларды сәтті автоматтандырады. Кейбір жағдайларда PowerShell арқылы жұмыс істеу Azure порталы арқылы жұмыс істеуге қарағанда әлдеқайда ыңғайлы және жылдамырақ. Өзінің кросс-платформалық сипатының арқасында PowerShell кез келген операциялық жүйеде қолданылуы мүмкін.

Ubuntu, Red Hat немесе Windows жүйесін іске қосып жатсаңыз да, PowerShell бұлттық ресурстарды басқаруға көмектеседі. Модульді пайдалану Azure PowerShell, мысалы, виртуалды машиналардың кез келген қасиеттерін орнатуға болады.

Бұл мақалада Azure бұлтындағы VM өлшемін өзгерту, сондай-ақ VM және онымен байланысты нысандарды жою үшін PowerShell қызметін қалай пайдалануға болатынын қарастырамыз.

PowerShell көмегімен Azure VM құрылғыларын өзгерту және жою

Маңызды! Жұмысқа дайындалу үшін қолыңызды антисептикпен сүртуді ұмытпаңыз:

  • Сізге модуль қажет болады Azure PowerShell модулі - оны PowerShell галереясынан пәрмен арқылы жүктеп алуға болады Install-Module Az.
  • Пәрменді іске қосу арқылы виртуалды машина жұмыс істейтін Azure бұлтында аутентификация қажет Connect-AzAccount.

Алдымен, Azure VM өлшемін өзгертетін сценарий жасайық. VS кодын ашып, жаңа PowerShell сценарийін сақтайық Өлшемді өзгерту-AzVirtualMachine.ps1 — мысал алға қарай біз оған код бөліктерін қосамыз.

Біз қол жетімді VM өлшемдерін сұраймыз

VM өлшемін өзгертпес бұрын, Azure бұлтындағы виртуалды машиналар үшін қолайлы өлшемдердің қандай екенін білуіңіз керек. Ол үшін пәрменді орындау керек Get-AzVMSize.

Сонымен, виртуалды машина үшін devm01 ресурстар тобынан Dev Біз барлық мүмкін болатын өлшемдерді сұраймыз:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Нақты мәселелерде, әрине, орнына ResourceGroupName=дев и VMName=devvm01 сіз осы параметрлер үшін өз мәндеріңізді көрсетесіз.)

Пәрмен келесідей нәрсені қайтарады:

PowerShell көмегімен Azure VM құрылғыларын өзгерту және жою

Бұл берілген виртуалды машина үшін орнатуға болатын барлық ықтимал өлшем опциялары.

Көліктің өлшемін өзгертейік

Мысалы, біз жаңа өлшемге өзгертеміз 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 өлшемін өзгерту арқылы әрі қарай жүріп, табысқа жетуге болады.

Azure жүйесінде виртуалды компьютерді жою туралы не деуге болады?

Жою арқылы бәрі көрінетіндей қарапайым және қарапайым емес. Өйткені, бұл машинамен байланысты бірқатар ресурстарды жою қажет, соның ішінде:

  • Жүктеу диагностикасын сақтау контейнерлері
  • Желілік интерфейстер
  • Жалпыға ортақ IP мекенжайлары
  • Жүйелік диск және оның күйі сақталатын блоб
  • Деректер дискілері

Сондықтан біз функцияны жасап, оны шақырамыз Remove-AzrVirtualMachine - және ол Azure VM-ді ғана емес, жоғарыда аталғандардың барлығын жояды.

Біз стандартты жолмен жүреміз және алдымен пәрменді пайдаланып объектімізді (VM) аламыз Get-AzVm. Мысалы, бұл көлік болсын WINSRV19 ресурстар тобынан MyTestVMs.

Осы нысанды оның барлық қасиеттерімен бірге айнымалыға сақтайық $vm:

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

Жүктеу диагностикалық файлдары бар контейнерді жою

Azure жүйесінде VM жасау кезінде пайдаланушыдан жүктеу диагностикасын (жүктеу диагностикасы контейнері) сақтауға арналған контейнер жасау сұралады, осылайша жүктеу кезінде ақаулар болса, ақаулықтарды жою үшін жүгінетін нәрсе бар. Дегенмен, VM жойылған кезде, бұл контейнер өзінің қазір мақсатсыз болуын жалғастыру үшін қалдырылады. Осы жағдайды түзетейік.

  1. Алдымен, бұл контейнер қай сақтау тіркелгісіне жататынын анықтап алайық - бұл үшін біз мүлікті табуымыз керек storageUri заттың ішектерінде DiagnosticsProfile біздің VM. Бұл үшін мен бұл тұрақты өрнекті қолданамын:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Енді контейнердің атын білу керек және ол үшін пәрмен арқылы VM идентификаторын алу керек 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]
    }
}

Енді «біз бақытты аяқталуға жеттік!» Енді біз осы фрагменттердің барлығынан біртұтас тұтасты жинауымыз керек. Мейірімді автор Адам Бертрам пайдаланушылармен жарты жолда кездесіп, оны өзі жасады. Мұнда соңғы сценарий деп аталатын сілтеме бар Remove-AzrVirtualMachine.ps1:

GitHub

Бұл практикалық кеңестер Azure VM құрылғыларымен жұмыс істегенде күшіңізді, уақытыңызды және ақшаңызды үнемдеуге көмектеседі деп үміттенемін.

Ақпарат көзі: www.habr.com

пікір қалдыру