PowerShellди колдонуу менен инженерлер жана IT администраторлору жер-жерлерде гана эмес, булут инфраструктуралары менен, атап айтканда Azure менен иштөөдө ар кандай тапшырмаларды ийгиликтүү автоматташтырышат. Кээ бир учурларда, PowerShell аркылуу иштөө Azure порталы аркылуу иштөөгө караганда алда канча ыңгайлуу жана ылдамыраак. Анын кайчылаш-платформа табиятынан улам PowerShell ар кандай операциялык системада колдонулушу мүмкүн.
Ubuntu, Red Hat же Windows иштетип жатасызбы, PowerShell булут ресурстарыңызды башкарууга жардам берет. Модулду колдонуу
Бул макалада биз Azure булутундагы VMнин өлчөмүн өзгөртүү үчүн PowerShellди кантип колдонсоңуз болорун, ошондой эле VMди жана ага байланышкан объекттерди жок кылабыз.
Маанилүү! Жумушка даярдануу үчүн колуңузду дезинфекциялоочу каражат менен сүртүүнү унутпаңыз:
- Сизге модул керек болот Azure PowerShell модулу - бул буйрук менен PowerShell Галереясынан жүктөп алса болот
Install-Module Az
. - Сиз виртуалдык машина иштеп жаткан Azure булутунда буйрукту иштетүү аркылуу аутентификациядан өтүшүңүз керек
Connect-AzAccount
.
Биринчиден, келгиле, Azure VMнин өлчөмүн өзгөрткөн скрипт түзөлү. Келгиле, VS кодун ачып, жаңы PowerShell скриптин сактайлы Resize-AzVirtualMachine.ps1 — биз мисалдын өнүгүшүнө жараша ага код бөлүктөрүн кошобуз.
Биз жеткиликтүү VM өлчөмдөрүн сурайбыз
VM өлчөмүн өзгөртүүдөн мурун, Azure булутундагы виртуалдык машиналар үчүн алгылыктуу өлчөмдөр кандай экенин билип алышыңыз керек. Бул үчүн сиз буйрукту иштетүү керек Get-AzVMSize
.
Ошентип, виртуалдык машина үчүн devm01 ресурстар тобунан ишт.ч. Биз бардык мүмкүн болгон өлчөмдөрдү сурайбыз:
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нин өлчөмүн өзгөртүү менен мындан ары да алга басып, ийгилигиңизди бекемдей аласыз.
Azureдагы VMди жок кылуу жөнүндө эмне айтууга болот?
Жок кылуу менен, баары көрүнгөндөй жөнөкөй жана жөнөкөй эмес. Анткени, бул машина менен байланышкан бир катар ресурстарды алып салуу керек, анын ичинде:
- Жүктөө диагностикасын сактоочу контейнерлер
- тармак кошки
- Коомдук IP даректер
- Системалык диск жана анын абалы сакталган блоб
- Маалымат дисктери
Ошондуктан, биз функция түзүп, аны чакырабыз Remove-AzrVirtualMachine
- жана ал Azure VMти гана эмес, жогорудагылардын баарын жок кылат.
Биз стандарттуу жол менен барабыз жана биринчи команданы колдонуп объектибизди (VM) алабыз Get-AzVm
. Мисалы, ал машина болсун WINSRV19 ресурстар тобунан MyTestVMs.
Келгиле, бул объектти анын бардык касиеттери менен бирге өзгөрмөгө сактайлы $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Жүктөө диагностикалык файлдары менен контейнерди алып салуу
Azure'де VM түзүүдө, колдонуучудан жүктөө диагностикасын сактоо үчүн контейнерди (жүктөө диагностикасынын контейнери) түзүү суралат, андыктан жүктөөдө көйгөйлөр пайда болсо, көйгөйлөрдү чечүү үчүн кайрыла турган нерсе бар. Бирок, 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
. Эгерде бир нече тармак интерфейси бар болсо, биз циклди колдонобуз. Ошол эле учурда, ар бир НИК үчүн биз мүлктү текшеребиз 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
}
}
}
Системалык дискти алып салуу
OS диски - бул блоб, ал үчүн аны жок кылуу буйругу бар 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]
}
}
Эми "биз бактылуу акырына жеттик!" Эми бул фрагменттердин бардыгынан бир бүтүндү чогултушубуз керек. Боорукер автор Адам Бертрам колдонуучулар менен жарым жолдо жолугуп, аны өзү жасады. Бул жерде деп аталган акыркы сценарийге шилтеме Remove-AzrVirtualMachine.ps1:
→
Бул практикалык кеңештер Azure VM менен иштөөдө күчүңүздү, убакытыңызды жана акчаңызды үнөмдөөгө жардам берет деп үмүттөнөм.
Source: www.habr.com