Modificazione è eliminazione di VM Azure cù PowerShell

Utilizendu PowerShell, l'ingegneri è l'amministratori di l'IT automatizanu cù successu diversi travaglii quandu travaglianu micca solu in situ, ma ancu cù infrastrutture nuvola, in particulare cù Azure. In certi casi, travaglià cù PowerShell hè assai più còmuda è più veloce di travaglià cù u portale Azure. Grazie à a so natura multipiattaforma, PowerShell pò esse usatu in ogni sistema operatore.

Sia chì site Ubuntu, Red Hat, o Windows, PowerShell pò aiutà vi cuntrullà e vostre risorse in nuvola. Utilizà u modulu Azure PowerShell, per esempiu, pudete stabilisce ogni pruprietà di e macchine virtuale.

In questu articulu, guardemu cumu pudete aduprà PowerShell per ridimensionà una VM in u cloud Azure, è ancu eliminà una VM è i so oggetti assuciati.

Modificazione è eliminazione di VM Azure cù PowerShell

Impurtante! Ùn vi scurdate di asciugà e mani cù disinfettante per preparà per u travagliu:

  • Avete bisognu di un modulu Modulu Azure PowerShell - pò esse scaricatu da PowerShell Gallery cù u cumandimu Install-Module Az.
  • Avete bisognu di autentificà in u cloud Azure induve a macchina virtuale hè in esecuzione eseguendu u cumandamentu Connect-AzAccount.

Prima, creemu un script chì ridimensionarà una VM Azure. Apremu VS Code è salvemu un novu script PowerShell chjamatu Resize-AzVirtualMachine.ps1 - avemu da aghjunghje pezzi di codice à quandu l'esempiu avanza.

Avemu dumandatu e dimensioni VM dispunibili

Prima di cambià a dimensione di VM, avete bisognu di sapè quale sò e dimensioni accettabili per e macchine virtuali in u cloud Azure. Per fà questu, avete bisognu di eseguisce u cumandamentu Get-AzVMSize.

Allora per a macchina virtuale devvm01 da u gruppu di risorse dev Richiedemu tutte e pussibuli taglie accettabili:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(In i prublemi veri, sicuru, invece di ResourceGroupName=dev и VMName=devvm01 vi specificà i vostri valori per questi parametri.)

U cumandimu restituverà qualcosa cum'è questu:

Modificazione è eliminazione di VM Azure cù PowerShell

Quessi sò tutte l'opzioni di dimensione pussibuli chì ponu esse stabiliti per una macchina virtuale data.

Ridimensionemu a vittura

