Pagbabago at pagtanggal ng mga Azure VM gamit ang PowerShell

Gamit ang PowerShell, matagumpay na na-automate ng mga inhinyero at IT administrator ang iba't ibang gawain kapag nagtatrabaho hindi lamang sa mga nasasakupan, kundi pati na rin sa mga imprastraktura ng cloud, partikular sa Azure. Sa ilang mga kaso, ang pagtatrabaho sa pamamagitan ng PowerShell ay mas maginhawa at mas mabilis kaysa sa pagtatrabaho sa portal ng Azure. Dahil sa katangiang cross-platform nito, maaaring gamitin ang PowerShell sa anumang operating system.

Gumagamit ka man ng Ubuntu, Red Hat, o Windows, matutulungan ka ng PowerShell na kontrolin ang iyong mga mapagkukunan ng cloud. Gamit ang modyul Azure PowerShell, halimbawa, maaari kang magtakda ng anumang mga katangian ng mga virtual machine.

Sa artikulong ito, titingnan natin kung paano mo magagamit ang PowerShell para i-resize ang isang VM sa Azure cloud, pati na rin ang pagtanggal ng VM at ang mga nauugnay na object nito.

Pagbabago at pagtanggal ng mga Azure VM gamit ang PowerShell

Mahalaga! Huwag kalimutang punasan ng sanitizer ang iyong mga kamay para makapaghanda sa trabaho:

  • Kakailanganin mo ang isang module Azure PowerShell Module - maaari itong ma-download mula sa PowerShell Gallery gamit ang command Install-Module Az.
  • Kailangan mong mag-authenticate sa Azure cloud kung saan tumatakbo ang virtual machine sa pamamagitan ng pagpapatakbo ng command Connect-AzAccount.

Una, gumawa tayo ng script na magre-resize ng Azure VM. Buksan natin ang VS Code at mag-save ng bagong PowerShell script na tinatawag Baguhin ang laki-AzVirtualMachine.ps1 β€” magdaragdag kami ng mga piraso ng code dito habang umuusad ang halimbawa.

Hinihiling namin ang mga available na laki ng VM

Bago mo baguhin ang laki ng VM, kailangan mong malaman kung ano ang mga katanggap-tanggap na laki para sa mga virtual machine sa Azure cloud. Upang gawin ito kailangan mong patakbuhin ang utos Get-AzVMSize.

Kaya para sa virtual machine devvm01 mula sa pangkat ng mapagkukunan dev Hinihiling namin ang lahat ng posibleng katanggap-tanggap na laki:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Sa totoong mga problema, siyempre, sa halip na ResourceGroupName=dev ΠΈ VMName=devvm01 tutukuyin mo ang iyong sariling mga halaga para sa mga parameter na ito.)

Ang utos ay magbabalik ng isang bagay tulad nito:

Pagbabago at pagtanggal ng mga Azure VM gamit ang PowerShell

Ito ang lahat ng posibleng mga pagpipilian sa laki na maaaring itakda para sa isang naibigay na virtual machine.

I-resize natin ang sasakyan

Halimbawa, babaguhin namin ang laki sa isang bagong laki Standard_B1ls - siya ay nasa unang lugar sa listahan sa itaas. (Sa totoong buhay na mga aplikasyon, siyempre, pipiliin mo ang anumang sukat na kailangan mo.)

  1. Una gamit ang utos Get-AzVM nakakakuha tayo ng impormasyon tungkol sa ating object (virtual machine) sa pamamagitan ng pag-iimbak nito sa isang variable $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Pagkatapos ay kinuha namin ang ari-arian mula sa bagay na ito .HardwareProfile.VmSize at itakda ang nais na bagong halaga:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. At ngayon ipapatupad lang namin ang utos ng pag-update ng VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Tinitiyak namin na naging maayos ang lahat - para magawa ito, humihiling muli kami ng impormasyon tungkol sa aming bagay at tingnan ang ari-arian $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Kung makikita natin doon Standard_B1ls - ibig sabihin ay maayos na ang lahat, binago ang laki ng sasakyan. Maaari kang magpatuloy at bumuo sa iyong tagumpay sa pamamagitan ng pagbabago ng laki ng ilang VM nang sabay-sabay gamit ang isang array.

Paano ang pagtanggal ng VM sa Azure?

Sa pagtanggal, hindi lahat ay kasing simple at tapat na tila. Pagkatapos ng lahat, ito ay kinakailangan upang alisin ang isang bilang ng mga mapagkukunan na nauugnay sa makina na ito, kabilang ang:

  • Mga lalagyan ng imbakan ng mga diagnostic ng boot
  • Mga interface ng network
  • Mga pampublikong IP address
  • System disk at blob kung saan naka-imbak ang katayuan nito
  • Mga data disk

Samakatuwid, gagawa kami ng isang function at tatawagin ito Remove-AzrVirtualMachine - at tatanggalin nito hindi lamang ang Azure VM, kundi pati na rin ang lahat ng nasa itaas.

