Addasu a dileu Azure VMs gan ddefnyddio PowerShell

Gan ddefnyddio PowerShell, mae peirianwyr a gweinyddwyr TG yn awtomeiddio tasgau amrywiol yn llwyddiannus wrth weithio nid yn unig gyda'r safle, ond hefyd gyda seilwaith cwmwl, yn enwedig gydag Azure. Mewn rhai achosion, mae gweithio trwy PowerShell yn llawer mwy cyfleus a chyflymach na gweithio trwy borth Azure. Diolch i'w natur draws-lwyfan, gellir defnyddio PowerShell ar unrhyw system weithredu.

P'un a ydych chi'n rhedeg Ubuntu, Red Hat, neu Windows, gall PowerShell eich helpu i reoli'ch adnoddau cwmwl. Defnyddio'r modiwl Azure PowerShell, er enghraifft, gallwch chi osod unrhyw eiddo o beiriannau rhithwir.

Yn yr erthygl hon, byddwn yn edrych ar sut y gallwch ddefnyddio PowerShell i newid maint VM yn y cwmwl Azure, yn ogystal â dileu VM a'i wrthrychau cysylltiedig.

Addasu a dileu Azure VMs gan ddefnyddio PowerShell

Pwysig! Peidiwch ag anghofio sychu'ch dwylo gyda glanweithydd i baratoi ar gyfer gwaith:

  • Bydd angen modiwl arnoch Modiwl Azure PowerShell - gellir ei lawrlwytho o PowerShell Gallery gyda'r gorchymyn Install-Module Az.
  • Mae angen i chi ddilysu yn y cwmwl Azure lle mae'r peiriant rhithwir yn rhedeg trwy redeg y gorchymyn Connect-AzAccount.

Yn gyntaf, gadewch i ni greu sgript a fydd yn newid maint Azure VM. Gadewch i ni agor VS Code ac arbed sgript PowerShell newydd o'r enw Newid maint-AzVirtualMachine.ps1 — byddwn yn ychwanegu darnau o god ato wrth i'r enghraifft fynd rhagddi.

Gofynnwn am y meintiau VM sydd ar gael

Cyn i chi newid maint y VM, mae angen i chi ddarganfod beth yw'r meintiau derbyniol ar gyfer peiriannau rhithwir yn y cwmwl Azure. I wneud hyn mae angen i chi redeg y gorchymyn Get-AzVMSize.

Felly ar gyfer y peiriant rhithwir devvm01 o'r grŵp adnoddau dev Rydym yn gofyn am bob maint derbyniol posibl:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Mewn problemau go iawn, wrth gwrs, yn lle ResourceGroupName=dev и VMName=devvm01 byddwch yn nodi eich gwerthoedd eich hun ar gyfer y paramedrau hyn.)

Bydd y gorchymyn yn dychwelyd rhywbeth fel hyn:

Addasu a dileu Azure VMs gan ddefnyddio PowerShell

Mae'r rhain i gyd yn opsiynau maint posibl y gellir eu gosod ar gyfer peiriant rhithwir penodol.

Gadewch i ni newid maint y car

