Pag-usab ug pagtangtang sa mga Azure VM gamit ang PowerShell

Gamit ang PowerShell, ang mga inhenyero ug mga tigdumala sa IT malampuson nga nag-automate sa lainlaing mga buluhaton kung nagtrabaho dili lamang sa mga lugar, apan usab sa mga imprastraktura sa panganod, labi na sa Azure. Sa pipila ka mga kaso, ang pagtrabaho pinaagi sa PowerShell mas sayon ​​ug mas paspas kay sa pagtrabaho pinaagi sa Azure portal. Salamat sa cross-platform nga kinaiya niini, ang PowerShell mahimong magamit sa bisan unsang operating system.

Nagdagan ka man sa Ubuntu, Red Hat, o Windows, ang PowerShell makatabang kanimo sa pagpugong sa imong mga kapanguhaan sa panganod. Gamit ang module Azure PowerShell, pananglitan, mahimo nimong itakda ang bisan unsang mga kabtangan sa mga virtual machine.

Niini nga artikulo, atong tan-awon kon unsaon nimo paggamit ang PowerShell aron mabag-o ang gidak-on sa usa ka VM sa Azure cloud, ingon man usab sa pagtangtang sa usa ka VM ug sa mga kauban nga butang niini.

Pag-usab ug pagtangtang sa mga Azure VM gamit ang PowerShell

Importante! Ayaw kalimot sa pagpahid sa imong mga kamot gamit ang sanitizer aron makapangandam sa trabaho:

  • Kinahanglan nimo ang usa ka module Azure PowerShell Module - ma-download kini gikan sa PowerShell Gallery gamit ang command Install-Module Az.
  • Kinahanglan nimo nga pamatud-an sa Azure cloud diin ang virtual machine nagdagan pinaagi sa pagpadagan sa mando Connect-AzAccount.

Una, maghimo kita usa ka script nga magbag-o sa usa ka Azure VM. Atong ablihan ang VS Code ug i-save ang bag-ong PowerShell script nga gitawag Usba ang Laki-AzVirtualMachine.ps1 β€” magdugang kami og mga piraso sa code niini samtang nagpadayon ang panig-ingnan.

Gihangyo namon ang magamit nga mga gidak-on sa VM

Sa dili pa nimo usbon ang gidak-on sa VM, kinahanglan nimo nga mahibal-an kung unsa ang madawat nga mga gidak-on alang sa mga virtual nga makina sa Azure cloud. Aron mahimo kini kinahanglan nimo nga ipadagan ang mando Get-AzVMSize.

Busa alang sa virtual machine devvm01 gikan sa resource group dev Gihangyo namon ang tanan nga posible nga madawat nga mga gidak-on:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Sa tinuod nga mga problema, siyempre, imbes nga ResourceGroupName=dev ΠΈ VMName=devvm01 imong ipiho ang imong kaugalingon nga mga kantidad alang niini nga mga parameter.)

Ang sugo mobalik sama niini:

Pag-usab ug pagtangtang sa mga Azure VM gamit ang PowerShell

Kini ang tanan nga posible nga mga kapilian sa gidak-on nga mahimong itakda alang sa gihatag nga virtual machine.

Atong i-resize ang sakyanan

Pananglitan, usbon nato ang usa ka bag-ong gidak-on Sumbanan_B1ls - naa siya sa una nga lugar sa lista sa ibabaw. (Sa tinuod nga kinabuhi nga mga aplikasyon, siyempre, imong pilion ang bisan unsang gidak-on nga imong gikinahanglan.)

  1. Una gamit ang command Get-AzVM kita makakuha og impormasyon mahitungod sa atong butang (virtual machine) pinaagi sa pagtipig niini sa usa ka variable $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Dayon atong kuhaon ang kabtangan gikan niini nga butang .HardwareProfile.VmSize ug ibutang ang gusto nga bag-ong bili:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ug karon gipatuman lang namo ang VM update command - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Gisiguro namon nga maayo ang tanan - aron mahimo kini, nangayo kami usab kasayuran bahin sa among butang ug tan-awon ang kabtangan $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Kung makakita ta didto Sumbanan_B1ls - kana nagpasabot nga ang tanan anaa sa kahusay, ang gidak-on sa sakyanan nausab. Mahimo ka nga mopadayon ug magtukod sa imong kalampusan pinaagi sa pagbag-o sa daghang mga VM sa usa ka higayon gamit ang usa ka laray.

Unsa man ang bahin sa pagtangtang sa usa ka VM sa Azure?

Uban sa pagtangtang, dili ang tanan ingon ka yano ug prangka ingon nga kini daw. Pagkahuman, kinahanglan nga tangtangon ang daghang mga kapanguhaan nga may kalabotan sa kini nga makina, lakip ang:

  • Mga sudlanan sa pagtipig sa mga diagnostic sa boot
  • Mga interface sa network
  • Mga adres sa publiko nga IP
  • System disk ug blob diin gitipigan ang status niini
  • Mga disk sa datos

Busa, maghimo kita ug function ug tawgon kini Remove-AzrVirtualMachine - ug kini magwagtang dili lamang sa Azure VM, kondili usab sa tanan nga naa sa ibabaw.

Moadto kami sa sumbanan nga paagi ug una nga makuha ang among butang (VM) gamit ang mando Get-AzVm. Pananglitan, himoa nga kini usa ka awto WINSRV19 gikan sa resource group MyTestVMs.

