Azure virtuālo maŔīnu pārveidoÅ”ana un dzÄ“Å”ana, izmantojot PowerShell

Izmantojot PowerShell, inženieri un IT administratori veiksmÄ«gi automatizē dažādus uzdevumus, strādājot ne tikai ar lokālām, bet arÄ« mākoņa infrastruktÅ«rām, jo ā€‹ā€‹Ä«paÅ”i ar Azure. Dažos gadÄ«jumos darbs, izmantojot PowerShell, ir daudz ērtāk un ātrāk nekā Azure portālā. Pateicoties tā starpplatformu raksturam, PowerShell var izmantot jebkurā operētājsistēmā.

NeatkarÄ«gi no tā, vai izmantojat Ubuntu, Red Hat vai Windows, PowerShell var palÄ«dzēt jums kontrolēt mākoņa resursus. Izmantojot moduli Azure PowerShell, piemēram, varat iestatÄ«t jebkurus virtuālo maŔīnu rekvizÄ«tus.

Å ajā rakstā mēs apskatÄ«sim, kā varat izmantot PowerShell, lai mainÄ«tu virtuālās maŔīnas izmērus Azure mākonÄ«, kā arÄ« dzēstu virtuālo maŔīnu un ar to saistÄ«tos objektus.

Azure virtuālo maŔīnu pārveidoÅ”ana un dzÄ“Å”ana, izmantojot PowerShell

Svarīgi! Lai sagatavotos darbam, neaizmirstiet noslaucīt rokas ar dezinfekcijas līdzekli:

  • Jums bÅ«s nepiecieÅ”ams modulis Azure PowerShell modulis - to var lejupielādēt no PowerShell galerijas ar komandu Install-Module Az.
  • Jums ir jāautentificējas Azure mākonÄ«, kur darbojas virtuālā maŔīna, palaižot komandu Connect-AzAccount.

Vispirms izveidosim skriptu, kas mainÄ«s Azure virtuālās maŔīnas izmērus. Atvērsim VS Code un saglabāsim jaunu PowerShell skriptu ar nosaukumu Resize-AzVirtualMachine.ps1 ā€” mēs tam pievienosim koda daļas, piemēra gaitā.

Mēs pieprasām pieejamos VM izmērus

Pirms virtuālās maŔīnas lieluma maiņas jums ir jānoskaidro, kādi ir pieņemamie izmēri virtuālajām maŔīnām Azure mākonÄ«. Lai to izdarÄ«tu, jums ir jāpalaiž komanda Get-AzVMSize.

Tātad virtuālajai maŔīnai devvm01 no resursu grupas dev Mēs pieprasām visus iespējamos pieņemamos izmērus:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Reālās problēmās, protams, tā vietā ResourceGroupName=dev Šø VMName=devvm01 jÅ«s norādÄ«sit savas vērtÄ«bas Å”iem parametriem.)

Komanda atgriezīs kaut ko līdzīgu Ŕim:

Azure virtuālo maŔīnu pārveidoÅ”ana un dzÄ“Å”ana, izmantojot PowerShell

Å Ä«s ir visas iespējamās lieluma opcijas, kuras var iestatÄ«t konkrētai virtuālajai maŔīnai.

MainÄ«sim automaŔīnas izmērus

Piemēram, mēs mainÄ«sim izmēru uz jaunu izmēru Standarta_B1ls - viņŔ ir pirmajā vietā augstāk esoÅ”ajā sarakstā. (Protams, reālajā dzÄ«vē jÅ«s izvēlaties nepiecieÅ”amo izmēru.)

  1. Vispirms izmantojiet komandu Get-AzVM mēs iegÅ«stam informāciju par savu objektu (virtuālo maŔīnu), saglabājot to mainÄ«gajā $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Tad mēs ņemam Ä«paÅ”umu no Ŕī objekta .HardwareProfile.VmSize un iestatiet vēlamo jauno vērtÄ«bu:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Un tagad mēs vienkārÅ”i izpildām VM atjaunināŔanas komandu - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Pārliecināmies, ka viss noritēja labi ā€“ lai to izdarÄ«tu, vēlreiz pieprasām informāciju par mÅ«su objektu un apskatām Ä«paÅ”umu $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Ja mēs tur redzam Standarta_B1ls - tas nozÄ«mē, ka viss ir kārtÄ«bā, maŔīnai ir mainÄ«ti izmēri. Varat iet tālāk un gÅ«t panākumus, vienlaikus mainot vairāku virtuālo maŔīnu izmērus, izmantojot masÄ«vu.

Kā ir ar virtuālās maŔīnas dzÄ“Å”anu pakalpojumā Azure?

Ar dzÄ“Å”anu ne viss ir tik vienkārÅ”i un saprotami, kā varētu Ŕķist. Galu galā ir nepiecieÅ”ams noņemt vairākus ar Å”o maŔīnu saistÄ«tos resursus, tostarp:

  • SāknÄ“Å”anas diagnostikas uzglabāŔanas konteineri
  • TÄ«kla saskarnes
  • Publiskas IP adreses
  • Sistēmas disks un lāse, kurā tiek saglabāts tā statuss
  • Datu diski

Tāpēc mēs izveidosim funkciju un to izsauksim Remove-AzrVirtualMachine - un tas izdzēsÄ«s ne tikai Azure VM, bet arÄ« visu iepriekÅ” minēto.

Mēs ejam standarta ceļu un vispirms iegÅ«stam savu objektu (VM), izmantojot komandu Get-AzVm. Piemēram, lai tā bÅ«tu automaŔīna WINSRV19 no resursu grupas MyTestVM.

