Ngowahi lan mbusak Azure VMs nggunakake PowerShell

Nggunakake PowerShell, insinyur lan administrator IT kasil ngotomatisasi macem-macem tugas nalika nggarap ora mung ing papan, nanging uga karo infrastruktur awan, utamane karo Azure. Ing sawetara kasus, nggarap PowerShell luwih trep lan luwih cepet tinimbang nggarap portal Azure. Thanks kanggo sifat cross-platform, PowerShell bisa digunakake ing sistem operasi apa wae.

Apa sampeyan nganggo Ubuntu, Red Hat, utawa Windows, PowerShell bisa mbantu ngontrol sumber daya awan. Nggunakake modul Azure PowerShell, contone, sampeyan bisa nyetel sembarang sifat mesin virtual.

Ing artikel iki, kita bakal weruh carane sampeyan bisa nggunakake PowerShell kanggo ngowahi ukuran VM ing awan Azure, uga mbusak VM lan obyek sing gegandhengan.

Ngowahi lan mbusak Azure VMs nggunakake PowerShell

Penting! Aja lali ngusap tangan nganggo sanitizer kanggo persiapan kerja:

  • Sampeyan mbutuhake modul Modul Azure PowerShell - bisa diundhuh saka Galeri PowerShell kanthi prentah Install-Module Az.
  • Sampeyan kudu keasliane ing awan Azure ing ngendi mesin virtual mlaku kanthi printah kasebut Connect-AzAccount.

Pisanan, ayo nggawe skrip sing bakal ngowahi ukuran Azure VM. Ayo mbukak VS Code lan simpen skrip PowerShell anyar sing diarani Ngowahi ukuran-AzVirtualMachine.ps1 - kita bakal nambah potongan kode minangka conto maju.

We njaluk ukuran VM kasedhiya

Sadurunge ngganti ukuran VM, sampeyan kudu ngerteni apa ukuran sing bisa ditampa kanggo mesin virtual ing awan Azure. Kanggo nindakake iki sampeyan kudu mbukak printah Get-AzVMSize.

Dadi kanggo mesin virtual devvm01 saka klompok sumber dev Kita njaluk kabeh ukuran sing bisa ditampa:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Ing masalah nyata, mesthi, tinimbang ResourceGroupName=dev и VMName=devvm01 sampeyan bakal nemtokake nilai sampeyan dhewe kanggo paramèter kasebut.)

Printah kasebut bakal ngasilake kaya iki:

Ngowahi lan mbusak Azure VMs nggunakake PowerShell

Iki kabeh opsi ukuran sing bisa disetel kanggo mesin virtual tartamtu.

Ayo ngowahi ukuran mobil

Contone, kita bakal ngowahi ukuran menyang ukuran anyar Standar_B1ls - iku ing Panggonan pisanan ing dhaftar ndhuwur. (Ing aplikasi nyata, mesthine sampeyan milih ukuran apa wae sing sampeyan butuhake.)

  1. Pisanan nggunakake printah Get-AzVM kita entuk informasi babagan obyek kita (mesin virtual) kanthi nyimpen ing variabel $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Banjur kita njupuk properti saka obyek iki .HardwareProfile.VmSize lan nyetel nilai anyar sing dikarepake:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Lan saiki kita mung nglakokake printah nganyari VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Kita nggawe manawa kabeh mlaku kanthi apik - kanggo nindakake iki, kita njaluk informasi maneh babagan obyek lan ndeleng properti kasebut $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Yen kita ndeleng ana Standar_B1ls - tegese kabeh wis rapi, ukuran mobil wis diganti. Sampeyan bisa luwih maju lan mbangun sukses kanthi ngowahi ukuran sawetara VM bebarengan nggunakake array.

Apa babagan mbusak VM ing Azure?

Kanthi pambusakan, ora kabeh gampang lan gampang kaya sing katon. Sawise kabeh, perlu mbusak sawetara sumber daya sing ana gandhengane karo mesin iki, kalebu:

  • Wadah panyimpenan diagnostik boot
  • Antarmuka jaringan
  • Alamat IP umum
  • Sistem disk lan blob ing ngendi statuse disimpen
  • Disk data

Mulane, kita bakal nggawe fungsi lan nyebataken Remove-AzrVirtualMachine - lan bakal mbusak ora mung Azure VM, nanging uga kabeh ndhuwur.

Kita pindhah cara standar lan pisanan njaluk obyek kita (VM) nggunakake printah Get-AzVm. Contone, supaya dadi mobil WINSRV19 saka klompok sumber MyTestVMs.