Pumunta kami sa karaniwang paraan at kunin muna ang aming object (VM) gamit ang command Get-AzVm. Halimbawa, hayaan itong maging isang kotse WINSRV19 mula sa pangkat ng mapagkukunan MyTestVMs.

I-save natin ang bagay na ito kasama ang lahat ng mga katangian nito sa isang variable $vm:

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

Pag-alis ng lalagyan na may mga boot diagnostic file

Kapag gumagawa ng VM sa Azure, hinihiling din sa user na gumawa ng container para sa pag-iimbak ng mga diagnostic ng boot (lalagyan ng diagnostic ng boot), upang kung may mga problema sa pag-boot, mayroong isang bagay na dapat buksan para sa pag-troubleshoot. Gayunpaman, kapag ang VM ay tinanggal, ang container na ito ay naiwan upang ipagpatuloy ang walang layunin na pag-iral nito. Ayusin natin ang sitwasyong ito.

  1. Una, alamin natin kung saang storage account kabilang ang container na ito - para dito kailangan nating hanapin ang property storageUri sa bituka ng bagay DiagnosticsProfile ang aming VM. Para dito ginagamit ko ang regular na expression na ito:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Ngayon ay kailangan mong malaman ang pangalan ng lalagyan, at para dito kailangan mong makuha ang VM ID gamit ang command 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. Susunod, nakuha namin ang pangalan ng pangkat ng mapagkukunan kung saan kabilang ang lalagyan:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. At ngayon mayroon kaming lahat ng kailangan namin upang tanggalin ang lalagyan na may utos Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Pag-alis ng VM

Ngayon, tanggalin natin ang mismong virtual machine, dahil nakagawa na tayo ng variable $vm para sa kaukulang bagay. Well, patakbuhin natin ang command Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Pag-alis ng interface ng network at pampublikong IP address

Ang aming VM ay mayroon pa ring isa (o kahit ilang) network interface (NIC) - para alisin ang mga ito bilang hindi kailangan, tingnan natin ang property NetworkInterfaces aming VM object at tanggalin ang NIC gamit ang command Remove-AzNetworkInterface. Kung mayroong higit sa isang interface ng network, gumagamit kami ng isang loop. Kasabay nito, para sa bawat NIC ay susuriin namin ang ari-arian IpConfiguration upang matukoy kung ang interface ay may pampublikong IP address. Kung may mahanap, aalisin namin ito gamit ang utos Remove-AzPublicIpAddress.

Narito ang isang halimbawa ng ganoong code, kung saan tinitingnan namin ang lahat ng NIC sa isang loop, tanggalin ang mga ito, at tingnan kung mayroong pampublikong IP. Kung mayroon, pagkatapos ay i-parse ang property PublicIpAddress, hanapin ang pangalan ng kaukulang mapagkukunan ayon sa ID at tanggalin ito:


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

Pag-alis ng system disk

Ang OS disk ay isang patak, kung saan mayroong isang utos na tanggalin ito Remove-AzStorageBlob - ngunit bago isagawa ito, kakailanganin mong itakda ang mga kinakailangang halaga para sa mga parameter nito. Upang gawin ito, lalo na, kailangan mong makuha ang pangalan ng lalagyan ng imbakan na naglalaman ng disk ng system, at pagkatapos ay ipasa ito sa utos na ito kasama ang kaukulang storage account.

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

Pag-alis ng System Disk Status Blob

Upang gawin ito, tulad ng malamang na nahulaan mo na, kinukuha namin ang lalagyan ng imbakan kung saan naka-imbak ang disk na ito, at, na nagpapahiwatig na ang blob sa dulo ay naglalaman ng status, ipasa ang kaukulang mga parameter sa delete command Remove-AzStorageBlob:

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

At sa wakas, inaalis namin ang mga data disk

Ang aming VM ay maaari pa ring magkaroon ng mga disk na may data na naka-attach dito. Kung hindi sila kailangan, tatanggalin din namin ang mga ito. I-parse muna natin StorageProfile aming VM at hanapin ang ari-arian Uri. Kung mayroong ilang mga disk, nag-aayos kami ng isang cycle ayon sa URI. Para sa bawat URI, makikita namin ang kaukulang storage account na ginagamit Get-AzStorageAccount. Pagkatapos ay i-parse ang storage URI para kunin ang gustong pangalan ng blob at ipasa ito sa delete command Remove-AzStorageBlob kasama ang isang storage account. Ito ang magiging hitsura nito sa code:

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

At ngayon "narating na natin ang masayang pagtatapos!" Ngayon kailangan nating mag-ipon ng isang buo mula sa lahat ng mga fragment na ito. Nakilala ng mabait na may-akda na si Adam Bertram ang mga gumagamit sa kalagitnaan at siya mismo ang gumawa nito. Narito ang isang link sa panghuling script na tinatawag Alisin-AzrVirtualMachine.ps1:

β†’ GitHub

Umaasa ako na nakatulong ang mga praktikal na tip na ito sa pagtitipid sa iyo ng pagsisikap, oras, at pera kapag nagtatrabaho sa mga Azure VM.

Pinagmulan: www.habr.com

Magdagdag ng komento