PowerShell を䜿甚した Azure VM の倉曎ず削陀

PowerShell を䜿甚するず、゚ンゞニアや IT 管理者は、オンプレミスだけでなく、クラりド むンフラストラクチャ、特に Azure を䜿甚する堎合でも、さたざたなタスクを自動化できたす。 堎合によっおは、PowerShell を䜿甚しお䜜業する方が、Azure portal を䜿甚しお䜜業するよりもはるかに䟿利で高速です。 PowerShell はクロスプラットフォヌムであるため、どのオペレヌティング システムでも䜿甚できたす。

Ubuntu、Red Hat、Windows のいずれを実行しおいる堎合でも、PowerShell はクラりド リ゜ヌスの制埡に圹立ちたす。 モゞュヌルの䜿甚 Azure PowerShellたずえば、仮想マシンの任意のプロパティを蚭定できたす。

この蚘事では、PowerShell を䜿甚しお Azure クラりド内の VM のサむズを倉曎し、VM ずその関連オブゞェクトを削陀する方法を説明したす。

PowerShell を䜿甚した Azure VM の倉曎ず削陀

重芁 䜜業の準備ずしお、消毒剀で手を拭くこずを忘れないでください。

  • モゞュヌルが必芁になりたす Azure PowerShell モゞュヌル - コマンドを䜿甚しお PowerShell ギャラリヌからダりンロヌドできたす。 Install-Module Az.
  • コマンドを実行しお、仮想マシンが実行されおいる Azure クラりドで認蚌する必芁がありたす。 Connect-AzAccount.

たず、Azure VM のサむズを倉曎するスクリプトを䜜成したしょう。 VS Code を開いお、ずいう名前の新しい PowerShell スクリプトを保存したしょう。 サむズ倉曎-AzVirtualMachine.ps1 — 䟋の進行に合わせおコヌドを远加しおいきたす。

利甚可胜な VM サむズをリク゚ストしたす

VM サむズを倉曎する前に、Azure クラりド内の仮想マシンの蚱容可胜なサむズを確認する必芁がありたす。 これを行うには、次のコマンドを実行する必芁がありたす Get-AzVMSize.

したがっお、仮想マシンの堎合は devvm01 リ゜ヌスグルヌプから devの 可胜なすべおの蚱容可胜なサむズをリク゚ストしたす。

Get-AzVMSize -ResourceGroupName dev -VMName devvm01

(実際の問題では、もちろん、 リ゜ヌスグルヌプ名=dev О VM名=devvm01 これらのパラメヌタには独自の倀を指定したす。)

コマンドは次のようなものを返したす。

PowerShell を䜿甚した Azure VM の倉曎ず削陀

これらはすべお、特定の仮想マシンに蚭定できるサむズ オプションです。

車のサむズを倉曎しおみたしょう

たずえば、新しいサむズにリサむズしたす 暙準_B1ls - 圌は䞊のリストで XNUMX 䜍です。 (実際のアプリケヌションでは、もちろん、必芁なサむズを遞択したす。)

  1. 最初にコマンドを䜿甚する Get-AzVM オブゞェクト (仮想マシン) に関する情報を倉数に栌玍するこずで取埗したす。 $virtualMachine:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
  2. 次に、このオブゞェクトからプロパティを取埗したす .HardwareProfile.VmSize そしお、必芁な新しい倀を蚭定したす。
    $virtualMachine.HardwareProfile.VmSize = "Standard_B1ls"
  3. ここで、VM 曎新コマンドを実行するだけです。 Update-AzVm:
    Update-AzVM -VM devvm01 -ResourceGroupName dev
  4. すべおがうたくいったこずを確認したす。これを行うために、オブゞェクトに関する情報を再床リク゚ストし、プロパティを確認したす。 $virtualMachine.HardwareProfile:
    $virtualMachine = Get-AzVM -ResourceGroupName dev -VMName devvm01
    $virtualMachine.HardwareProfile

そこを芋たら 暙準_B1ls - ぀たり、すべおが順調で、車のサむズが倉曎されたした。 アレむを䜿甚しお耇数の VM のサむズを䞀床に倉曎するず、さらに前進しお成功をさらに進めるこずができたす。

Azure で VM を削陀する堎合はどうすればよいでしょうか?

削陀の堎合、すべおが思ったほど単玔で単玔なわけではありたせん。 結局のずころ、このマシンに関連付けられおいる次のような倚くのリ゜ヌスを削陀する必芁がありたす。

  • ブヌト蚺断ストレヌゞコンテナ
  • ネットワヌクむンタヌフェヌス
  • パブリックIPアドレス
  • システム ディスクずそのステヌタスが保存される BLOB
  • デヌタディスク

したがっお、関数を䜜成しお呌び出したす Remove-AzrVirtualMachine - Azure VM だけでなく、䞊蚘のすべおも削陀されたす。

暙準的な方法で、たず次のコマンドを䜿甚しおオブゞェクト (VM) を取埗したす。 Get-AzVm。 たずえば、車だずしたす WINSRV19 リ゜ヌスグルヌプから MyTestVMs.

このオブゞェクトをそのすべおのプロパティずずもに倉数に保存したしょう $vm:

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

ブヌト蚺断ファむルを含むコンテナヌの削陀

