Memodifikasi dan menghapus Azure VM menggunakan PowerShell

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 Azure PowerShell, misalnya, Anda dapat menyetel properti mesin virtual apa pun.

Dalam artikel ini, kita akan melihat bagaimana Anda dapat menggunakan PowerShell untuk mengubah ukuran VM di cloud Azure, serta menghapus VM dan objek terkaitnya.

Memodifikasi dan menghapus Azure VM menggunakan PowerShell

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:

Memodifikasi dan menghapus Azure VM menggunakan PowerShell

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.)

  1. 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
  2. Lalu kita ambil properti dari objek ini .HardwareProfile.VmSize dan atur nilai baru yang diinginkan:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Dan sekarang kita cukup menjalankan perintah pembaruan VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. 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.

  1. Pertama, mari kita cari tahu akun penyimpanan mana yang dimiliki wadah ini - untuk ini kita perlu menemukan propertinya storageUri di dalam perut benda tersebut DiagnosticsProfile VM kami. Untuk ini saya menggunakan ekspresi reguler ini:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. 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)
    
  3. Selanjutnya, kita mendapatkan nama grup sumber daya tempat kontainer tersebut berada:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. 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:

β†’ GitHub

Saya harap tips praktis ini bermanfaat bagi Anda dalam menghemat tenaga, waktu, dan uang saat bekerja dengan Azure VM.

Sumber: www.habr.com

Tambah komentar