Microsoft/Azure

Azure VM Extension (가상머신 확장)

megapain 2021. 1. 30. 20:17

참고 자료

 

Azure에서 VM을 사용하던 중, VM에 어떤 응용 프로그램을 설치해야 하거나 설정 변경이 필요하다면, 보통 VM에 RDP나 SSH로 연결해서 작업합니다.

운영하는 VM 수가 몇 대 수준이라면 별 문제가 되지 않습니다. 한 대씩 한 대씩 RDP나 SSH로 연결해서 하나 하나 작업하면 됩니다.

VM 수가 열 대 이상이라면 작업을 스크립트로 만들고 실행하는 것을 고민할 겁니다. VM에 RDP나 SSH로 연결한 후 스크립트를 실행해서 필요한 작업들이 진행되도록 할 겁니다.

그런데 VM 수가 수십, 수백 대라면 어떻게 해야 할까요? 심지어 일부 VM은 관리자 계정이 무엇인지 알지 못해서 RDP나 SSH로 연결할 수 없다면요?

이런 경우 Azure VM Extension을 사용하면 됩니다. 

  1. VM에서 작업할 내용을 Script로 만들고,
  2. 이 Script 파일을 Azure Blob Storage에 올립니다.
  3. Azure PowerShell이나 Azure CLI의 VM Extension 명령을 사용하여 이 Script 파일을 실행합니다.

아래는 Azure PowerShell에서 Azure VM Extension을 사용하는 예제입니다. 지정한 VM에서 스크립트가 실행됩니다.

Set-AzVMCustomScriptExtension -ResourceGroupName <resourceGroupName> `
    -VMName <vmName> `
    -Location myLocation `
    -FileUri <fileUrl> `
    -Run 'myScript.ps1' `
    -Name DemoScriptExtension

 

VM이 수십 수백 대라면, 반복문과 병렬 실행문 사이에 VM Extension 명령을 실행하면 됩니다.

아래는 특정 Resource Group의 모든 VM에 대해 VM Extension을 실행하는 PowerShell 예제입니다.

$vmResourceGroup = "myResourceGroup"
$vms = Get-AzVM -ResourceGroupName $vmResourceGroup
 
Foreach ($vm in $vms) {
    Start-Job -Name $vm.Name -ScriptBlock { 
        param ($vmResourceGroup, $vmName, $location)

        Set-AzVMCustomScriptExtension -ResourceGroupName $vmResourceGroup `
            -VMName $vmName `
            -Location $location `
            -FileUri <fileUrl> `
            -Run 'myScript.ps1' `
            -Name DemoScriptExtension 

    }  -ArgumentList $vmResourceGroup, $vm.Name, $vm.Location
}

 

당연하겠지만, 테스트 환경에서 검증 후 운영 환경에 사용해야 합니다.