Atong tipigan kini nga butang uban sa tanan nga mga kabtangan niini ngadto sa usa ka variable $vm:

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

Pagtangtang sa sudlanan nga adunay mga boot diagnostic file

Sa paghimo sa usa ka VM sa Azure, ang user gihangyo usab sa paghimo og usa ka sudlanan alang sa pagtipig sa mga diagnostic sa boot (boot diagnostics nga sudlanan), aron kung adunay mga problema sa pag-boot, adunay usa ka butang nga ibalik alang sa pag-troubleshoot. Bisan pa, kung ang VM matangtang, kini nga sudlanan nahabilin aron ipadayon ang karon nga wala’y katuyoan nga paglungtad. Ayuhon nato ni nga sitwasyon.

  1. Una, atong hibal-an kung unsang storage account ang tag-iya niini nga sudlanan - tungod niini kinahanglan natong pangitaon ang kabtangan storageUri sa tiyan sa butang DiagnosticsProfile among VM. Alang niini akong gigamit kining regular nga ekspresyon:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Karon kinahanglan nimo nga mahibal-an ang ngalan sa sudlanan, ug alang niini kinahanglan nimo nga makuha ang VM ID gamit ang mando 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. Sunod, makuha namon ang ngalan sa grupo sa kapanguhaan diin nahisakop ang sulud:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ug karon naa na namo ang tanan nga among gikinahanglan aron mapapas ang sudlanan nga adunay sugo Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Pagtangtang sa VM

Karon atong tangtangon ang virtual machine mismo, tungod kay nakahimo na kita og variable $vm alang sa katugbang nga butang. Aw, atong padaganon ang sugo Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Pagtangtang sa interface sa network ug pampublikong IP address

Ang among VM aduna pa'y usa (o daghan pa) nga mga interface sa network (NICs) - aron tangtangon kini nga wala kinahanglana, susihon naton ang kabtangan NetworkInterfaces atong VM nga butang ug kuhaa ang NIC gamit ang command Remove-AzNetworkInterface. Kung adunay labaw pa sa usa ka interface sa network, mogamit kami usa ka loop. Sa samang higayon, alang sa matag NIC atong susihon ang kabtangan IpConfiguration aron mahibal-an kung ang interface adunay usa ka publiko nga IP address. Kung makit-an ang usa, tangtangon namon kini gamit ang mando Remove-AzPublicIpAddress.

Ania ang usa ka pananglitan sa ingon nga code, diin atong tan-awon ang tanan nga mga NIC sa usa ka loop, tangtangon kini, ug susihon kung adunay usa ka publiko nga IP. Kung naa, unya i-parse ang kabtangan PublicIpAddress, pangitaa ang ngalan sa katugbang nga kapanguhaan pinaagi sa ID ug kuhaa kini:


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

Pagtangtang sa disk sa sistema

Ang OS disk usa ka blob, diin adunay usa ka mando nga papason kini Remove-AzStorageBlob - apan sa wala pa kini ipatuman, kinahanglan nimo nga itakda ang gikinahanglan nga mga kantidad alang sa mga parameter niini. Aron mahimo kini, labi na, kinahanglan nimo nga makuha ang ngalan sa sudlanan sa pagtipig nga adunay sulud nga disk sa sistema, ug dayon ipasa kini sa kini nga mando kauban ang katugbang nga account sa pagtipig.

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

Pagtangtang sa System Disk Status Blob

Aron mahimo kini, ingon nga tingali nahibal-an na nimo, among gikuha ang sudlanan sa pagtipig diin kini nga disk gitipigan, ug, nagpasabut nga ang blob sa katapusan adunay sulud. status, ipasa ang katugbang nga mga parameter sa delete command Remove-AzStorageBlob:

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

Ug sa katapusan, atong tangtangon ang mga data disk

Ang among VM mahimo pa nga adunay mga disk nga adunay mga datos nga gilakip niini. Kung dili sila kinahanglan, ato usab silang papason. Atong i-parse una kini StorageProfile among VM ug pangitaa ang kabtangan Uri. Kung adunay daghang mga disk, nag-organisar kami usa ka siklo sumala sa URI. Alang sa matag URI, atong makit-an ang katugbang nga storage account nga gigamit Get-AzStorageAccount. Dayon i-parse ang storage URI aron makuha ang gusto nga blob name ug ipasa kini sa delete command Remove-AzStorageBlob uban sa usa ka storage account. Kini ang hitsura niini 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]
    }
}

Ug karon "naabot na namo ang malipayong katapusan!" Karon kinahanglan namong tipunon ang usa ka tibuuk gikan sa tanan niini nga mga tipik. Ang buotan nga tagsulat nga si Adam Bertram nakigkita sa mga tiggamit sa tunga-tunga ug gibuhat kini sa iyang kaugalingon. Ania ang usa ka link sa katapusang script nga gitawag Kuhaa-AzrVirtualMachine.ps1:

β†’ GitHub

Nanghinaut ko nga makit-an nimo kini nga praktikal nga mga tip nga makatabang sa pagtipig kanimo nga paningkamot, oras, ug salapi kung nagtrabaho kauban ang Azure VMs.

Source: www.habr.com

Idugang sa usa ka comment