Sửa đổi và xóa máy ảo Azure bằng PowerShell

Sử dụng PowerShell, các kỹ sư và quản trị viên CNTT đã tự động hóa thành công nhiều tác vụ khác nhau khi làm việc không chỉ với tại chỗ mà còn với cơ sở hạ tầng đám mây, đặc biệt là với Azure. Trong một số trường hợp, làm việc thông qua PowerShell thuận tiện và nhanh hơn nhiều so với làm việc thông qua cổng Azure. Nhờ tính chất đa nền tảng, PowerShell có thể được sử dụng trên mọi hệ điều hành.

Cho dù bạn đang chạy Ubuntu, Red Hat hay Windows, PowerShell đều có thể giúp bạn kiểm soát tài nguyên đám mây của mình. Sử dụng mô-đun Azure PowerShell, ví dụ: bạn có thể đặt bất kỳ thuộc tính nào của máy ảo.

Trong bài viết này, chúng ta sẽ xem xét cách bạn có thể sử dụng PowerShell để thay đổi kích thước máy ảo trong đám mây Azure cũng như xóa máy ảo và các đối tượng liên quan của nó.

Sửa đổi và xóa máy ảo Azure bằng PowerShell

Quan trọng! Đừng quên lau tay bằng dung dịch sát khuẩn để chuẩn bị đi làm:

  • Bạn sẽ cần một mô-đun Mô-đun Azure PowerShell - nó có thể được tải xuống từ Thư viện PowerShell bằng lệnh Install-Module Az.
  • Bạn cần xác thực trên đám mây Azure nơi máy ảo đang chạy bằng cách chạy lệnh Connect-AzAccount.

Trước tiên, hãy tạo một tập lệnh sẽ thay đổi kích thước máy ảo Azure. Hãy mở VS Code và lưu tập lệnh PowerShell mới có tên Thay đổi kích thước-AzVirtualMachine.ps1 - chúng tôi sẽ thêm các đoạn mã vào đó khi ví dụ tiến triển.

Chúng tôi yêu cầu kích thước VM có sẵn

Trước khi thay đổi kích thước VM, bạn cần tìm hiểu kích thước có thể chấp nhận được đối với máy ảo trong đám mây Azure. Để làm điều này bạn cần chạy lệnh Get-AzVMSize.

Vì vậy đối với máy ảo devvm01 từ nhóm tài nguyên dev Chúng tôi yêu cầu tất cả các kích thước có thể chấp nhận được:

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(Tất nhiên, trong các bài toán thực tế, thay vì ResourceGroupName=dev и VMName=devvm01 bạn sẽ chỉ định các giá trị của riêng mình cho các tham số này.)

Lệnh sẽ trả về một cái gì đó như thế này:

Sửa đổi và xóa máy ảo Azure bằng PowerShell

Đây là tất cả các tùy chọn kích thước có thể được đặt cho một máy ảo nhất định.

Hãy thay đổi kích thước chiếc xe

Ví dụ: chúng tôi sẽ thay đổi kích thước thành kích thước mới Tiêu chuẩn_B1ls - anh ấy đứng ở vị trí đầu tiên trong danh sách trên. (Tất nhiên, trong các ứng dụng thực tế, bạn chọn bất kỳ kích thước nào bạn cần.)

  1. Đầu tiên sử dụng lệnh Get-AzVM chúng tôi lấy thông tin về đối tượng của mình (máy ảo) bằng cách lưu trữ nó trong một biến $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. Sau đó chúng tôi lấy tài sản từ đối tượng này .HardwareProfile.VmSize và đặt giá trị mới mong muốn:
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. Và bây giờ chúng ta chỉ cần thực hiện lệnh cập nhật VM - Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. Chúng tôi đảm bảo rằng mọi thứ diễn ra tốt đẹp - để làm được điều này, chúng tôi lại yêu cầu thông tin về đối tượng của mình và xem xét thuộc tính $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

Nếu chúng ta thấy ở đó Tiêu chuẩn_B1ls - nghĩa là mọi thứ đều ổn, kích thước của xe đã được thay đổi. Bạn có thể tiến xa hơn và phát huy thành công của mình bằng cách thay đổi kích thước một số máy ảo cùng lúc bằng cách sử dụng mảng.

Còn việc xóa VM trong Azure thì sao?

Với việc xóa, không phải mọi thứ đều đơn giản và dễ hiểu như người ta tưởng. Cuối cùng, cần phải loại bỏ một số tài nguyên liên quan đến máy này, bao gồm:

  • Bộ chứa lưu trữ chẩn đoán khởi động
  • Giao diện mạng
  • Địa chỉ IP công cộng
  • Đĩa hệ thống và blob nơi lưu trữ trạng thái của nó
  • Đĩa dữ liệu

Vì vậy, chúng ta sẽ tạo một hàm và gọi nó Remove-AzrVirtualMachine - và nó sẽ xóa không chỉ Azure VM mà còn tất cả những thứ trên.

Chúng tôi đi theo cách tiêu chuẩn và trước tiên lấy đối tượng (VM) của mình bằng lệnh Get-AzVm. Ví dụ, hãy để nó là một chiếc ô tô WINSRV19 từ nhóm tài nguyên MyTestVM.

