PowerShell์„ ์‚ฌ์šฉํ•˜์—ฌ Azure VM ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

์—”์ง€๋‹ˆ์–ด์™€ IT ๊ด€๋ฆฌ์ž๋Š” PowerShell์„ ์‚ฌ์šฉํ•˜์—ฌ ์˜จ-ํ”„๋ ˆ๋ฏธ์Šค๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํด๋ผ์šฐ๋“œ ์ธํ”„๋ผ, ํŠนํžˆ Azure์—์„œ ์ž‘์—…ํ•  ๋•Œ ๋‹ค์–‘ํ•œ ์ž‘์—…์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ž๋™ํ™”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ PowerShell์„ ํ†ตํ•ด ์ž‘์—…ํ•˜๋Š” ๊ฒƒ์ด Azure Portal์„ ํ†ตํ•ด ์ž‘์—…ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ํŽธ๋ฆฌํ•˜๊ณ  ๋น ๋ฆ…๋‹ˆ๋‹ค. ํฌ๋กœ์Šค ํ”Œ๋žซํผ ํŠน์„ฑ ๋•๋ถ„์— PowerShell์€ ๋ชจ๋“  ์šด์˜ ์ฒด์ œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Ubuntu, Red Hat ๋˜๋Š” Windows๋ฅผ ์‹คํ–‰ ์ค‘์ด๋ผ๋ฉด 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 ์ˆ˜์ • ๋ฐ ์‚ญ์ œ

์ด๋Š” ํŠน์ • ๊ฐ€์ƒ ๋จธ์‹ ์— ๋Œ€ํ•ด ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํฌ๊ธฐ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์ž๋™์ฐจ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•ด ๋ด…์‹œ๋‹ค

์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ๋กœ์šด ํฌ๊ธฐ๋กœ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Standard_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

๊ฑฐ๊ธฐ์„œ ๋ณด๋ฉด Standard_B1ls - ์ด๋Š” ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ด๊ณ  ์ž๋™์ฐจ์˜ ํฌ๊ธฐ๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์–ด๋ ˆ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ VM์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ๋” ๋‚˜์•„๊ฐ€ ์„ฑ๊ณต์„ ๊ฑฐ๋‘˜ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Azure์—์„œ VM์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ์–ด๋–ป์Šต๋‹ˆ๊นŒ?

์‚ญ์ œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•˜๊ณ  ๊ฐ„๋‹จํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ตญ ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์ด ์‹œ์Šคํ…œ๊ณผ ๊ด€๋ จ๋œ ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ถ€ํŒ… ์ง„๋‹จ ์Šคํ† ๋ฆฌ์ง€ ์ปจํ…Œ์ด๋„ˆ
  • ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค
  • ๊ณต์šฉ IP ์ฃผ์†Œ
  • ์ƒํƒœ๊ฐ€ ์ €์žฅ๋˜๋Š” ์‹œ์Šคํ…œ ๋””์Šคํฌ ๋ฐ Blob
  • ๋ฐ์ดํ„ฐ ๋””์Šคํฌ

๋”ฐ๋ผ์„œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ˜ธ์ถœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Remove-AzrVirtualMachine - Azure VM๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์œ„์˜ ๋ชจ๋“  ํ•ญ๋ชฉ๋„ ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.

ํ‘œ์ค€ ๋ฐฉ์‹์œผ๋กœ ๋จผ์ € ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด(VM)๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. Get-AzVm. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž๋™์ฐจ๋ผ๊ณ  ํ•ด๋ณด์ž. WINSRV19 ๋ฆฌ์†Œ์Šค ๊ทธ๋ฃน์—์„œ MyTestVM.

์ด ๊ฐœ์ฒด๋ฅผ ๋ชจ๋“  ์†์„ฑ๊ณผ ํ•จ๊ป˜ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. $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์—๋Š” ์—ฌ์ „ํžˆ ํ•˜๋‚˜(๋˜๋Š” ์—ฌ๋Ÿฌ ๊ฐœ)์˜ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค(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 ์ œ๊ฑฐ

์ด๋ฅผ ์œ„ํ•ด ์ด๋ฏธ ์ง์ž‘ํ•˜์…จ๊ฒ ์ง€๋งŒ ์ด ๋””์Šคํฌ๊ฐ€ ์ €์žฅ๋œ ์Šคํ† ๋ฆฌ์ง€ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๋งˆ์ง€๋ง‰ ๋ธ”๋กญ์— ๋‹ค์Œ์ด ํฌํ•จ๋˜์–ด ์žˆ์Œ์„ ์•”์‹œํ•ฉ๋‹ˆ๋‹ค. 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]
    }
}

๊ทธ๋ฆฌ๊ณ  ์ด์ œ โ€œํ•ดํ”ผ์—”๋”ฉ์— ์ด๋ฅด๋ €์Šต๋‹ˆ๋‹ค!โ€ ์ด์ œ ์šฐ๋ฆฌ๋Š” ์ด ๋ชจ๋“  ์กฐ๊ฐ๋“ค๋กœ๋ถ€ํ„ฐ ํ•˜๋‚˜์˜ ์ „์ฒด๋ฅผ ๋ชจ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์นœ์ ˆํ•œ ์ž‘๊ฐ€ Adam Bertram์ด ์ค‘๊ฐ„์— ์‚ฌ์šฉ์ž๋“ค์„ ๋งŒ๋‚˜ ์ง์ ‘ ํ•ด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ์ตœ์ข… ์Šคํฌ๋ฆฝํŠธ์— ๋Œ€ํ•œ ๋งํฌ์ž…๋‹ˆ๋‹ค. ์ œ๊ฑฐ-AzrVirtualMachine.ps1:

โ†’ GitHub์˜

Azure VM์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ๋…ธ๋ ฅ, ์‹œ๊ฐ„ ๋ฐ ๋น„์šฉ์„ ์ ˆ์•ฝํ•˜๋Š” ๋ฐ ์ด๋Ÿฌํ•œ ์‹ค์šฉ์ ์ธ ํŒ์ด ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€