Hloov kho thiab tshem tawm Azure VMs siv PowerShell

Siv PowerShell, engineers thiab IT cov thawj coj ua tiav automate ntau yam dej num thaum ua hauj lwm tsis tsuas yog nyob rau hauv lub tsev, tab sis kuj nrog huab infrastructures, tshwj xeeb tshaj yog nrog Azure. Qee zaum, kev ua haujlwm los ntawm PowerShell yog qhov yooj yim dua thiab sai dua li kev ua haujlwm los ntawm Azure portal. Ua tsaug rau nws qhov sib txawv ntawm lub platform, PowerShell tuaj yeem siv rau ntawm txhua qhov kev khiav haujlwm.

Txawm hais tias koj tab tom khiav Ubuntu, Red Hat, lossis Windows, PowerShell tuaj yeem pab koj tswj koj cov peev txheej huab. Siv lub module Azure PowerShellPiv txwv li, koj tuaj yeem teeb tsa txhua yam khoom ntawm lub tshuab virtual.

Hauv tsab xov xwm no, peb yuav saib seb koj tuaj yeem siv PowerShell li cas los hloov kho VM hauv huab Azure, nrog rau tshem tawm VM thiab nws cov khoom cuam tshuam.

Hloov kho thiab tshem tawm Azure VMs siv PowerShell

Tseem ceeb! Tsis txhob hnov ​​​​qab so koj txhais tes nrog tshuaj tua kab mob los npaj ua haujlwm:

  • Koj yuav xav tau ib tug module Azure PowerShell Module - nws tuaj yeem rub tawm los ntawm PowerShell Gallery nrog cov lus txib Install-Module Az.
  • Koj yuav tsum tau ua pov thawj hauv Azure huab qhov twg lub tshuab virtual khiav los ntawm kev khiav cov lus txib Connect-AzAccount.

Ua ntej, cia peb tsim ib tsab ntawv uas yuav hloov kho Azure VM. Cia peb qhib VS Code thiab txuag ib tsab ntawv PowerShell tshiab hu ua Resize-AzVirtualMachine.ps1 - peb yuav ntxiv cov lej rau nws raws li qhov piv txwv nce mus.

Peb thov VM qhov ntau thiab tsawg

Ua ntej koj hloov VM loj, koj yuav tsum paub seb qhov loj npaum li cas yog rau cov tshuab virtual hauv Azure huab. Txhawm rau ua qhov no koj yuav tsum khiav cov lus txib Get-AzVMSize.

Yog li ntawd rau lub tshuab virtual vwm 01 los ntawm pab pawg neeg dev Peb thov tag nrho cov tau txais qhov ntau thiab tsawg:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Hauv cov teeb meem tiag tiag, ntawm chav kawm, tsis yog ResourceGroupName = dev ΠΈ VMName = devvm01 koj yuav qhia koj tus kheej qhov tseem ceeb rau cov kev txwv no.)

Cov lus txib yuav rov qab qee yam zoo li no:

Hloov kho thiab tshem tawm Azure VMs siv PowerShell

Cov no yog txhua qhov kev xaiv me me uas tuaj yeem teeb tsa rau lub tshuab virtual muab.

Cia peb hloov lub tsheb

Piv txwv li, peb yuav resize rau qhov loj me Standard_B1ls - nws yog thawj qhov chaw ntawm cov npe saum toj no. (Hauv daim ntawv thov lub neej tiag tiag, tau kawg, koj xaiv qhov loj npaum li cas koj xav tau.)

  1. Ua ntej siv cov lus txib Get-AzVM peb tau txais cov ntaub ntawv hais txog peb cov khoom (lub tshuab virtual) los ntawm kev khaws cia rau hauv qhov sib txawv $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Tom qab ntawd peb muab cov cuab yeej los ntawm cov khoom no .HardwareProfile.VmSize thiab teeb tsa tus nqi tshiab xav tau:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Thiab tam sim no peb tsuas yog ua rau VM hloov tshiab hais kom ua - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Peb paub tseeb tias txhua yam mus zoo - ua qhov no, peb rov thov cov ntaub ntawv hais txog peb cov khoom thiab saib cov khoom $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Yog peb pom muaj Standard_B1ls - uas txhais tau tias txhua yam nyob rau hauv kev txiav txim, qhov loj ntawm lub tsheb tau hloov. Koj tuaj yeem mus ntxiv thiab txhim kho koj txoj kev vam meej los ntawm resizing ob peb VMs ib zaug siv ib qho array.

Yuav ua li cas tshem tawm VM hauv Azure?

Nrog kev tshem tawm, tsis yog txhua yam yooj yim thiab ncaj ncees raws li nws yuav zoo li. Tom qab tag nrho, nws yog ib qho tsim nyog yuav tsum tshem tawm ntau cov peev txheej cuam tshuam nrog lub tshuab no, suav nrog:

  • Boot diagnostics cia ntim
  • Network sib cuam tshuam
  • Public IP chaw nyob
  • System disk thiab blob qhov twg nws cov xwm txheej khaws cia
  • Cov ntaub ntawv disks

Yog li ntawd, peb yuav tsim ib qho haujlwm thiab hu nws Remove-AzrVirtualMachine - thiab nws yuav rho tawm tsis tsuas yog Azure VM, tab sis kuj tag nrho cov saum toj no.

Peb mus rau txoj kev txheem thiab thawj zaug tau txais peb cov khoom (VM) siv cov lus txib Get-AzVm. Piv txwv li, cia nws ua lub tsheb WINSRV19 los ntawm pab pawg neeg MyTestVMs.

