PowerShell ашиглан Azure VM-г өөрчлөх, устгах

PowerShell-ийг ашигласнаар инженерүүд болон мэдээллийн технологийн администраторууд зөвхөн газар дээрээ төдийгүй үүлэн дэд бүтэц, ялангуяа Azure-тэй ажиллахдаа янз бүрийн ажлыг амжилттай автоматжуулдаг. Зарим тохиолдолд PowerShell-ээр дамжуулан ажиллах нь Azure порталаар ажиллахаас хамаагүй хялбар бөгөөд хурдан байдаг. Платформ хоорондын шинж чанарын ачаар PowerShell-ийг ямар ч үйлдлийн систем дээр ашиглах боломжтой.

Та Ubuntu, Red Hat, Windows ашиглаж байгаа эсэхээс үл хамааран PowerShell нь үүлэн нөөцөө удирдахад тань туслах болно. Модуль ашиглах Azure PowerShellЖишээ нь, та виртуал машинуудын ямар ч шинж чанарыг тохируулж болно.

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

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=dev и VMName=devvm01 Та эдгээр параметрүүдэд өөрийн утгыг зааж өгөх болно.)

Энэ тушаал нь иймэрхүү зүйлийг буцаана:

PowerShell ашиглан Azure VM-г өөрчлөх, устгах

Эдгээр нь өгөгдсөн виртуал машинд тохируулж болох бүх боломжит хэмжээтэй сонголтууд юм.

Машины хэмжээг өөрчилье

Жишээлбэл, бид шинэ хэмжээсийг өөрчлөх болно Стандарт_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

Хэрэв бид тэнд харвал Стандарт_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 нь нэг (эсвэл бүр хэд хэдэн) сүлжээний интерфэйстэй (NICs) хэвээр байна - тэдгээрийг шаардлагагүй гэж арилгахын тулд өмчийг шалгацгаая. 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
        }
    }
}

Системийн дискийг устгаж байна

Үйлдлийн системийн диск нь бөмбөрцөг бөгөөд үүнийг устгах команд байдаг 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. Дараа нь хүссэн blob нэрийг гаргаж авахын тулд хадгалах 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

сэтгэгдэл нэмэх