Canvieu i suprimiu les màquines virtuals d'Azure mitjançant PowerShell

Amb PowerShell, els enginyers i els administradors de TI automatitzen amb èxit diverses tasques quan treballen no només amb les instal·lacions locals, sinó també amb infraestructures de núvol, en particular amb Azure. En alguns casos, treballar amb PowerShell és molt més còmode i ràpid que treballar amb el portal Azure. Gràcies a la seva naturalesa multiplataforma, PowerShell es pot utilitzar en qualsevol sistema operatiu.

Tant si feu servir Ubuntu, Red Hat o Windows, PowerShell us pot ajudar a controlar els vostres recursos al núvol. Utilitzant el mòdul Azure PowerShell, per exemple, podeu establir qualsevol propietat de les màquines virtuals.

En aquest article, veurem com podeu utilitzar PowerShell per canviar la mida d'una màquina virtual al núvol Azure, així com per suprimir una màquina virtual i els seus objectes associats.

Canvieu i suprimiu les màquines virtuals d'Azure mitjançant PowerShell

¡Important! No oblideu eixugar-vos les mans amb desinfectant per preparar-vos per a la feina:

  • Necessitareu un mòdul Mòdul Azure PowerShell - es pot descarregar des de la Galeria PowerShell amb l'ordre Install-Module Az.
  • Heu d'autenticar-vos al núvol Azure on s'executa la màquina virtual executant l'ordre Connect-AzAccount.

Primer, creem un script que canviarà la mida d'una màquina virtual d'Azure. Obrim VS Code i desem un nou script de PowerShell anomenat Resize-AzVirtualMachine.ps1 — afegirem fragments de codi a mesura que avanci l'exemple.

Demanem les mides de VM disponibles

Abans de canviar la mida de la màquina virtual, heu d'esbrinar quines són les mides acceptables per a les màquines virtuals al núvol Azure. Per fer-ho, heu d'executar l'ordre Get-AzVMSize.

Així que per a la màquina virtual devvm01 del grup de recursos dev Demanem totes les mides acceptables possibles:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(En problemes reals, és clar, en lloc de ResourceGroupName=dev и VMName=devvm01 especificaràs els teus propis valors per a aquests paràmetres.)

L'ordre retornarà alguna cosa com això:

Canvieu i suprimiu les màquines virtuals d'Azure mitjançant PowerShell

Aquestes són totes les opcions de mida possibles que es poden establir per a una màquina virtual determinada.

Redimensionem el cotxe

Per exemple, canviarem la mida a una mida nova Estàndard_B1ls - està en el primer lloc de la llista anterior. (En aplicacions de la vida real, per descomptat, trieu la mida que necessiteu.)

  1. Primer utilitzant l'ordre Get-AzVM obtenim informació sobre el nostre objecte (màquina virtual) emmagatzemant-lo en una variable $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Aleshores prenem la propietat d'aquest objecte .HardwareProfile.VmSize i establiu el nou valor desitjat:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. I ara simplement executem l'ordre d'actualització de VM: Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Ens assegurem que tot vagi bé; per fer-ho, tornem a demanar informació sobre el nostre objecte i mirem la propietat $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Si hi veiem Estàndard_B1ls - això vol dir que tot està en ordre, la mida del cotxe s'ha canviat. Podeu anar més enllà i aprofitar el vostre èxit canviant la mida de diverses màquines virtuals alhora mitjançant una matriu.

Què passa amb la supressió d'una màquina virtual a Azure?

Amb la supressió, no tot és tan senzill i directe com podria semblar. Després de tot, cal eliminar una sèrie de recursos associats amb aquesta màquina, com ara:

  • Contenidors d'emmagatzematge de diagnòstic d'arrencada
  • Interfícies de xarxa
  • Adreces IP públiques
  • Disc del sistema i blob on s'emmagatzema el seu estat
  • Discs de dades

Per tant, crearem una funció i l'anomenarem Remove-AzrVirtualMachine - i suprimirà no només Azure VM, sinó també tot l'anterior.

Anem pel camí estàndard i primer obtenim el nostre objecte (VM) mitjançant l'ordre Get-AzVm. Per exemple, que sigui un cotxe WINSRV19 del grup de recursos MyTestVMs.

