Nggunakake PowerShell, insinyur lan administrator IT kasil ngotomatisasi macem-macem tugas nalika nggarap ora mung ing papan, nanging uga karo infrastruktur awan, utamane karo Azure. Ing sawetara kasus, nggarap PowerShell luwih trep lan luwih cepet tinimbang nggarap portal Azure. Thanks kanggo sifat cross-platform, PowerShell bisa digunakake ing sistem operasi apa wae.
Apa sampeyan nganggo Ubuntu, Red Hat, utawa Windows, PowerShell bisa mbantu ngontrol sumber daya awan. Nggunakake modul
Ing artikel iki, kita bakal weruh carane sampeyan bisa nggunakake PowerShell kanggo ngowahi ukuran VM ing awan Azure, uga mbusak VM lan obyek sing gegandhengan.
Penting! Aja lali ngusap tangan nganggo sanitizer kanggo persiapan kerja:
- Sampeyan mbutuhake modul Modul Azure PowerShell - bisa diundhuh saka Galeri PowerShell kanthi prentah
Install-Module Az
. - Sampeyan kudu keasliane ing awan Azure ing ngendi mesin virtual mlaku kanthi printah kasebut
Connect-AzAccount
.
Pisanan, ayo nggawe skrip sing bakal ngowahi ukuran Azure VM. Ayo mbukak VS Code lan simpen skrip PowerShell anyar sing diarani Ngowahi ukuran-AzVirtualMachine.ps1 - kita bakal nambah potongan kode minangka conto maju.
We njaluk ukuran VM kasedhiya
Sadurunge ngganti ukuran VM, sampeyan kudu ngerteni apa ukuran sing bisa ditampa kanggo mesin virtual ing awan Azure. Kanggo nindakake iki sampeyan kudu mbukak printah Get-AzVMSize
.
Dadi kanggo mesin virtual devvm01 saka klompok sumber dev Kita njaluk kabeh ukuran sing bisa ditampa:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Ing masalah nyata, mesthi, tinimbang ResourceGroupName=dev и VMName=devvm01 sampeyan bakal nemtokake nilai sampeyan dhewe kanggo paramèter kasebut.)
Printah kasebut bakal ngasilake kaya iki:
Iki kabeh opsi ukuran sing bisa disetel kanggo mesin virtual tartamtu.
Ayo ngowahi ukuran mobil
Contone, kita bakal ngowahi ukuran menyang ukuran anyar Standar_B1ls - iku ing Panggonan pisanan ing dhaftar ndhuwur. (Ing aplikasi nyata, mesthine sampeyan milih ukuran apa wae sing sampeyan butuhake.)
- Pisanan nggunakake printah
Get-AzVM
kita entuk informasi babagan obyek kita (mesin virtual) kanthi nyimpen ing variabel$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Banjur kita njupuk properti saka obyek iki
.HardwareProfile.VmSize
lan nyetel nilai anyar sing dikarepake:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Lan saiki kita mung nglakokake printah nganyari VM -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Kita nggawe manawa kabeh mlaku kanthi apik - kanggo nindakake iki, kita njaluk informasi maneh babagan obyek lan ndeleng properti kasebut
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Yen kita ndeleng ana Standar_B1ls - tegese kabeh wis rapi, ukuran mobil wis diganti. Sampeyan bisa luwih maju lan mbangun sukses kanthi ngowahi ukuran sawetara VM bebarengan nggunakake array.
Apa babagan mbusak VM ing Azure?
Kanthi pambusakan, ora kabeh gampang lan gampang kaya sing katon. Sawise kabeh, perlu mbusak sawetara sumber daya sing ana gandhengane karo mesin iki, kalebu:
- Wadah panyimpenan diagnostik boot
- Antarmuka jaringan
- Alamat IP umum
- Sistem disk lan blob ing ngendi statuse disimpen
- Disk data
Mulane, kita bakal nggawe fungsi lan nyebataken Remove-AzrVirtualMachine
- lan bakal mbusak ora mung Azure VM, nanging uga kabeh ndhuwur.
Kita pindhah cara standar lan pisanan njaluk obyek kita (VM) nggunakake printah Get-AzVm
. Contone, supaya dadi mobil WINSRV19 saka klompok sumber MyTestVMs.
Ayo simpen obyek iki bebarengan karo kabeh sifate dadi variabel $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Mbusak wadhah kanthi file diagnostik boot
Nalika nggawe VM ing Azure, pangguna uga dijaluk nggawe wadhah kanggo nyimpen diagnostik boot (wadhah diagnostik boot), supaya yen ana masalah karo boot, ana sing kudu diuripake kanggo ngatasi masalah. Nanging, nalika VM dibusak, wadhah iki ditinggalake supaya ora ana tujuane. Ayo padha ndandani kahanan iki.
- Pisanan, ayo goleki akun panyimpenan sing ana ing wadhah iki - kanggo iki, kita kudu nemokake properti kasebut
storageUri
ing weteng obyekDiagnosticsProfile
VM kita. Kanggo iki, aku nggunakake ekspresi reguler iki:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Saiki sampeyan kudu ngerteni jeneng wadhah kasebut, lan kanggo iki sampeyan kudu njaluk ID VM nggunakake perintah kasebut
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)
- Sabanjure, kita entuk jeneng klompok sumber daya sing dadi wadhah kasebut:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Lan saiki kita duwe kabeh sing perlu kanggo mbusak wadhah kanthi printah
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Mbusak VM
Saiki ayo mbusak mesin virtual dhewe, amarga kita wis nggawe variabel $vm
kanggo obyek sing cocog. Inggih, ayo padha mbukak printah Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Mbusak antarmuka jaringan lan alamat IP umum
VM kita isih duwe siji (utawa malah sawetara) antarmuka jaringan (NICs) - kanggo mbusak minangka ora perlu, ayo pindhah liwat properti NetworkInterfaces
obyek VM kita lan mbusak NIC karo printah Remove-AzNetworkInterface
. Yen ana luwih saka siji antarmuka jaringan, kita nggunakake loop. Ing wektu sing padha, kanggo saben NIC kita bakal mriksa properti kasebut IpConfiguration
kanggo nemtokake manawa antarmuka duwe alamat IP umum. Yen ana sing ditemokake, kita bakal mbusak kanthi printah Remove-AzPublicIpAddress
.
Punika conto mung kode kuwi, ngendi kita ndeleng liwat kabeh NICs ing daur ulang, mbusak mau, lan mriksa yen ana IP umum. Yen ana, banjur parse properti PublicIpAddress
, temokake jeneng sumber daya sing cocog miturut ID lan busak:
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
}
}
}
Mbusak disk sistem
Disk OS minangka gumpalan, sing ana prentah kanggo mbusak Remove-AzStorageBlob
- nanging sadurunge nglakokake, sampeyan kudu nyetel nilai sing dibutuhake kanggo paramèter kasebut. Kanggo nindakake iki, khususe, sampeyan kudu njaluk jeneng wadhah panyimpenan sing ngemot disk sistem, banjur pass menyang printah iki bebarengan karo akun panyimpenan sing cocog.
$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]
Mbusak Blob Status Disk Sistem
Kanggo nindakake iki, sampeyan bisa uga wis guessed, kita njupuk wadhah panyimpenan kang disk iki disimpen, lan, implying sing blob ing mburi ngemot. status
, pass paramèter sing cocog kanggo printah mbusak Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Lan pungkasanipun, kita mbusak disk data
VM kita isih bisa duwe disk karo data sing digandhengake. Yen ora dibutuhake, kita uga bakal mbusak. Ayo diurai dhisik StorageProfile
VM kita lan golek properti Uri
. Yen ana sawetara disk, kita ngatur siklus miturut URI
. Kanggo saben URI, kita bakal nemokake akun panyimpenan sing cocog nggunakake Get-AzStorageAccount
. Banjur parse URI panyimpenan kanggo ngekstrak jeneng blob sing dikarepake lan pass menyang printah delete Remove-AzStorageBlob
bebarengan karo akun panyimpenan. Iki bakal katon kaya ing kode:
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]
}
}
Lan saiki "kita wis tekan happy ending!" Saiki kita kudu ngumpulake siji saka kabeh fragmen kasebut. Penulis apik Adam Bertram ketemu pangguna separo lan nindakake dhewe. Punika link menyang script final disebut Mbusak-AzrVirtualMachine.ps1:
β
Muga-muga sampeyan bisa nemokake tips praktis iki kanggo ngirit tenaga, wektu, lan dhuwit nalika nggarap Azure VMs.
Source: www.habr.com