Saglabāsim Ŕo objektu ar visām tā īpaŔībām mainīgajā $vm:

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

Konteinera ar sāknÄ“Å”anas diagnostikas failiem noņemÅ”ana

Veidojot virtuālo maŔīnu Azure, lietotājam tiek lÅ«gts arÄ« izveidot konteineru sāknÄ“Å”anas diagnostikas glabāŔanai (sāknÄ“Å”anas diagnostikas konteiners), lai, ja rodas problēmas ar sāknÄ“Å”anu, ir pie kā vērsties problēmu novērÅ”anai. Tomēr, kad VM tiek dzēsts, Å”is konteiners tiek atstāts, lai turpinātu savu tagad bezmērÄ·Ä«go pastāvÄ“Å”anu. Labosim Å”o situāciju.

  1. Vispirms noskaidrosim, kuram krātuves kontam pieder Å”is konteiners ā€” Å”im nolÅ«kam mums ir jāatrod Ä«paÅ”ums storageUri objekta zarnās DiagnosticsProfile mÅ«su VM. Å im nolÅ«kam es izmantoju Å”o regulāro izteiksmi:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Tagad jums ir jānoskaidro konteinera nosaukums, un Ŕim nolūkam ir jāiegūst VM ID, izmantojot komandu 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. Tālāk mēs iegūstam tās resursu grupas nosaukumu, kurai pieder konteiners:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Un tagad mums ir viss nepiecieÅ”amais, lai izdzēstu konteineru ar komandu Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM noņemÅ”ana

Tagad izdzēsÄ«sim paÅ”u virtuālo maŔīnu, jo mēs jau esam izveidojuÅ”i mainÄ«go $vm attiecÄ«gam objektam. Nu, izpildÄ«sim komandu Remove-AzVm:

$null = $vm | Remove-AzVM -Force

TÄ«kla interfeisa un publiskās IP adreses noņemÅ”ana

MÅ«su virtuālajā maŔīnā joprojām ir viena (vai pat vairākas) tÄ«kla saskarnes (NIC) ā€” lai tās noņemtu kā nevajadzÄ«gas, apskatÄ«sim Ä«paÅ”umu NetworkInterfaces mÅ«su VM objektu un izdzēsiet NIC ar komandu Remove-AzNetworkInterface. Ja ir vairāk nekā viens tÄ«kla interfeiss, mēs izmantojam cilpu. Tajā paŔā laikā katram NIC mēs pārbaudÄ«sim Ä«paÅ”umu IpConfiguration lai noteiktu, vai saskarnei ir publiska IP adrese. Ja tāds tiks atrasts, mēs to noņemsim ar komandu Remove-AzPublicIpAddress.

Å eit ir tikai Ŕāda koda piemērs, kur mēs cilpā izskatām visus NIC, izdzÄ“Å”am tos un pārbaudām, vai ir publiska IP. Ja ir, tad parsējiet Ä«paÅ”umu PublicIpAddress, atrodiet atbilstoŔā resursa nosaukumu pēc ID un izdzēsiet to:


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

Sistēmas diska noņemÅ”ana

OS disks ir lāse, kurai ir komanda to dzēst Remove-AzStorageBlob - bet pirms tā izpildes jums bÅ«s jāiestata nepiecieÅ”amās tā parametru vērtÄ«bas. Lai to izdarÄ«tu, jo Ä«paÅ”i ir jāiegÅ«st tā krātuves konteinera nosaukums, kurā ir sistēmas disks, un pēc tam tas jānodod Å”ai komandai kopā ar atbilstoÅ”o krātuves kontu.

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

Sistēmas diska statusa lāse noņemÅ”ana

Lai to izdarÄ«tu, kā jÅ«s droÅ”i vien jau uzminējāt, mēs ņemam uzglabāŔanas konteineru, kurā tiek glabāts Å”is disks, un, norādot, ka lāse beigās satur status, nododiet atbilstoÅ”os parametrus dzÄ“Å”anas komandai Remove-AzStorageBlob:

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

Un visbeidzot mēs noņemam datu diskus

MÅ«su virtuālajā maŔīnā joprojām varētu bÅ«t diski ar tai pievienotiem datiem. Ja tie nav vajadzÄ«gi, mēs arÄ« tos izdzēsÄ«sim. Vispirms parsēsim to StorageProfile mÅ«su VM un atrodiet Ä«paÅ”umu Uri. Ja ir vairāki diski, organizējam ciklu atbilstoÅ”i URI. Katram URI mēs atradÄ«sim atbilstoÅ”o krātuves kontu, izmantojot Get-AzStorageAccount. Pēc tam parsējiet krātuves URI, lai iegÅ«tu vajadzÄ«go lāse nosaukumu un nodotu to dzÄ“Å”anas komandai Remove-AzStorageBlob kopā ar krātuves kontu. LÅ«k, kā tas izskatÄ«tos kodā:

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

Un tagad "mēs esam sasnieguÅ”i laimÄ«gās beigas!" Tagad no visiem Å”iem fragmentiem ir jāsamontē vienots veselums. Laipnais autors Ādams Bertrams satika lietotājus pusceļā un izdarÄ«ja pats. Å eit ir saite uz galÄ«go skriptu Remove-AzrVirtualMachine.ps1:

ā†’ GitHub

Es ceru, ka Å”ie praktiskie padomi jums noderēs, lai ietaupÄ«tu pÅ«les, laiku un naudu, strādājot ar Azure virtuālajām maŔīnām.

Avots: www.habr.com

Pievieno komentāru