PowerShell yordamida Azure VM-larini o'zgartirish va o'chirish

PowerShell-dan foydalanib, muhandislar va IT-ma'murlar nafaqat mahalliy, balki bulutli infratuzilmalar, xususan Azure bilan ishlashda turli vazifalarni muvaffaqiyatli avtomatlashtiradilar. Ba'zi hollarda PowerShell orqali ishlash Azure portali orqali ishlashga qaraganda ancha qulayroq va tezroq. O'zining platformalararo tabiati tufayli PowerShell har qanday operatsion tizimda ishlatilishi mumkin.

Ubuntu, Red Hat yoki Windows operatsion tizimida ishlayapsizmi, PowerShell bulut resurslaringizni boshqarishingizga yordam beradi. Moduldan foydalanish Azure PowerShell, masalan, virtual mashinalarning har qanday xususiyatlarini o'rnatishingiz mumkin.

Ushbu maqolada biz PowerShell-dan Azure bulutidagi VM o'lchamini o'zgartirish, shuningdek, VM va unga bog'liq ob'ektlarni o'chirish uchun qanday foydalanishingiz mumkinligini ko'rib chiqamiz.

PowerShell yordamida Azure VM-larini o'zgartirish va o'chirish

Muhim! Ishga tayyorgarlik ko'rish uchun qo'llaringizni dezinfektsiyalash vositasi bilan artib olishni unutmang:

  • Sizga modul kerak bo'ladi Azure PowerShell moduli - buyruq bilan PowerShell galereyasidan yuklab olish mumkin Install-Module Az.
  • Buyruqni ishga tushirish orqali virtual mashina ishlayotgan Azure bulutida autentifikatsiya qilishingiz kerak Connect-AzAccount.

Birinchidan, Azure VM hajmini o'zgartiradigan skript yarataylik. Keling, VS kodini ochamiz va yangi PowerShell skriptini saqlaymiz Resize-AzVirtualMachine.ps1 β€” misol davom etar ekan, biz unga kod qismlarini qo'shamiz.

Biz mavjud VM o'lchamlarini so'raymiz

VM o'lchamini o'zgartirishdan oldin, Azure bulutidagi virtual mashinalar uchun maqbul o'lchamlarni bilib olishingiz kerak. Buni amalga oshirish uchun siz buyruqni bajarishingiz kerak Get-AzVMSize.

Shunday qilib, virtual mashina uchun devm01 resurslar guruhidan ulkan Biz barcha mumkin bo'lgan o'lchamlarni talab qilamiz:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Haqiqiy muammolarda, albatta, o'rniga ResourceGroupName=dev ΠΈ VMName=devvm01 siz ushbu parametrlar uchun o'zingizning qiymatlaringizni belgilaysiz.)

Buyruq shunga o'xshash narsani qaytaradi:

PowerShell yordamida Azure VM-larini o'zgartirish va o'chirish

Bu ma'lum bir virtual mashina uchun o'rnatilishi mumkin bo'lgan barcha o'lcham variantlari.

Keling, mashinaning o'lchamini o'zgartiraylik