Cia peb khaws cov khoom no nrog rau tag nrho nws cov khoom rau hauv qhov sib txawv $vm:

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

Tshem lub thawv nrog khau raj cov ntaub ntawv kuaj mob

Thaum tsim VM hauv Azure, tus neeg siv kuj tau hais kom tsim ib lub thawv rau khaws cov khau raj kuaj mob (khau raj kuaj lub thawv), yog li yog tias muaj teeb meem nrog khau raj, muaj qee yam tig rau kev daws teeb meem. Txawm li cas los xij, thaum VM raug tshem tawm, lub thawv no tau tso tseg kom txuas ntxiv nws tam sim no tsis muaj lub hom phiaj. Cia peb kho qhov teeb meem no.

  1. Ua ntej, cia peb nrhiav seb qhov chaw khaws cia cov thawv no yog rau - rau qhov no peb yuav tsum nrhiav cov cuab yeej storageUri nyob rau hauv lub plab ntawm cov khoom DiagnosticsProfile niaj VM. Rau qhov no kuv siv cov lus qhia tsis tu ncua:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Tam sim no koj yuav tsum paub lub npe ntawm lub thawv, thiab rau qhov no koj yuav tsum tau txais VM ID siv cov lus txib 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. Tom ntej no, peb tau txais lub npe ntawm pab pawg neeg uas lub thawv belongs:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Thiab tam sim no peb muaj txhua yam peb xav tau tshem tawm lub thawv nrog cov lus txib Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Tshem tawm VM

Tam sim no cia peb rho tawm lub tshuab virtual nws tus kheej, txij li peb twb tau tsim qhov sib txawv $vm rau cov khoom sib xws. Zoo, cia peb khiav cov lus txib Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Tshem tawm lub network interface thiab pej xeem IP chaw nyob

Peb VM tseem muaj ib qho (lossis txawm ntau) network interfaces (NICs) - kom tshem tawm lawv yam tsis tsim nyog, cia peb mus dhau ntawm cov cuab yeej NetworkInterfaces peb cov khoom VM thiab rho tawm NIC nrog cov lus txib Remove-AzNetworkInterface. Yog tias muaj ntau tshaj ib lub network interface, peb siv lub voj. Nyob rau tib lub sijhawm, rau txhua NIC peb yuav kuaj xyuas cov cuab yeej IpConfiguration los txiav txim seb lub interface puas muaj qhov chaw nyob IP pej xeem. Yog tias pom ib tus, peb yuav tshem nws nrog cov lus txib Remove-AzPublicIpAddress.

Ntawm no yog ib qho piv txwv ntawm cov lej zoo li no, qhov twg peb saib tag nrho NICs hauv lub voj voog, tshem tawm lawv, thiab xyuas seb puas muaj tus IP pej xeem. Yog tias muaj, ces txheeb xyuas cov cuab yeej PublicIpAddress, nrhiav lub npe ntawm cov khoom siv los ntawm ID thiab rho tawm nws:


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

Tshem tawm qhov system disk

OS disk yog blob, uas muaj lus txib kom rho tawm nws Remove-AzStorageBlob - tab sis ua ntej ua nws, koj yuav tsum tau teeb tsa qhov tseem ceeb rau nws cov kev txwv. Txhawm rau ua qhov no, tshwj xeeb, koj yuav tsum tau txais lub npe ntawm lub thawv ntim khoom uas muaj lub kaw lus disk, thiab tom qab ntawd dhau mus rau qhov lus txib no nrog rau tus lej khaws cia.

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

Tshem tawm System Disk Status Blob

Ua li no, raws li tej zaum koj twb tau twv, peb nqa lub thawv ntim khoom uas lub disk no khaws cia, thiab, txhais tau tias blob thaum kawg muaj. status, hla cov kev tsis sib xws rau cov lus txib rho tawm Remove-AzStorageBlob:

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

Thiab thaum kawg, peb tshem tawm cov ntaub ntawv disks

Peb VM tseem tuaj yeem muaj cov disks nrog cov ntaub ntawv uas tau txuas rau nws. Yog tias lawv tsis xav tau, peb yuav muab tshem tawm thiab. Cia peb parse ua ntej StorageProfile peb VM thiab nrhiav cov cuab yeej Uri. Yog hais tias muaj ob peb disks, peb npaj ib lub voj voog raws li URI. Rau txhua qhov URI, peb yuav pom cov ntaub ntawv khaws cia siv Get-AzStorageAccount. Tom qab ntawd txheeb xyuas qhov chaw cia URI txhawm rau rho tawm lub npe blob xav tau thiab dhau mus rau qhov kev hais kom tshem tawm Remove-AzStorageBlob nrog rau tus account cia. Nov yog qhov nws yuav zoo li hauv code:

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

Thiab tam sim no "peb tau mus txog qhov kawg zoo siab!" Tam sim no peb yuav tsum sib sau ua ke ib qho tag nrho los ntawm tag nrho cov fragments. Tus sau zoo Adam Bertram ntsib cov neeg siv ib nrab thiab ua nws tus kheej. Nov yog qhov txuas mus rau tsab ntawv kawg hu ua Tshem tawm-AzrVirtualMachine.ps1:

β†’ GitHub

Kuv vam tias koj yuav pom cov lus qhia siv tau no pab txuag koj lub dag zog, sijhawm, thiab nyiaj txiag thaum ua haujlwm nrog Azure VMs.

Tau qhov twg los: www.hab.com

Ntxiv ib saib