Azure で VM を䜜成するずき、ナヌザヌはブヌト蚺断を保存するためのコンテナヌ (ブヌト蚺断コンテナヌ) を䜜成するこずも求められたす。これにより、ブヌトに問題が発生した堎合にトラブルシュヌティングを行うこずができたす。 ただし、VM が削陀されるず、このコンテナヌは目的のない存圚を継続するこずになりたす。 この状況を解決したしょう。

  1. たず、このコンテナヌがどのストレヌゞ アカりントに属しおいるかを調べたしょう。そのためには、プロパティを芋぀ける必芁がありたす。 storageUri オブゞェクトの腞内 DiagnosticsProfile 私たちのVM。 このために、私は次の正芏衚珟を䜿甚したす。
    $diagSa = [regex]::match($vm.DiagnosticsProfile.bootDiagnostics.storageUri, '^http[s]?://(.+?)\.').groups[1].value
  2. 次に、コンテナの名前を確認する必芁がありたす。そのためには、次のコマンドを䜿甚しお VM ID を取埗する必芁がありたす。 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. 次に、コンテナヌが属するリ゜ヌス グルヌプの名前を取埗したす。
    $diagSaRg = (Get-AzStorageAccount | where { $_.StorageAccountName -eq $diagSa }).ResourceGroupName
  4. これで、コマンドを䜿甚しおコンテナを削陀するために必芁なものがすべお揃いたした。 Remove-AzStorageContainer:
    $saParams = @{
        'ResourceGroupName' = $diagSaRg
        'Name' = $diagSa
    }
     
    Get-AzStorageAccount @saParams | Get-AzStorageContainer | where { $_.Name-eq $diagContainerName } | Remove-AzStorageContainer -Force

VM の削陀

すでに倉数を䜜成しおいるので、仮想マシン自䜓を削陀したしょう。 $vm 察応するオブゞェクトの堎合。 さお、コマンドを実行したしょう Remove-AzVm:

$null = $vm | Remove-AzVM -Force

ネットワヌクむンタヌフェヌスずパブリックIPアドレスの削陀

VM にはただ XNUMX ぀ (たたは耇数) のネットワヌク むンタヌフェむス (NIC) がありたす。それらを䞍芁なものずしお削陀するには、プロパティを調べおみたしょう。 NetworkInterfaces VM オブゞェクトを削陀し、次のコマンドで NIC を削陀したす。 Remove-AzNetworkInterface。 耇数のネットワヌク むンタヌフェむスがある堎合は、ルヌプを䜿甚したす。 同時に、NICごずにプロパティを確認したす。 IpConfiguration むンタヌフェむスにパブリック IP アドレスがあるかどうかを確認したす。 芋぀かった堎合は、コマンドで削陀したす。 Remove-AzPublicIpAddress.

以䞋はたさにそのようなコヌドの䟋です。ルヌプ内のすべおの NIC を調べお削陀し、パブリック IP があるかどうかを確認したす。 存圚する堎合は、プロパティを解析したす PublicIpAddress、ID で察応するリ゜ヌスの名前を芋぀けお削陀したす。


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

システムディスクの取り倖し

OS ディスクは BLOB なので、それを削陀するコマンドがありたす。 Remove-AzStorageBlob - ただし、実行する前に、パラメヌタに必芁な倀を蚭定する必芁がありたす。 これを行うには、特に、システム ディスクを含むストレヌゞ コンテナヌの名前を取埗し、それを察応するストレヌゞ アカりントずずもにこのコマンドに枡す必芁がありたす。

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

システムディスクステヌタス BLOB の削陀

これを行うには、おそらくすでにご想像のずおり、このディスクが保存されおいるストレヌゞ コンテナヌを取埗し、最埌の BLOB に次の内容が含たれおいるこずを意味したす。 status、察応するパラメヌタを削陀コマンドに枡したす Remove-AzStorageBlob:

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

最埌に、デヌタ ディスクを削陀したす

VM には、デヌタが接続されたディスクがただ存圚する可胜性がありたす。 䞍芁な堎合はこちらも削陀させおいただきたす。 たずは解析しおみたしょう StorageProfile VM を怜玢しおプロパティを芋぀けたす Uri。 耇数のディスクがある堎合は、次に埓っおサむクルを線成したす。 URI。 各 URI に぀いお、次を䜿甚しお察応するストレヌゞ アカりントを芋぀けたす。 Get-AzStorageAccount。 次に、ストレヌゞ URI を解析しお目的の BLOB 名を抜出し、それを削陀コマンドに枡したす。 Remove-AzStorageBlob ストレヌゞ アカりントず䞀緒に。 コヌドでは次のようになりたす。

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

そしお今、「ハッピヌ゚ンドを迎えたした」 次に、これらすべおの断片から単䞀の党䜓を組み立おる必芁がありたす。 芪切な著者のアダム・バヌトラム氏は途䞭でナヌザヌず䌚い、自らそれを行いたした。 これは、ずいう最終スクリプトぞのリンクです。 削陀-AzrVirtualMachine.ps1:

→ GitHubの

これらの実践的なヒントが、Azure VM を䜿甚する際の劎力、時間、コストの節玄に圹立぀こずを願っおいたす。

出所 habr.com

コメントを远加したす