Mengubah suai dan memadam VM Azure menggunakan PowerShell

Menggunakan PowerShell, jurutera dan pentadbir IT berjaya mengautomasikan pelbagai tugas apabila bekerja bukan sahaja dengan di premis, tetapi juga dengan infrastruktur awan, khususnya dengan Azure. Dalam sesetengah kes, bekerja melalui PowerShell adalah lebih mudah dan lebih pantas daripada bekerja melalui portal Azure. Terima kasih kepada sifat merentas platformnya, PowerShell boleh digunakan pada mana-mana sistem pengendalian.

Sama ada anda menjalankan Ubuntu, Red Hat atau Windows, PowerShell boleh membantu anda mengawal sumber awan anda. Menggunakan modul Azure PowerShell, sebagai contoh, anda boleh menetapkan sebarang sifat mesin maya.

Dalam artikel ini, kami akan melihat cara anda boleh menggunakan PowerShell untuk mengubah saiz VM dalam awan Azure, serta memadamkan VM dan objek yang berkaitan dengannya.

Mengubah suai dan memadam VM Azure menggunakan PowerShell

Penting! Jangan lupa lap tangan anda dengan sanitizer untuk bersiap sedia untuk bekerja:

  • Anda memerlukan modul Modul Azure PowerShell - ia boleh dimuat turun dari Galeri PowerShell dengan arahan Install-Module Az.
  • Anda perlu mengesahkan dalam awan Azure di mana mesin maya berjalan dengan menjalankan arahan Connect-AzAccount.

Mula-mula, mari buat skrip yang akan mengubah saiz VM Azure. Mari buka Kod VS dan simpan skrip PowerShell baharu yang dipanggil Ubah Saiz-AzVirtualMachine.ps1 β€” kami akan menambah kepingan kod padanya semasa contoh berjalan.

Kami meminta saiz VM yang tersedia

Sebelum anda menukar saiz VM, anda perlu mengetahui saiz yang boleh diterima untuk mesin maya dalam awan Azure. Untuk melakukan ini, anda perlu menjalankan arahan Get-AzVMSize.

Jadi untuk mesin maya devvm01 daripada kumpulan sumber dev Kami meminta semua saiz yang boleh diterima:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Dalam masalah sebenar, sudah tentu, bukannya ResourceGroupName=dev ΠΈ VMName=devvm01 anda akan menentukan nilai anda sendiri untuk parameter ini.)

Perintah akan mengembalikan sesuatu seperti ini:

Mengubah suai dan memadam VM Azure menggunakan PowerShell

Ini semua adalah pilihan saiz yang mungkin yang boleh ditetapkan untuk mesin maya tertentu.

Jom ubah saiz kereta

Sebagai contoh, kami akan mengubah saiz kepada saiz baharu Standard_B1ls - dia berada di tempat pertama dalam senarai di atas. (Dalam aplikasi kehidupan sebenar, sudah tentu, anda memilih apa sahaja saiz yang anda perlukan.)

  1. Pertama menggunakan arahan Get-AzVM kita mendapat maklumat tentang objek kita (mesin maya) dengan menyimpannya dalam pembolehubah $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Kemudian kami mengambil harta dari objek ini .HardwareProfile.VmSize dan tetapkan nilai baharu yang dikehendaki:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Dan kini kami hanya melaksanakan perintah kemas kini VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Kami memastikan semuanya berjalan lancar - untuk melakukan ini, kami sekali lagi meminta maklumat tentang objek kami dan melihat harta itu $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Jika kita lihat di sana Standard_B1ls - maknanya semua dah teratur, saiz kereta dah tukar. Anda boleh pergi lebih jauh dan membina kejayaan anda dengan mengubah saiz beberapa VM sekaligus menggunakan tatasusunan.

Bagaimana pula dengan memadam VM dalam Azure?

Dengan pemadaman, tidak semuanya semudah dan semudah yang disangka. Lagipun, adalah perlu untuk mengalih keluar beberapa sumber yang berkaitan dengan mesin ini, termasuk:

  • Bekas storan diagnostik but
  • Antara muka rangkaian
  • Alamat IP awam
  • Cakera dan gumpalan sistem tempat statusnya disimpan
  • Cakera data

Oleh itu, kami akan mencipta fungsi dan memanggilnya Remove-AzrVirtualMachine - dan ia akan memadam bukan sahaja Azure VM, tetapi juga semua perkara di atas.

Kami menggunakan cara standard dan mula-mula mendapatkan objek kami (VM) menggunakan arahan Get-AzVm. Sebagai contoh, biarkan ia menjadi kereta WINSRV19 daripada kumpulan sumber MyTestVMs.

Mari kita simpan objek ini bersama-sama dengan semua sifatnya ke dalam pembolehubah $vm:

$vm = Get-AzVm -Name WINSRV19 -ResourceGroupName MyTestVMs

Mengalih keluar bekas dengan fail diagnostik but

Apabila mencipta VM dalam Azure, pengguna juga diminta untuk mencipta bekas untuk menyimpan diagnostik but (bekas diagnostik but), supaya jika terdapat masalah dengan but, ada sesuatu yang perlu dicari untuk menyelesaikan masalah. Walau bagaimanapun, apabila VM dipadamkan, bekas ini dibiarkan untuk meneruskan kewujudannya yang kini tanpa tujuan. Mari kita betulkan keadaan ini.

  1. Mula-mula, mari kita ketahui akaun storan yang dimiliki bekas ini - untuk ini kita perlu mencari harta itu storageUri dalam perut objek DiagnosticsProfile VM kami. Untuk ini saya menggunakan ungkapan biasa ini:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Sekarang anda perlu mengetahui nama bekas, dan untuk ini anda perlu mendapatkan ID VM menggunakan arahan 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. Seterusnya, kami mendapat nama kumpulan sumber yang mana bekas itu dimiliki:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Dan kini kita mempunyai semua yang kita perlukan untuk memadam bekas dengan arahan Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Mengalih keluar VM

Sekarang mari kita padamkan mesin maya itu sendiri, kerana kita telah mencipta pembolehubah $vm untuk objek yang sepadan. Baiklah, mari jalankan arahan Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Mengalih keluar antara muka rangkaian dan alamat IP awam

VM kami masih mempunyai satu (atau bahkan beberapa) antara muka rangkaian (NIC) - untuk mengalih keluarnya sebagai tidak perlu, mari lihat sifat NetworkInterfaces objek VM kami dan padamkan NIC dengan arahan Remove-AzNetworkInterface. Sekiranya terdapat lebih daripada satu antara muka rangkaian, kami menggunakan gelung. Pada masa yang sama, untuk setiap NIC kami akan menyemak hartanah tersebut IpConfiguration untuk menentukan sama ada antara muka mempunyai alamat IP awam. Jika satu dijumpai, kami akan mengeluarkannya dengan arahan Remove-AzPublicIpAddress.

Berikut ialah contoh kod sedemikian, di mana kita melihat semua NIC dalam satu gelung, memadamkannya dan menyemak sama ada terdapat IP awam. Jika ada, kemudian huraikan harta itu PublicIpAddress, cari nama sumber yang sepadan mengikut ID dan padamkannya:


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
        }
    }
}

Mengeluarkan cakera sistem

Cakera OS adalah gumpalan, yang mana terdapat arahan untuk memadamkannya Remove-AzStorageBlob - tetapi sebelum melaksanakannya, anda perlu menetapkan nilai yang diperlukan untuk parameternya. Untuk melakukan ini, khususnya, anda perlu mendapatkan nama bekas storan yang mengandungi cakera sistem, dan kemudian hantar ke arahan ini bersama-sama dengan akaun storan yang sepadan.

$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]

Mengeluarkan Blob Status Cakera Sistem

Untuk melakukan ini, seperti yang anda mungkin sudah meneka, kami mengambil bekas storan di mana cakera ini disimpan, dan, membayangkan bahawa gumpalan di hujung mengandungi status, hantar parameter yang sepadan dengan arahan padam Remove-AzStorageBlob:

$osDiskStorageAcct | Get-AzStorageBlob -Container $osDiskContainerName -Blob "$($vm.Name)*.status" | Remove-AzStorageBlob

Dan akhirnya, kami mengeluarkan cakera data

VM kami masih boleh mempunyai cakera dengan data yang dilampirkan padanya. Jika ia tidak diperlukan, kami akan memadamkannya juga. Mari kita kupas dahulu StorageProfile VM kami dan cari harta itu Uri. Jika terdapat beberapa cakera, kami mengatur kitaran mengikut URI. Untuk setiap URI, kami akan mencari akaun storan yang sepadan menggunakan Get-AzStorageAccount. Kemudian parse URI storan untuk mengekstrak nama gumpalan yang diingini dan hantar ke arahan padam Remove-AzStorageBlob bersama dengan akaun simpanan. Inilah yang akan kelihatan seperti dalam kod:

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 kini "kami telah mencapai pengakhiran yang menggembirakan!" Sekarang kita perlu mengumpulkan satu keseluruhan daripada semua serpihan ini. Pengarang baik Adam Bertram bertemu pengguna separuh jalan dan melakukannya sendiri. Berikut adalah pautan kepada skrip terakhir yang dipanggil Remove-AzrVirtualMachine.ps1:

β†’ GitHub

Saya harap anda mendapati petua praktikal ini membantu dalam menjimatkan tenaga, masa dan wang anda semasa bekerja dengan Azure VMs.

Sumber: www.habr.com

Tambah komen