Per esempiu, ridimensionaremu à una nova dimensione Standard_B1ls - hè in u primu postu in a lista sopra. (In l'applicazioni di a vita reale, sicuru, sceglite qualunque dimensione chì avete bisognu.)

  1. Prima utilizendu u cumandamentu Get-AzVM avemu infurmazione nantu à u nostru ughjettu (macchina virtuale) almacenendu in una variabile $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Allora pigliamu a pruprietà da questu ughjettu .HardwareProfile.VmSize è stabilisce u novu valore desideratu:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. È avà avemu solu esecutà u cumandamentu di l'aghjurnamentu di VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Avemu assicuratu chì tuttu hè andatu bè - per fà questu, dumandemu di novu infurmazione nantu à u nostru ughjettu è fighjemu a pruprietà $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Si vedemu quì Standard_B1ls - chì significa chì tuttu hè in ordine, a dimensione di a vittura hè stata cambiata. Pudete andà più luntanu è custruì u vostru successu ridimensionendu parechje VM à una volta usendu un array.

Chì ci hè di sguassà una VM in Azure?

Cù l'eliminazione, micca tuttu hè cusì simplice è direttu cum'è puderia pare. Dopu tuttu, hè necessariu di sguassà una quantità di risorse assuciate cù sta macchina, cumprese:

  • Contenitori di almacenamiento di diagnostichi di boot
  • Interfaces di rete
  • Indirizzi IP publichi
  • Discu di u sistema è blob induve u so statutu hè almacenatu
  • Dischi di dati

Per quessa, avemu da creà una funzione è chjama Remove-AzrVirtualMachine - è sguasserà micca solu Azure VM, ma ancu tutte e sopra.

Andemu u modu standard è prima uttene u nostru ughjettu (VM) cù u cumandimu Get-AzVm. Per esempiu, lasciate esse una vittura WINSRV19 da u gruppu di risorse MyTestVMs.

Salvemu stu ughjettu cù tutte e so proprietà in una variàbile $vm:

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

Eliminazione di u cuntinuu cù i schedarii di diagnostichi di boot

Quandu crea una VM in Azure, l'utilizatore hè ancu dumandatu à creà un containeru per almacenà i diagnostichi di boot (container di diagnostichi di boot), perchè se ci sò prublemi cù l'avvio, ci hè qualcosa per vultà per a risoluzione di i prublemi. Tuttavia, quandu a VM hè sguassata, stu cuntinuu hè lasciatu per cuntinuà a so esistenza avà senza scopu. Fixemu sta situazione.

  1. Prima, scopremu à quale contu di almacenamentu appartene stu containeru - per questu avemu bisognu di truvà a pruprietà storageUri in l'intestini di l'ughjettu DiagnosticsProfile u nostru VM. Per questu aghju utilizatu sta espressione regulare:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Avà avete bisognu di truvà u nome di u cuntinuu, è per questu avete bisognu di ottene l'ID VM cù u cumandimu 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. Dopu, avemu u nome di u gruppu di risorse à quale appartene u cuntinuu:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. È avà avemu tuttu ciò chì avemu bisognu di sguassà u cuntinuu cù u cumandamentu Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Eliminazione di a VM

Avà sguassate a macchina virtuale stessu, postu chì avemu digià creatu una variabile $vm per l'ughjettu currispundente. Ebbè, andemu à eseguisce u cumandamentu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Eliminazione di l'interfaccia di rete è l'indirizzu IP publicu

A nostra VM hà sempre una (o ancu parechje) interfacce di rete (NIC) - per sguassà cum'è inutile, andemu per a pruprietà NetworkInterfaces u nostru ughjettu VM è sguassate u NIC cù u cumandimu Remove-AzNetworkInterface. In casu chì ci hè più di una interfaccia di rete, usemu un ciclu. À u listessu tempu, per ogni NIC avemu da verificà a pruprietà IpConfiguration per stabilisce se l'interfaccia hà un indirizzu IP publicu. Sè unu hè trovu, avemu da sguassà cù u cumandamentu Remove-AzPublicIpAddress.

Eccu un esempiu di solu tali codice, induve guardemu tutte e NIC in un ciclu, sguassate, è verificate s'ellu ci hè una IP publica. Se ci hè, allora analizà a pruprietà PublicIpAddress, truvate u nome di a risorsa currispondente per ID è sguassate:


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

Eliminazione di u discu di u sistema

U discu OS hè un blob, per quale ci hè un cumandamentu per sguassà Remove-AzStorageBlob - ma prima di eseguisce, avete bisognu di stabilisce i valori necessarii per i so paràmetri. Per fà questu, in particulare, avete bisognu di piglià u nome di u cuntinuu di almacenamiento chì cuntene u discu di u sistema, è poi passà à questu cumandamentu cù u cuntu di almacenamiento currispundente.

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

Eliminazione di u Blob di Status Disk di u Sistema

Per fà questu, cum'è probabilmente avete digià capitu, pigliamu u cuntainer d'almacenamiento in u quale hè almacenatu stu discu, è, chì implica chì u blob à a fine cuntene status, Passà i paràmetri currispundenti à u cumandamentu di sguassà Remove-AzStorageBlob:

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

È infine, sguassemu i dischi di dati

A nostra VM puderia ancu avè dischi cù dati chì sò stati attaccati à questu. S'ellu ùn hè micca necessariu, li elimineremu ancu. Analizemu prima StorageProfile u nostru VM è truvate a pruprietà Uri. Se ci sò parechji dischi, urganizemu un ciclu secondu URI. Per ogni URI, truveremu u cuntu di almacenamentu currispundenti utilizendu Get-AzStorageAccount. Allora analizà l'URI di almacenamiento per estrattà u nome di blob desideratu è trasmette à u cumandamentu di sguassà Remove-AzStorageBlob cun un contu di almacenamento. Questu hè ciò chì parerebbe in codice:

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

È avà "avemu ghjuntu à a fine felice!" Avà avemu bisognu di assemblà un unicu tutale da tutti questi frammenti. L'autore amabile Adam Bertram hà scontru l'utilizatori à mità di strada è hà fattu ellu stessu. Eccu un ligame à u script finali chjamatu Remove-AzrVirtualMachine.ps1:

GitHub

Spergu chì sti cunsiglii pratichi vi saranu utili per risparmià sforzu, tempu è soldi quandu travagliate cù Azure VMs.

Source: www.habr.com

Add a comment