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
Å 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.
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:
Å Ä«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.)
- 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
- Tad mÄs Åemam Ä«paÅ”umu no Ŕī objekta
.HardwareProfile.VmSize
un iestatiet vÄlamo jauno vÄrtÄ«bu:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Un tagad mÄs vienkÄrÅ”i izpildÄm VM atjauninÄÅ”anas komandu -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- 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.
- Vispirms noskaidrosim, kuram krÄtuves kontam pieder Å”is konteiners ā Å”im nolÅ«kam mums ir jÄatrod Ä«paÅ”ums
storageUri
objekta zarnÄsDiagnosticsProfile
mÅ«su VM. Å im nolÅ«kam es izmantoju Å”o regulÄro izteiksmi:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- 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)
- TÄlÄk mÄs iegÅ«stam tÄs resursu grupas nosaukumu, kurai pieder konteiners:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- 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:
ā
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