Desem aquest objecte juntament amb totes les seves propietats en una variable $vm:

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

Eliminació del contenidor amb fitxers de diagnòstic d'arrencada

Quan es crea una màquina virtual a Azure, també se li demana a l'usuari que creï un contenidor per emmagatzemar els diagnòstics d'arrencada (contenidor de diagnòstics d'arrencada), de manera que si hi ha problemes amb l'arrencada, hi ha alguna cosa a qui recórrer per resoldre'ls. Tanmateix, quan s'elimina la VM, aquest contenidor es deixa per continuar la seva existència ara sense propòsit. Arreglem aquesta situació.

  1. Primer, anem a esbrinar a quin compte d'emmagatzematge pertany aquest contenidor; per això hem de trobar la propietat storageUri a les entranyes de l'objecte DiagnosticsProfile el nostre VM. Per a això faig servir aquesta expressió regular:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Ara heu d'esbrinar el nom del contenidor i, per a això, heu d'obtenir l'ID de la VM mitjançant l'ordre 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. A continuació, obtenim el nom del grup de recursos al qual pertany el contenidor:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. I ara tenim tot el que necessitem per eliminar el contenidor amb l'ordre Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Eliminació de la VM

Ara suprimim la pròpia màquina virtual, ja que ja hem creat una variable $vm per a l'objecte corresponent. Bé, executem l'ordre Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Eliminació de la interfície de xarxa i l'adreça IP pública

La nostra màquina virtual encara té una (o fins i tot diverses) interfícies de xarxa (NIC) - per eliminar-les com a innecessàries, passem per la propietat NetworkInterfaces el nostre objecte VM i suprimiu la NIC amb l'ordre Remove-AzNetworkInterface. En cas que hi hagi més d'una interfície de xarxa, fem servir un bucle. Al mateix temps, per a cada NIC revisarem la propietat IpConfiguration per determinar si la interfície té una adreça IP pública. Si se'n troba un, l'eliminarem amb l'ordre Remove-AzPublicIpAddress.

Aquí teniu un exemple d'aquest codi, on mirem totes les NIC en un bucle, les suprimim i comprovem si hi ha una IP pública. Si n'hi ha, analitzeu la propietat PublicIpAddress, cerqueu el nom del recurs corresponent per ID i suprimiu-lo:


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

Eliminació del disc del sistema

El disc del sistema operatiu és un blob, per al qual hi ha una ordre per eliminar-lo Remove-AzStorageBlob - però abans d'executar-lo, haureu d'establir els valors requerits per als seus paràmetres. Per fer-ho, en particular, cal obtenir el nom del contenidor d'emmagatzematge que conté el disc del sistema i després passar-lo a aquesta ordre juntament amb el compte d'emmagatzematge corresponent.

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

Eliminació del blob d'estat del disc del sistema

Per fer-ho, com probablement ja heu endevinat, agafem el contenidor d'emmagatzematge en el qual s'emmagatzema aquest disc, i, donant a entendre que el blob al final conté status, passeu els paràmetres corresponents a l'ordre delete Remove-AzStorageBlob:

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

I finalment, traiem els discos de dades

La nostra màquina virtual encara podria tenir discs amb dades connectades a ella. Si no són necessaris, també els esborrarem. Analitzem-ho primer StorageProfile la nostra VM i troba la propietat Uri. Si hi ha diversos discos, organitzem un cicle segons URI. Per a cada URI, trobarem el compte d'emmagatzematge corresponent utilitzant Get-AzStorageAccount. A continuació, analitzeu l'URI d'emmagatzematge per extreure el nom del blob desitjat i passeu-lo a l'ordre delete Remove-AzStorageBlob juntament amb un compte d'emmagatzematge. Així es veuria al codi:

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

I ara "hem arribat al final feliç!" Ara hem de reunir un sol tot a partir de tots aquests fragments. L'amable autor Adam Bertram es va reunir amb els usuaris a mig camí i ho va fer ell mateix. Aquí teniu un enllaç al guió final anomenat Remove-AzrVirtualMachine.ps1:

GitHub

Espero que aquests consells pràctics us siguin útils per estalviar-vos esforç, temps i diners quan treballeu amb màquines virtuals Azure.

Font: www.habr.com

Afegeix comentari