Misol uchun, biz yangi o'lchamga o'zgartiramiz Standart_B1ls - u yuqoridagi ro'yxatda birinchi o'rinda. (Haqiqiy ilovalarda, albatta, siz kerakli o'lchamni tanlaysiz.)

  1. Avval buyruqni ishlating Get-AzVM ob'ektimiz (virtual mashina) haqida uni o'zgaruvchida saqlash orqali ma'lumot olamiz $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Keyin biz ushbu ob'ektdan mulkni olamiz .HardwareProfile.VmSize va kerakli yangi qiymatni o'rnating:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Va endi biz shunchaki VM yangilash buyrug'ini bajaramiz - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Biz hamma narsa yaxshi bo'lganiga ishonch hosil qilamiz - buning uchun biz yana ob'ektimiz haqida ma'lumot so'raymiz va mulkni ko'rib chiqamiz $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Agar biz u erda ko'rsak Standart_B1ls - demak, hammasi joyida, mashinaning o'lchami o'zgargan. Massiv yordamida bir vaqtning o'zida bir nechta VM o'lchamlarini o'zgartirish orqali siz oldinga borishingiz va muvaffaqiyatingizga erishishingiz mumkin.

Azure-da VMni o'chirish haqida nima deyish mumkin?

O'chirish bilan hamma narsa ko'rinadigan darajada oddiy va sodda emas. Axir, ushbu mashina bilan bog'liq bir qator resurslarni olib tashlash kerak, jumladan:

  • Yuklash diagnostikasi saqlash konteynerlari
  • Tarmoq interfeyslari
  • Umumiy IP manzillar
  • Tizim diski va uning holati saqlanadigan blob
  • Ma'lumot disklari

Shuning uchun biz funktsiya yaratamiz va uni chaqiramiz Remove-AzrVirtualMachine - va u nafaqat Azure VM ni, balki yuqoridagilarning hammasini ham o'chiradi.

Biz standart yo'ldan boramiz va birinchi navbatda buyruq yordamida ob'ektimizni (VM) olamiz Get-AzVm. Masalan, bu mashina bo'lsin WINSRV19 resurslar guruhidan MyTestVMs.

Keling, ushbu ob'ektni barcha xususiyatlari bilan birga o'zgaruvchiga saqlaymiz $vm:

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

Yuklash diagnostikasi fayllari bilan konteynerni olib tashlash

Azure-da VM yaratishda foydalanuvchidan yuklash diagnostikasini (yuklash diagnostikasi konteyneri) saqlash uchun konteyner yaratishi soβ€˜raladi, shunda agar yuklashda muammolar yuzaga kelsa, muammolarni bartaraf etish uchun murojaat qilish kerak boβ€˜ladi. Biroq, VM o'chirilganda, bu konteyner endi maqsadsiz mavjudligini davom ettirish uchun qoldiriladi. Keling, bu vaziyatni tuzataylik.

  1. Birinchidan, ushbu konteyner qaysi saqlash hisobiga tegishli ekanligini bilib olaylik - buning uchun biz mulkni topishimiz kerak storageUri ob'ektning ichaklarida DiagnosticsProfile bizning VM. Buning uchun men ushbu muntazam ifodani ishlataman:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Endi siz konteyner nomini bilib olishingiz kerak va buning uchun buyruq yordamida VM ID-ni olishingiz kerak 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. Keyinchalik, konteyner tegishli bo'lgan resurs guruhining nomini olamiz:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Va endi bizda konteynerni buyruq bilan o'chirish uchun kerak bo'lgan hamma narsa bor Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VMni olib tashlash

Endi virtual mashinaning o'zini o'chirib tashlaymiz, chunki biz allaqachon o'zgaruvchini yaratganmiz $vm mos keladigan ob'ekt uchun. Xo'sh, keling, buyruqni bajaramiz Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Tarmoq interfeysi va umumiy IP manzilini olib tashlash

Bizning VM-da hali ham bitta (hatto bir nechta) tarmoq interfeyslari (NIC) mavjud - ularni keraksiz deb olib tashlash uchun mulkni ko'rib chiqamiz. NetworkInterfaces VM ob'ektimiz va NICni buyruq bilan o'chirib tashlang Remove-AzNetworkInterface. Agar bir nechta tarmoq interfeysi mavjud bo'lsa, biz tsikldan foydalanamiz. Shu bilan birga, har bir NIC uchun biz mulkni tekshiramiz IpConfiguration interfeys umumiy IP-manzilga ega yoki yo'qligini aniqlash uchun. Agar topilsa, biz uni buyruq bilan olib tashlaymiz Remove-AzPublicIpAddress.

Mana shunday kodning misoli, biz tsikldagi barcha NIC-larni ko'rib chiqamiz, ularni o'chirib tashlaymiz va umumiy IP mavjudligini tekshiramiz. Agar mavjud bo'lsa, mulkni tahlil qiling PublicIpAddress, ID bo'yicha mos manba nomini toping va uni o'chiring:


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

Tizim diskini olib tashlash

OS diski blob bo'lib, uni o'chirish buyrug'i mavjud Remove-AzStorageBlob - lekin uni bajarishdan oldin uning parametrlari uchun kerakli qiymatlarni o'rnatishingiz kerak bo'ladi. Buning uchun, xususan, tizim diskini o'z ichiga olgan saqlash konteynerining nomini olishingiz kerak va keyin uni tegishli saqlash hisobi bilan birga ushbu buyruqqa o'tkazishingiz kerak.

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

Tizim diskining holati blokini olib tashlash

Buni amalga oshirish uchun, ehtimol siz taxmin qilganingizdek, biz ushbu disk saqlanadigan saqlash konteynerini olamiz va bu oxirida blobni o'z ichiga oladi. status, mos keladigan parametrlarni o'chirish buyrug'iga o'tkazing Remove-AzStorageBlob:

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

Va nihoyat, biz ma'lumotlar disklarini olib tashlaymiz

Bizning VM-da hali ham unga biriktirilgan ma'lumotlarga ega disklar bo'lishi mumkin. Agar ular kerak bo'lmasa, biz ularni ham o'chirib tashlaymiz. Keling, avval uni tahlil qilaylik StorageProfile bizning VM va mulkni toping Uri. Agar bir nechta disklar bo'lsa, biz tsiklni shunga ko'ra tashkil qilamiz URI. Har bir URI uchun biz mos keladigan saqlash hisobini topamiz Get-AzStorageAccount. Keyin kerakli blob nomini chiqarish uchun saqlash URI-ni tahlil qiling va uni o'chirish buyrug'iga o'tkazing Remove-AzStorageBlob saqlash hisobi bilan birga. Bu kodda shunday ko'rinadi:

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

Va endi "biz baxtli oxiriga yetdik!" Endi biz ushbu qismlarning barchasidan bitta yaxlitlikni yig'ishimiz kerak. Mehribon muallif Adam Bertram foydalanuvchilar bilan yarmida uchrashdi va buni o'zi amalga oshirdi. Bu erda deb nomlangan yakuniy skriptga havola Remove-AzrVirtualMachine.ps1:

β†’ GitHub

Umid qilamanki, ushbu amaliy maslahatlar Azure VMlar bilan ishlashda kuchingiz, vaqtingiz va pulingizni tejashga yordam beradi.

Manba: www.habr.com

a Izoh qo'shish