Hãy lưu đối tượng này cùng với tất cả các thuộc tính của nó vào một biến $vm:

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

Xóa vùng chứa có tệp chẩn đoán khởi động

Khi tạo VM trong Azure, người dùng cũng được yêu cầu tạo vùng chứa để lưu trữ chẩn đoán khởi động (vùng chứa chẩn đoán khởi động), để nếu có vấn đề khi khởi động, sẽ có thứ gì đó cần được giải quyết để khắc phục sự cố. Tuy nhiên, khi VM bị xóa, vùng chứa này vẫn tiếp tục tồn tại không mục đích. Hãy khắc phục tình trạng này.

  1. Trước tiên, hãy tìm hiểu xem vùng chứa này thuộc về tài khoản lưu trữ nào - để làm được điều này, chúng ta cần tìm thuộc tính storageUri trong ruột của vật thể DiagnosticsProfile VM của chúng tôi. Đối với điều này tôi sử dụng biểu thức chính quy này:
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. Bây giờ bạn cần tìm ra tên của vùng chứa và để làm được điều này, bạn cần lấy ID VM bằng lệnh 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. Tiếp theo, chúng ta lấy tên của nhóm tài nguyên mà vùng chứa đó thuộc về:
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. Và bây giờ chúng ta có mọi thứ cần thiết để xóa container bằng lệnh Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

Loại bỏ máy ảo

Bây giờ hãy xóa chính máy ảo vì chúng ta đã tạo một biến $vm cho đối tượng tương ứng. Nào, hãy chạy lệnh Remove-AzVm:

$null = $vm | Remove-AzVM -Force

Xóa giao diện mạng và địa chỉ IP công cộng

VM của chúng tôi vẫn có một (hoặc thậm chí một số) giao diện mạng (NIC) - để loại bỏ chúng khi không cần thiết, hãy xem qua thuộc tính NetworkInterfaces đối tượng VM của chúng ta và xóa NIC bằng lệnh Remove-AzNetworkInterface. Trong trường hợp có nhiều hơn một giao diện mạng, chúng tôi sử dụng vòng lặp. Đồng thời, đối với mỗi NIC chúng tôi sẽ kiểm tra thuộc tính IpConfiguration để xác định xem giao diện có địa chỉ IP công cộng hay không. Nếu tìm thấy, chúng tôi sẽ loại bỏ nó bằng lệnh Remove-AzPublicIpAddress.

Đây là một ví dụ về mã như vậy, trong đó chúng tôi xem qua tất cả các NIC trong một vòng lặp, xóa chúng và kiểm tra xem có IP công cộng hay không. Nếu có thì phân tích thuộc tính PublicIpAddress, tìm tên của tài nguyên tương ứng theo ID và xóa nó:


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

Tháo đĩa hệ thống

Đĩa hệ điều hành là một đốm màu, có lệnh xóa nó Remove-AzStorageBlob - nhưng trước khi thực hiện nó, bạn sẽ cần đặt các giá trị bắt buộc cho các tham số của nó. Cụ thể, để thực hiện việc này, bạn cần lấy tên của vùng lưu trữ chứa đĩa hệ thống, sau đó chuyển nó tới lệnh này cùng với tài khoản lưu trữ tương ứng.

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

Xóa Blob trạng thái đĩa hệ thống

Để làm điều này, như bạn có thể đã đoán, chúng tôi lấy bộ chứa lưu trữ trong đó đĩa này được lưu trữ và ngụ ý rằng đốm màu ở cuối chứa status, truyền các tham số tương ứng vào lệnh xóa Remove-AzStorageBlob:

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

Và cuối cùng, chúng tôi loại bỏ các đĩa dữ liệu

Máy ảo của chúng tôi vẫn có thể có các đĩa chứa dữ liệu được đính kèm vào nó. Nếu chúng không cần thiết, chúng tôi cũng sẽ xóa chúng. Hãy phân tích nó trước StorageProfile VM của chúng tôi và tìm thuộc tính Uri. Nếu có nhiều đĩa thì chúng ta sắp xếp một chu trình theo URI. Với mỗi URI, chúng ta sẽ tìm tài khoản lưu trữ tương ứng bằng cách sử dụng Get-AzStorageAccount. Sau đó phân tích URI lưu trữ để trích xuất tên blob mong muốn và chuyển nó tới lệnh xóa Remove-AzStorageBlob cùng với một tài khoản lưu trữ. Đây là những gì nó sẽ trông giống như trong mã:

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

Và bây giờ “chúng ta đã đạt đến một kết thúc có hậu!” Bây giờ chúng ta cần tập hợp một tổng thể duy nhất từ ​​​​tất cả những mảnh vỡ này. Tác giả tốt bụng Adam Bertram đã gặp người dùng một nửa và tự mình làm điều đó. Đây là một liên kết đến tập lệnh cuối cùng được gọi là Loại bỏ-AzrVirtualMachine.ps1:

GitHub

Tôi hy vọng bạn thấy những lời khuyên thiết thực này hữu ích trong việc giúp bạn tiết kiệm công sức, thời gian và tiền bạc khi làm việc với máy ảo Azure.

Nguồn: www.habr.com

Thêm một lời nhận xét