Er enghraifft, byddwn yn newid maint i faint newydd Safon_B1ls - ef sydd yn y lle cyntaf ar y rhestr uchod. (Mewn cymwysiadau bywyd go iawn, wrth gwrs, rydych chi'n dewis pa bynnag faint sydd ei angen arnoch chi.)

  1. Yn gyntaf gan ddefnyddio'r gorchymyn Get-AzVM rydym yn cael gwybodaeth am ein gwrthrych (peiriant rhithwir) trwy ei storio mewn newidyn $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Yna cymerwn yr eiddo o'r gwrthrych hwn .HardwareProfile.VmSize a gosodwch y gwerth newydd a ddymunir:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Ac yn awr rydym yn syml yn gweithredu'r gorchymyn diweddaru VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Rydym yn gwneud yn siŵr bod popeth yn mynd yn dda - i wneud hyn, rydym eto yn gofyn am wybodaeth am ein gwrthrych ac yn edrych ar yr eiddo $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Os gwelwn yno Safon_B1ls - mae hynny'n golygu bod popeth mewn trefn, mae maint y car wedi'i newid. Gallwch fynd ymhellach ac adeiladu ar eich llwyddiant trwy newid maint sawl VM ar unwaith gan ddefnyddio arae.

Beth am ddileu VM yn Azure?

Gyda dileu, nid yw popeth mor syml a syml ag y gallai ymddangos. Wedi'r cyfan, mae angen dileu nifer o adnoddau sy'n gysylltiedig â'r peiriant hwn, gan gynnwys:

  • Cist cynwysyddion storio diagnosteg
  • Rhyngwynebau rhwydwaith
  • Cyfeiriadau IP cyhoeddus
  • Disg system a blob lle mae ei statws yn cael ei storio
  • Disgiau data

Felly, byddwn yn creu swyddogaeth ac yn ei galw Remove-AzrVirtualMachine - a bydd yn dileu nid yn unig Azure VM, ond hefyd pob un o'r uchod.

Rydyn ni'n mynd y ffordd safonol ac yn gyntaf yn cael ein gwrthrych (VM) gan ddefnyddio'r gorchymyn Get-AzVm. Er enghraifft, gadewch iddo fod yn gar WINSRV19 o'r grŵp adnoddau MyTestVMs.

Gadewch i ni gadw'r gwrthrych hwn ynghyd â'i holl briodweddau yn newidyn $vm:

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

Tynnu'r cynhwysydd gyda ffeiliau diagnostig cychwyn

Wrth greu VM yn Azure, gofynnir i'r defnyddiwr hefyd greu cynhwysydd ar gyfer storio diagnosteg cist (cynhwysydd diagnosteg cist), fel bod rhywbeth i droi ato ar gyfer datrys problemau os oes problemau wrth gychwyn. Fodd bynnag, pan fydd y VM yn cael ei ddileu, gadewir y cynhwysydd hwn i barhau â'i fodolaeth bellach yn ddibwrpas. Gadewch i ni drwsio'r sefyllfa hon.

  1. Yn gyntaf, gadewch i ni ddarganfod i ba gyfrif storio y mae'r cynhwysydd hwn yn perthyn - ar gyfer hyn mae angen i ni ddod o hyd i'r eiddo storageUri yn ymysgaroedd y gwrthddrych DiagnosticsProfile ein VM. Ar gyfer hyn rwy'n defnyddio'r ymadrodd rheolaidd hwn:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Nawr mae angen i chi ddarganfod enw'r cynhwysydd, ac ar gyfer hyn mae angen i chi gael yr ID VM gan ddefnyddio'r gorchymyn 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. Nesaf, cawn enw'r grŵp adnoddau y mae'r cynhwysydd yn perthyn iddo:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Ac yn awr mae gennym bopeth sydd ei angen arnom i ddileu'r cynhwysydd gyda'r gorchymyn Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Tynnu'r VM

Nawr, gadewch i ni ddileu'r peiriant rhithwir ei hun, gan ein bod eisoes wedi creu newidyn $vm ar gyfer y gwrthrych cyfatebol. Wel, gadewch i ni redeg y gorchymyn Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Cael gwared ar y rhyngwyneb rhwydwaith a'r cyfeiriad IP cyhoeddus

Mae gan ein VM un (neu hyd yn oed sawl) rhyngwyneb rhwydwaith (NICs) o hyd - i gael gwared arnynt fel rhai diangen, gadewch i ni fynd drwy'r eiddo NetworkInterfaces ein gwrthrych VM a dileu'r NIC gyda'r gorchymyn Remove-AzNetworkInterface. Rhag ofn bod mwy nag un rhyngwyneb rhwydwaith, rydym yn defnyddio dolen. Ar yr un pryd, ar gyfer pob CYG byddwn yn gwirio'r eiddo IpConfiguration i benderfynu a oes gan y rhyngwyneb gyfeiriad IP cyhoeddus. Os canfyddir un, byddwn yn ei ddileu gyda'r gorchymyn Remove-AzPublicIpAddress.

Dyma enghraifft o god o'r fath yn unig, lle rydym yn edrych trwy'r holl CYG mewn dolen, yn eu dileu, ac yn gwirio a oes IP cyhoeddus. Os oes, dosranwch yr eiddo PublicIpAddress, dewch o hyd i enw'r adnodd cyfatebol trwy ID a'i ddileu:


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

Tynnu disg y system

Mae'r ddisg OS yn blob, y mae gorchymyn i'w ddileu ar ei gyfer Remove-AzStorageBlob - ond cyn ei weithredu, bydd angen i chi osod y gwerthoedd gofynnol ar gyfer ei baramedrau. I wneud hyn, yn arbennig, mae angen i chi gael enw'r cynhwysydd storio sy'n cynnwys disg y system, ac yna ei drosglwyddo i'r gorchymyn hwn ynghyd â'r cyfrif storio cyfatebol.

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

Tynnu'r Blob Statws Disg System

I wneud hyn, fel y mae'n debyg eich bod eisoes wedi dyfalu, rydym yn cymryd y cynhwysydd storio y mae'r ddisg hon yn cael ei storio ynddo, ac, gan awgrymu bod y blob ar y diwedd yn cynnwys status, pasiwch y paramedrau cyfatebol i'r gorchymyn dileu Remove-AzStorageBlob:

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

Ac yn olaf, rydym yn tynnu'r disgiau data

Gallai ein VM ddal i gael disgiau gyda data a oedd ynghlwm wrtho. Os nad oes eu hangen, byddwn yn eu dileu hefyd. Gadewch i ni ei ddosrannu yn gyntaf StorageProfile ein VM a dod o hyd i'r eiddo Uri. Os oes nifer o ddisgiau, rydym yn trefnu cylch yn ôl URI. Ar gyfer pob URI, byddwn yn dod o hyd i'r cyfrif storio cyfatebol gan ddefnyddio Get-AzStorageAccount. Yna dosranwch yr URI storio i dynnu'r enw blob dymunol a'i drosglwyddo i'r gorchymyn dileu Remove-AzStorageBlob ynghyd â chyfrif storio. Dyma sut olwg fyddai arno yn y cod:

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

A nawr “rydyn ni wedi cyrraedd y diwedd hapus!” Nawr mae angen inni gydosod un cyfanwaith o'r holl ddarnau hyn. Cyfarfu'r awdur caredig Adam Bertram â'r defnyddwyr hanner ffordd a gwneud hynny ei hun. Dyma ddolen i'r sgript derfynol o'r enw Dileu-AzrVirtualMachine.ps1:

GitHub

Gobeithio y bydd yr awgrymiadau ymarferol hyn yn ddefnyddiol i chi o ran arbed ymdrech, amser ac arian i chi wrth weithio gydag Azure VMs.

Ffynhonnell: hab.com

Ychwanegu sylw