PowerShell аркылуу Azure VMлерди өзгөртүү жана жок кылуу

PowerShellди колдонуу менен инженерлер жана IT администраторлору жер-жерлерде гана эмес, булут инфраструктуралары менен, атап айтканда Azure менен иштөөдө ар кандай тапшырмаларды ийгиликтүү автоматташтырышат. Кээ бир учурларда, PowerShell аркылуу иштөө Azure порталы аркылуу иштөөгө караганда алда канча ыңгайлуу жана ылдамыраак. Анын кайчылаш-платформа табиятынан улам PowerShell ар кандай операциялык системада колдонулушу мүмкүн.

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

Бул макалада биз Azure булутундагы VMнин өлчөмүн өзгөртүү үчүн PowerShellди кантип колдонсоңуз болорун, ошондой эле VMди жана ага байланышкан объекттерди жок кылабыз.

PowerShell аркылуу Azure VMлерди өзгөртүү жана жок кылуу

Маанилүү! Жумушка даярдануу үчүн колуңузду дезинфекциялоочу каражат менен сүртүүнү унутпаңыз:

  • Сизге модул керек болот Azure PowerShell модулу - бул буйрук менен PowerShell Галереясынан жүктөп алса болот Install-Module Az.
  • Сиз виртуалдык машина иштеп жаткан Azure булутунда буйрукту иштетүү аркылуу аутентификациядан өтүшүңүз керек Connect-AzAccount.

Биринчиден, келгиле, Azure VMнин өлчөмүн өзгөрткөн скрипт түзөлү. Келгиле, VS кодун ачып, жаңы PowerShell скриптин сактайлы Resize-AzVirtualMachine.ps1 — биз мисалдын өнүгүшүнө жараша ага код бөлүктөрүн кошобуз.

Биз жеткиликтүү VM өлчөмдөрүн сурайбыз

VM өлчөмүн өзгөртүүдөн мурун, Azure булутундагы виртуалдык машиналар үчүн алгылыктуу өлчөмдөр кандай экенин билип алышыңыз керек. Бул үчүн сиз буйрукту иштетүү керек Get-AzVMSize.

Ошентип, виртуалдык машина үчүн devm01 ресурстар тобунан ишт.ч. Биз бардык мүмкүн болгон өлчөмдөрдү сурайбыз:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Чыныгы көйгөйлөрдө, албетте, ордуна ResourceGroupName=dev и 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дагы VMди жок кылуу жөнүндө эмне айтууга болот?

Жок кылуу менен, баары көрүнгөндөй жөнөкөй жана жөнөкөй эмес. Анткени, бул машина менен байланышкан бир катар ресурстарды алып салуу керек, анын ичинде:

  • Жүктөө диагностикасын сактоочу контейнерлер
  • тармак кошки
  • Коомдук 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 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. Эгерде бир нече тармак интерфейси бар болсо, биз циклди колдонобуз. Ошол эле учурда, ар бир НИК үчүн биз мүлктү текшеребиз 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
        }
    }
}

Системалык дискти алып салуу

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

Source: www.habr.com

Комментарий кошуу