Azure VM:ien muokkaaminen ja poistaminen PowerShellin avulla

PowerShellin avulla insinöörit ja IT-järjestelmänvalvojat automatisoivat onnistuneesti erilaisia ​​tehtäviä työskennellessään paitsi paikallisten, myös pilviinfrastruktuurien, erityisesti Azuren, kanssa. Joissakin tapauksissa PowerShellin kautta työskentely on paljon helpompaa ja nopeampaa kuin Azure-portaalin kautta. Monialustaisen luonteensa ansiosta PowerShellia voidaan käyttää missä tahansa käyttöjärjestelmässä.

Käytitpä Ubuntua, Red Hatia tai Windowsia, PowerShell voi auttaa sinua hallitsemaan pilviresursseja. Moduulin käyttö Azure PowerShellVoit esimerkiksi määrittää mitä tahansa virtuaalikoneiden ominaisuuksia.

Tässä artikkelissa tarkastellaan, kuinka voit käyttää PowerShellia virtuaalikoneen koon muuttamiseen Azure-pilvessä sekä virtuaalikoneen ja siihen liittyvien objektien poistamiseen.

Azure VM:ien muokkaaminen ja poistaminen PowerShellin avulla

Tärkeää! Älä unohda pyyhkiä kätesi desinfiointiaineella valmistautuaksesi työhön:

  • Tarvitset moduulin Azure PowerShell -moduuli - se voidaan ladata PowerShell Gallerystä komennolla Install-Module Az.
  • Sinun täytyy todentaa Azure-pilvessä, jossa virtuaalikone on käynnissä, suorittamalla komennon Connect-AzAccount.

Luodaan ensin komentosarja, joka muuttaa Azure VM:n kokoa. Avataan VS Code ja tallennetaan uusi PowerShell-skripti nimeltä Resize-AzVirtualMachine.ps1 - lisäämme siihen koodinpätkiä esimerkin edetessä.

Pyydämme saatavilla olevia VM-kokoja

Ennen kuin muutat virtuaalikoneen kokoa, sinun on selvitettävä, mitkä ovat hyväksytyt koot Azure-pilven virtuaalikoneen. Tätä varten sinun on suoritettava komento Get-AzVMSize.

Virtuaalikoneelle siis devvm01 resurssiryhmästä dev Pyydämme kaikkia mahdollisia hyväksyttäviä kokoja:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Todellisissa ongelmissa tietysti sen sijaan ResourceGroupName=dev и VMName=devvm01 määrität omat arvosi näille parametreille.)

Komento palauttaa jotain tällaista:

Azure VM:ien muokkaaminen ja poistaminen PowerShellin avulla

Nämä ovat kaikki mahdollisia kokovaihtoehtoja, jotka voidaan asettaa tietylle virtuaalikoneelle.

Muutetaan auton kokoa

Esimerkiksi muutamme kokoa uuteen kokoon Standard_B1ls - hän on yllä olevan listan ensimmäisellä sijalla. (Tosielämän sovelluksissa tietysti valitset minkä koon tarvitset.)

  1. Käytä ensin komentoa Get-AzVM saamme tietoa objektistamme (virtuaalikoneesta) tallentamalla sen muuttujaan $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Sitten otamme kiinteistön tästä kohteesta .HardwareProfile.VmSize ja aseta haluamasi uusi arvo:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ja nyt suoritamme vain VM-päivityskomennon - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Varmistamme, että kaikki sujui hyvin - tätä varten pyydämme jälleen tietoja kohteestamme ja katsomme kiinteistöä $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Jos näemme siellä Standard_B1ls - eli kaikki on kunnossa, auton kokoa on muutettu. Voit mennä pidemmälle ja rakentaa menestystäsi muuttamalla useiden virtuaalikoneiden kokoa kerralla taulukon avulla.

Entä virtuaalikoneen poistaminen Azuressa?

Poistamisen yhteydessä kaikki ei ole niin yksinkertaista ja suoraviivaista kuin miltä se saattaa näyttää. Loppujen lopuksi on tarpeen poistaa useita tähän koneeseen liittyviä resursseja, mukaan lukien:

  • Käynnistysdiagnostiikan tallennussäiliöt
  • Verkkorajapinnat
  • Julkiset IP-osoitteet
  • Järjestelmälevy ja blob, johon sen tila on tallennettu
  • Datalevyt

Siksi luomme funktion ja kutsumme sitä Remove-AzrVirtualMachine - ja se poistaa Azure VM:n lisäksi myös kaikki edellä mainitut.

Menemme tavalliseen tapaan ja hankimme ensin objektimme (VM) komennolla Get-AzVm. Olkoon se esimerkiksi auto WINSRV19 resurssiryhmästä MyTestVM:t.

