Dengan menggunakan PowerShell, teknisi dan administrator TI berhasil mengotomatiskan berbagai tugas saat bekerja tidak hanya dengan infrastruktur lokal, tetapi juga dengan infrastruktur cloud, khususnya dengan Azure. Dalam beberapa kasus, bekerja melalui PowerShell jauh lebih nyaman dan cepat dibandingkan bekerja melalui portal Microsoft Azure. Berkat sifatnya yang lintas platform, PowerShell dapat digunakan di sistem operasi apa pun.
Baik Anda menjalankan Ubuntu, Red Hat, atau Windows, PowerShell dapat membantu Anda mengontrol sumber daya cloud Anda. Menggunakan modul
Dalam artikel ini, kita akan melihat bagaimana Anda dapat menggunakan PowerShell untuk mengubah ukuran VM di cloud Azure, serta menghapus VM dan objek terkaitnya.
Penting! Jangan lupa untuk menyeka tangan Anda dengan pembersih untuk persiapan bekerja:
- Anda memerlukan sebuah modul Modul Azure PowerShell - dapat diunduh dari Galeri PowerShell dengan perintah
Install-Module Az
. - Anda perlu mengautentikasi di cloud Azure tempat komputer virtual berjalan dengan menjalankan perintah
Connect-AzAccount
.
Pertama, mari buat skrip yang akan mengubah ukuran Azure VM. Mari buka VS Code dan simpan skrip PowerShell baru bernama Ubah ukuran-AzVirtualMachine.ps1 β kami akan menambahkan potongan kode ke dalamnya seiring dengan kemajuan contoh.
Kami meminta ukuran VM yang tersedia
Sebelum Anda mengubah ukuran VM, Anda perlu mencari tahu ukuran yang dapat diterima untuk komputer virtual di cloud Azure. Untuk melakukan ini, Anda perlu menjalankan perintah Get-AzVMSize
.
Jadi untuk mesin virtual devvm01 dari grup sumber daya dev Kami meminta semua kemungkinan ukuran yang dapat diterima:
Get-AzVMSize -ResourceGroupName dev -VMName devvm01
(Dalam masalah nyata, tentu saja, bukan ResourceGroupName=dev ΠΈ VMName=devvm01 Anda akan menentukan nilai Anda sendiri untuk parameter ini.)
Perintahnya akan mengembalikan sesuatu seperti ini:
Ini semua adalah kemungkinan opsi ukuran yang dapat diatur untuk mesin virtual tertentu.
Mari kita ubah ukuran mobilnya
Misalnya kita akan mengubah ukuran ke ukuran baru Standar_B1ls - dia berada di posisi pertama dalam daftar di atas. (Dalam aplikasi kehidupan nyata, tentu saja, Anda memilih ukuran apa pun yang Anda perlukan.)
- Pertama menggunakan perintah
Get-AzVM
kita mendapatkan informasi tentang objek kita (mesin virtual) dengan menyimpannya dalam sebuah variabel$virtualMachine
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
- Lalu kita ambil properti dari objek ini
.HardwareProfile.VmSize
dan atur nilai baru yang diinginkan:$virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
- Dan sekarang kita cukup menjalankan perintah pembaruan VM -
Update-AzVm
:Update-AzVM -VM devvm01 -ResourceGroupName dev
- Kami memastikan semuanya berjalan dengan baik - untuk melakukan ini, kami kembali meminta informasi tentang objek kami dan melihat propertinya
$virtualMachine.HardwareProfile
:$virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01 $virtualMachine.HardwareProfile
Jika kita melihat di sana Standar_B1ls - artinya semuanya beres, ukuran mobil sudah diubah. Anda dapat melangkah lebih jauh dan membangun kesuksesan Anda dengan mengubah ukuran beberapa VM sekaligus menggunakan array.
Bagaimana dengan menghapus VM di Azure?
Dengan penghapusan, tidak semuanya sesederhana dan semudah kelihatannya. Bagaimanapun, sejumlah sumber daya yang terkait dengan mesin ini perlu dihapus, termasuk:
- Wadah penyimpanan diagnostik boot
- Antarmuka jaringan
- Alamat IP publik
- Disk sistem dan gumpalan tempat statusnya disimpan
- Disk data
Oleh karena itu, kita akan membuat suatu fungsi dan memanggilnya Remove-AzrVirtualMachine
- dan itu tidak hanya akan menghapus Azure VM, tetapi juga semua hal di atas.
Kami menggunakan cara standar dan pertama-tama mendapatkan objek kami (VM) menggunakan perintah Get-AzVm
. Misalnya saja mobil MENANGKANV19 dari grup sumber daya VM Tes Saya.
Mari kita simpan objek ini beserta semua propertinya ke dalam sebuah variabel $vm
:
$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs
Menghapus wadah dengan file diagnostik boot
Saat membuat VM di Azure, pengguna juga diminta untuk membuat wadah untuk menyimpan diagnostik boot (boot diagnostik container), sehingga jika ada masalah saat booting, ada sesuatu yang bisa dijadikan referensi untuk pemecahan masalah. Namun, ketika VM dihapus, kontainer ini dibiarkan melanjutkan keberadaannya yang sekarang tidak ada gunanya. Mari kita perbaiki situasi ini.
- Pertama, mari kita cari tahu akun penyimpanan mana yang dimiliki wadah ini - untuk ini kita perlu menemukan propertinya
storageUri
di dalam perut benda tersebutDiagnosticsProfile
VM kami. Untuk ini saya menggunakan ekspresi reguler ini:$diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
- Sekarang Anda perlu mengetahui nama wadahnya, dan untuk ini Anda perlu mendapatkan ID VM menggunakan perintah
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)
- Selanjutnya, kita mendapatkan nama grup sumber daya tempat kontainer tersebut berada:
$diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
- Dan sekarang kita memiliki semua yang kita butuhkan untuk menghapus container dengan perintah
Remove-AzStorageContainer
:$saParams = @{ 'ResourceGroupName' = $diagSaRg 'Name' = $diagSa } Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force
Menghapus VM
Sekarang mari kita hapus mesin virtual itu sendiri, karena kita telah membuat sebuah variabel $vm
untuk objek yang sesuai. Baiklah, mari kita jalankan perintahnya Remove-AzVm
:
$null = $vm | Remove-AzVM -Force
Menghapus antarmuka jaringan dan alamat IP publik
VM kita masih memiliki satu (atau bahkan beberapa) antarmuka jaringan (NIC) - untuk menghapusnya karena tidak diperlukan, mari kita lihat propertinya NetworkInterfaces
objek VM kami dan hapus NIC dengan perintah Remove-AzNetworkInterface
. Jika ada lebih dari satu antarmuka jaringan, kami menggunakan loop. Pada saat yang sama, untuk setiap NIC kami akan memeriksa propertinya IpConfiguration
untuk menentukan apakah antarmuka memiliki alamat IP publik. Jika ditemukan, kami akan menghapusnya dengan perintah Remove-AzPublicIpAddress
.
Berikut adalah contoh kode tersebut, di mana kita memeriksa semua NIC dalam satu lingkaran, menghapusnya, dan memeriksa apakah ada IP publik. Jika ada, parsing properti tersebut PublicIpAddress
, temukan nama sumber daya yang sesuai berdasarkan ID dan hapus:
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
}
}
}
Menghapus disk sistem
Disk OS adalah gumpalan, yang ada perintah untuk menghapusnya Remove-AzStorageBlob
- tetapi sebelum menjalankannya, Anda perlu menetapkan nilai yang diperlukan untuk parameternya. Untuk melakukan ini, khususnya, Anda perlu mendapatkan nama wadah penyimpanan yang berisi disk sistem, lalu meneruskannya ke perintah ini bersama dengan akun penyimpanan yang sesuai.
$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]
Menghapus Blob Status Disk Sistem
Untuk melakukan ini, seperti yang mungkin sudah Anda duga, kami mengambil wadah penyimpanan tempat disk ini disimpan, dan, menyiratkan bahwa gumpalan di bagian akhir berisi status
, teruskan parameter yang sesuai ke perintah hapus Remove-AzStorageBlob
:
$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob
Dan terakhir, kami menghapus disk data
VM kami masih dapat memiliki disk dengan data yang dilampirkan padanya. Jika tidak diperlukan, kami akan menghapusnya juga. Mari kita parsing dulu StorageProfile
VM kami dan temukan propertinya Uri
. Jika ada beberapa disk, kami mengatur siklus menurut URI
. Untuk setiap URI, kami akan menemukan akun penyimpanan yang sesuai yang digunakan Get-AzStorageAccount
. Kemudian parsing URI penyimpanan untuk mengekstrak nama blob yang diinginkan dan meneruskannya ke perintah delete Remove-AzStorageBlob
bersama dengan akun penyimpanan. Ini akan terlihat seperti dalam 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]
}
}
Dan sekarang βkita telah mencapai akhir yang bahagia!β Sekarang kita perlu mengumpulkan satu kesatuan dari semua bagian ini. Penulis yang baik hati, Adam Bertram, menemui pengguna di tengah jalan dan melakukannya sendiri. Berikut ini tautan ke skrip terakhir yang disebut Hapus-AzrVirtualMachine.ps1:
β
Saya harap tips praktis ini bermanfaat bagi Anda dalam menghemat tenaga, waktu, dan uang saat bekerja dengan Azure VM.
Sumber: www.habr.com