Користејќи го PowerShell, инженерите и ИТ администраторите успешно автоматизираат различни задачи кога работат не само со внатрешен простор, туку и со облак инфраструктури, особено со Azure. Во некои случаи, работата преку PowerShell е многу поудобна и побрза од работата преку порталот Azure. Благодарение на својата крос-платформска природа, PowerShell може да се користи на кој било оперативен систем.
Без разлика дали користите Ubuntu, Red Hat или Windows, PowerShell може да ви помогне да ги контролирате ресурсите на облакот. Користење на модулот
Во оваа статија, ќе погледнеме како можете да го користите PowerShell за да ја промените големината на VM во облакот Azure, како и да избришете VM и неговите поврзани објекти.
Важно! Не заборавајте да ги избришете рацете со средство за дезинфекција за да се подготвите за работа:
- Ќе ви треба модул Модул Azure PowerShell - може да се преземе од галерија PowerShell со командата
Install-Module Az
. - Треба да се автентицирате во облакот Azure каде работи виртуелната машина со извршување на командата
Connect-AzAccount
.
Прво, ајде да создадеме скрипта што ќе ја промени големината на Azure VM. Ајде да отвориме VS Code и да зачуваме нова PowerShell скрипта наречена Промени големина-AzVirtualMachine.ps1 — ќе додаваме парчиња код на него како што напредува примерот.
Ги бараме достапните големини на VM
Пред да ја промените големината на VM, треба да дознаете кои се прифатливите големини за виртуелните машини во облакот Azure. За да го направите ова, треба да ја извршите командата Get-AzVMSize
.
Значи за виртуелната машина devvm01 од групата на ресурси dev Ги бараме сите можни прифатливи големини:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Во реални проблеми, се разбира, наместо ResourceGroupName=dev и VMName=devvm01 ќе ги наведете вашите сопствени вредности за овие параметри.)
Командата ќе врати нешто вака:
Ова се сите можни опции за големина што може да се постават за дадена виртуелна машина.
Ајде да ја промениме големината на автомобилот
На пример, ќе ја промениме големината на нова големина Standard_B1ls - тој е на првото место на листата погоре. (Во реалните апликации, се разбира, вие избирате која било големина што ви треба.)
- Прво користејќи ја командата
Get-AzVM
добиваме информации за нашиот објект (виртуелна машина) со складирање во променлива$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Потоа го земаме имотот од овој објект
.HardwareProfile.VmSize
и поставете ја саканата нова вредност:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- И сега едноставно ја извршуваме командата за ажурирање на VM -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Се грижиме дека сè е добро - за да го направиме ова, повторно бараме информации за нашиот објект и го разгледуваме имотот
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Ако видиме таму Standard_B1ls - тоа значи дека се е во ред, големината на автомобилот е сменета. Можете да одите понатаму и да го надградите вашиот успех со промена на големината на неколку VM одеднаш користејќи низа.
Што е со бришењето на VM во Azure?
Со бришење, не е сè толку едноставно и едноставно како што може да изгледа. На крајот на краиштата, неопходно е да се отстранат голем број ресурси поврзани со оваа машина, вклучувајќи:
- Контејнери за складирање за дијагностика на багажникот
- Интерфејси на мрежата
- Јавни IP адреси
- Системски диск и дупка каде што е зачуван неговиот статус
- Дискови со податоци
Затоа, ќе создадеме функција и ќе ја повикаме Remove-AzrVirtualMachine
- и ќе ги избрише не само Azure VM, туку и сите горенаведени.
Одиме на стандарден начин и прво го добиваме нашиот објект (VM) користејќи ја командата Get-AzVm
. На пример, нека биде автомобил WINSRV19 од групата на ресурси MyTestVMs.
Да го зачуваме овој објект заедно со сите негови својства во променлива $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Отстранување на контејнерот со дијагностички датотеки за подигање
Кога креирате VM во Azure, од корисникот исто така се бара да создаде контејнер за складирање на дијагностика за подигање (контејнер за дијагностика на подигање), така што ако има проблеми со подигнувањето, има на што да се обрати за смена на проблеми. Меѓутоа, кога VM ќе се избрише, овој контејнер останува да го продолжи своето сега бесцелно постоење. Ајде да ја поправиме оваа ситуација.
- Прво, ајде да дознаеме на која сметка за складирање припаѓа овој контејнер - за ова треба да го најдеме имотот
storageUri
во утробата на предметотDiagnosticsProfile
нашиот VM. За ова го користам овој редовен израз:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Сега треба да го дознаете името на контејнерот, а за ова треба да го добиете VM ID користејќи ја командата
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)
- Следно, го добиваме името на групата ресурси на која припаѓа контејнерот:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- И сега имаме сè што ни треба за да го избришеме контејнерот со командата
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Отстранување на VM
Сега да ја избришеме самата виртуелна машина, бидејќи веќе создадовме променлива $vm
за соодветниот објект. Па, ајде да ја извршиме командата Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Отстранување на мрежниот интерфејс и јавната IP адреса
Нашиот VM сè уште има еден (или дури неколку) мрежни интерфејси (NIC) - за да ги отстраниме како непотребни, ајде да поминеме низ имотот NetworkInterfaces
нашиот VM објект и избришете го NIC со командата Remove-AzNetworkInterface
. Во случај да има повеќе од еден мрежен интерфејс, користиме јамка. Во исто време, за секој NIC ќе го провериме имотот IpConfiguration
за да се утврди дали интерфејсот има јавна IP адреса. Ако се најде некој, ќе го отстраниме со командата Remove-AzPublicIpAddress
.
Еве пример за токму таков код, каде што ги разгледуваме сите NIC во циклус, ги бришеме и проверуваме дали има јавна IP адреса. Ако има, тогаш анализирајте го имотот PublicIpAddress
, пронајдете го името на соодветниот ресурс по ID и избришете го:
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
}
}
}
Отстранување на системскиот диск
ОС-дискот е дупка, за која има команда да се избрише Remove-AzStorageBlob
- но пред да го извршите, ќе треба да ги поставите потребните вредности за неговите параметри. За да го направите ова, особено, треба да го добиете името на контејнерот за складирање што го содржи системскиот диск, а потоа да го предадете на оваа команда заедно со соодветната сметка за складирање.
$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]
Отстранување на дупката за статус на системски диск
За да го направите ова, како што веројатно веќе погодивте, го земаме контејнерот за складирање во кој е зачуван овој диск и, што значи дека дупката на крајот содржи status
, пренесете ги соодветните параметри на командата за бришење Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
И, конечно, ги отстрануваме дисковите со податоци
Нашиот VM сè уште може да има дискови со податоци што биле прикачени на него. Доколку не се потребни, ќе ги избришеме и нив. Ајде прво да го анализираме StorageProfile
нашиот VM и пронајдете го имотот Uri
. Ако има неколку дискови, организираме циклус според URI
. За секој URI, ќе ја најдеме соодветната сметка за складирање со користење Get-AzStorageAccount
. Потоа анализирајте го URI-то за складирање за да го извлечете саканото име на дупка и префрлете го на командата за бришење Remove-AzStorageBlob
заедно со сметка за складирање. Вака би изгледало во кодот:
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]
}
}
И сега „дојдовме до среќниот крај!“ Сега треба да собереме една целина од сите овие фрагменти. Љубезниот автор Адам Бертрам ги сретнал корисниците на половина пат и тоа сам го направил. Еве линк до последното сценарио наречено Отстрани-AzrVirtualMachine.ps1:
→
Се надевам дека овие практични совети ќе ви бидат корисни за да ви заштеди напор, време и пари кога работите со Azure VMs.
Извор: www.habr.com