Tallennetaan tämä objekti kaikkine ominaisuuksineen muuttujaksi $vm:

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

Säilön poistaminen käynnistysdiagnostiikkatiedostoilla

Kun luot virtuaalikonetta Azuressa, käyttäjää pyydetään myös luomaan kontti käynnistysdiagnostiikan tallentamista varten (käynnistysdiagnostiikkasäilö), jotta jos käynnistyksessä ilmenee ongelmia, on mistä kääntyä vianetsintää varten. Kuitenkin, kun VM poistetaan, tämä säilö jätetään jatkamaan nyt tarkoituksetonta olemassaoloaan. Korjataan tämä tilanne.

  1. Selvitetään ensin, mille tallennustilille tämä säilö kuuluu - tätä varten meidän on löydettävä omaisuus storageUri esineen suolistossa DiagnosticsProfile meidän VM. Tätä varten käytän tätä säännöllistä lauseketta:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Nyt sinun on selvitettävä säilön nimi, ja tätä varten sinun on hankittava VM-tunnus komennolla 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. Seuraavaksi saamme sen resurssiryhmän nimen, johon säilö kuuluu:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ja nyt meillä on kaikki mitä tarvitsemme kontin poistamiseen komennolla Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM:n poistaminen

Nyt poistetaan itse virtuaalikone, koska olemme jo luoneet muuttujan $vm vastaavalle objektille. No, suoritetaan komento Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Verkkoliitännän ja julkisen IP-osoitteen poistaminen

Virtuaalikoneellamme on edelleen yksi (tai jopa useita) verkkoliitäntöjä (NIC) - käydään läpi omaisuus, jotta ne voidaan poistaa tarpeettomina NetworkInterfaces VM-objektimme ja poista verkkokortti komennolla Remove-AzNetworkInterface. Jos verkkoliitäntää on useampi kuin yksi, käytämme silmukkaa. Samalla tarkastamme kiinteistön jokaisen verkkokortin kohdalla IpConfiguration määrittääksesi, onko liitännällä julkinen IP-osoite. Jos sellainen löytyy, poistamme sen komennolla Remove-AzPublicIpAddress.

Tässä on esimerkki juuri sellaisesta koodista, jossa käymme läpi kaikki verkkokortit silmukassa, poistamme ne ja tarkistamme, onko julkista IP-osoitetta. Jos on, jäsennä omaisuus PublicIpAddress, etsi vastaavan resurssin nimi tunnuksella ja poista se:


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

Järjestelmälevyn poistaminen

OS-levy on blob, jolle on olemassa komento poistaa se Remove-AzStorageBlob - mutta ennen sen suorittamista sinun on asetettava vaaditut arvot sen parametreille. Tätä varten sinun on erityisesti hankittava järjestelmälevyn sisältävän tallennussäiliön nimi ja välitettävä se sitten tälle komennolle vastaavan tallennustilin kanssa.

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

Järjestelmälevyn tila Blobin poistaminen

Tätä varten, kuten luultavasti jo arvasit, otamme tallennussäiliön, johon tämä levy on tallennettu, ja tarkoitamme, että lopussa oleva blob sisältää status, välitä vastaavat parametrit delete-komentoon Remove-AzStorageBlob:

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

Ja lopuksi poistamme datalevyt

Virtuaalikoneellamme voi silti olla levyjä, joissa on siihen liitettyjä tietoja. Jos niitä ei tarvita, poistamme myös ne. Jäsennetään se ensin StorageProfile meidän VM ja löydä omaisuus Uri. Jos levyjä on useita, järjestämme syklin sen mukaan URI. Jokaiselle URI:lle löydämme vastaavan tallennustilin käyttämällä Get-AzStorageAccount. Jäsennä sitten tallennus-URI ja pura haluttu blobin nimi ja välitä se poisto-komennolle Remove-AzStorageBlob tallennustilin kanssa. Tältä se näyttäisi koodissa:

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

Ja nyt "olemme saavuttaneet onnellisen lopun!" Nyt meidän on koottava yksi kokonaisuus kaikista näistä fragmenteista. Ystävällinen kirjailija Adam Bertram tapasi käyttäjät puolivälissä ja teki sen itse. Tässä on linkki lopulliseen käsikirjoitukseen nimeltä Remove-AzrVirtualMachine.ps1:

GitHub

Toivon, että näistä käytännön vinkeistä on sinulle hyötyä säästääksesi vaivaa, aikaa ja rahaa, kun työskentelet Azure-virtuaalikoneen kanssa.

Lähde: will.com

Lisää kommentti