Ayo simpen obyek iki bebarengan karo kabeh sifate dadi variabel $vm:

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

Mbusak wadhah kanthi file diagnostik boot

Nalika nggawe VM ing Azure, pangguna uga dijaluk nggawe wadhah kanggo nyimpen diagnostik boot (wadhah diagnostik boot), supaya yen ana masalah karo boot, ana sing kudu diuripake kanggo ngatasi masalah. Nanging, nalika VM dibusak, wadhah iki ditinggalake supaya ora ana tujuane. Ayo padha ndandani kahanan iki.

  1. Pisanan, ayo goleki akun panyimpenan sing ana ing wadhah iki - kanggo iki, kita kudu nemokake properti kasebut storageUri ing weteng obyek DiagnosticsProfile VM kita. Kanggo iki, aku nggunakake ekspresi reguler iki:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Saiki sampeyan kudu ngerteni jeneng wadhah kasebut, lan kanggo iki sampeyan kudu njaluk ID VM nggunakake perintah kasebut 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. Sabanjure, kita entuk jeneng klompok sumber daya sing dadi wadhah kasebut:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Lan saiki kita duwe kabeh sing perlu kanggo mbusak wadhah kanthi printah Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Mbusak VM

Saiki ayo mbusak mesin virtual dhewe, amarga kita wis nggawe variabel $vm kanggo obyek sing cocog. Inggih, ayo padha mbukak printah Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Mbusak antarmuka jaringan lan alamat IP umum

VM kita isih duwe siji (utawa malah sawetara) antarmuka jaringan (NICs) - kanggo mbusak minangka ora perlu, ayo pindhah liwat properti NetworkInterfaces obyek VM kita lan mbusak NIC karo printah Remove-AzNetworkInterface. Yen ana luwih saka siji antarmuka jaringan, kita nggunakake loop. Ing wektu sing padha, kanggo saben NIC kita bakal mriksa properti kasebut IpConfiguration kanggo nemtokake manawa antarmuka duwe alamat IP umum. Yen ana sing ditemokake, kita bakal mbusak kanthi printah Remove-AzPublicIpAddress.

Punika conto mung kode kuwi, ngendi kita ndeleng liwat kabeh NICs ing daur ulang, mbusak mau, lan mriksa yen ana IP umum. Yen ana, banjur parse properti PublicIpAddress, temokake jeneng sumber daya sing cocog miturut ID lan busak:


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

Mbusak disk sistem

Disk OS minangka gumpalan, sing ana prentah kanggo mbusak Remove-AzStorageBlob - nanging sadurunge nglakokake, sampeyan kudu nyetel nilai sing dibutuhake kanggo paramèter kasebut. Kanggo nindakake iki, khususe, sampeyan kudu njaluk jeneng wadhah panyimpenan sing ngemot disk sistem, banjur pass menyang printah iki bebarengan karo akun panyimpenan sing cocog.

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

Mbusak Blob Status Disk Sistem

Kanggo nindakake iki, sampeyan bisa uga wis guessed, kita njupuk wadhah panyimpenan kang disk iki disimpen, lan, implying sing blob ing mburi ngemot. status, pass paramèter sing cocog kanggo printah mbusak Remove-AzStorageBlob:

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

Lan pungkasanipun, kita mbusak disk data

VM kita isih bisa duwe disk karo data sing digandhengake. Yen ora dibutuhake, kita uga bakal mbusak. Ayo diurai dhisik StorageProfile VM kita lan golek properti Uri. Yen ana sawetara disk, kita ngatur siklus miturut URI. Kanggo saben URI, kita bakal nemokake akun panyimpenan sing cocog nggunakake Get-AzStorageAccount. Banjur parse URI panyimpenan kanggo ngekstrak jeneng blob sing dikarepake lan pass menyang printah delete Remove-AzStorageBlob bebarengan karo akun panyimpenan. Iki bakal katon kaya ing kode:

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

Lan saiki "kita wis tekan happy ending!" Saiki kita kudu ngumpulake siji saka kabeh fragmen kasebut. Penulis apik Adam Bertram ketemu pangguna separo lan nindakake dhewe. Punika link menyang script final disebut Mbusak-AzrVirtualMachine.ps1:

β†’ GitHub

Muga-muga sampeyan bisa nemokake tips praktis iki kanggo ngirit tenaga, wektu, lan dhuwit nalika nggarap Azure VMs.

Source: www.habr.com

Add a comment