Azure VM에서 사용자 지정 스크립트 확장을 사용하여 스크립트 실행

팀이 Windows Azure 가상 머신(VM)을 더 많이 프로비저닝하고 구성하기 시작하면 언젠가는 바퀴를 다시 발명하는 것에 지치게 될 것입니다. 자동화가 필요합니다! 이 기사에서는 Azure 사용자 지정 스크립트 확장을 사용하여 Azure를 사용하여 VM에서 스크립트를 실행하는 방법을 단계별로 안내합니다.

팀이 Windows 환경에 있다면 서버 구성 자동화에 가장 좋은 도구 중 하나는 PowerShell입니다. Azure PowerShell 모듈을 사용하여 조직은 온프레미스 작업을 자동화하는 데뿐만 아니라 한 번에 하나씩이 아닌 대량으로 Azure VM에서 명령을 실행하는 데 PowerShell의 힘을 활용할 수 있습니다.

Microsoft가 제공한 기능 중 하나는 Azure 사용자 지정 스크립트 확장입니다. 사용자 지정 스크립트 확장은 VM 에이전트가 Azure API를 사용하여 VM에 대해 임의의 PowerShell 코드를 실행하는 Azure 가상 머신 확장입니다. 이를 통해 VM에 콘솔을 연결하거나 PowerShell 원격 기능을 사용하는 대신 Azure를 사용하여 PowerShell 코드를 실행할 수 있습니다.

이 방식으로 명령을 실행하는 것은 여러 가지 이점을 제공합니다. Windows에서 Azure 사용자 지정 확장을 사용하여 명령을 실행하는 것은 다음과 같은 이점을 제공합니다:

  • PowerShell 원격 기능을 위해 네트워크 포트를 열 필요가 없어 더 높은 보안을 제공합니다.
  • VM 시작 시 PowerShell 코드를 쉽게 실행할 수 있습니다.
  • 프로비저닝 프로세스의 일부로 Azure 스토리지에서 VM으로 자동 리소스 전송이 가능합니다.
  • 다양한 Azure 저장소 계정에 저장된 PowerShell 스크립트를 실행하는 간단한 방법

Windows용 Azure 사용자 지정 스크립트 확장을 활성화하는 방법은 몇 가지가 있습니다. 이 문서에서는 PowerShell을 통해 사용자 지정 스크립트 확장을 활성화하는 방법에 초점을 맞출 것이지만, Azure Resource Manager(ARM) 템플릿을 통해 확장을 활성화할 수도 있습니다.

간단한 예로, 구독 내 Azure VM에서 PowerShell 원격 작업을 활성화하려고 한다고 가정해 봅시다. 이를 위해 각 VM에서 다음 명령을 로컬에서 실행해야 합니다:

Enable-PSRemoting -Force

이를 수행하기 위해 사용자 지정 스크립트 확장을 생성해 보겠습니다.

Azure를 사용하여 VM에 스크립트 실행하기

먼저, 로컬 컴퓨터에 Enable-PSRemoting.ps1라는 PowerShell 스크립트를 만들고 위의 명령을 포함시킵니다. 이 스크립트는 Azure VM에서 실행되어야 합니다. 이를 위해 Azure에 업로드되고 실행되도록 사용자 정의 스크립트 확장을 만들기 위해 New-CustomScriptExtension.ps1라는 작은 PowerShell 스크립트를 빌드합니다. 너무 멀리 진행하기 전에 몇 가지 항목이 필요합니다:

  • 스크립트를 저장할 Azure 리소스 그룹 및 저장소 계정 이름
  • Azure 저장소 컨테이너 이름
  • VM 이름
  • VM이 속한 Azure 리소스 그룹 이름

이 스크립트는 두 부분으로 나눌 수 있습니다. 작은 PowerShell 스크립트를 Azure에 업로드하고 사용자 지정 스크립트 확장을 생성하는 부분입니다. 나머지는 이 두 프로세스를 연결하기 위해 필요합니다.

Azure에 PowerShell 스크립트 업로드하기

먼저, Enable-PSRemoting.ps1 스크립트를 리소스 그룹($ResourceGroupName)의 컨테이너($ContainerName) 내 Azure 스토리지 계정($StorageAccountName)에 업로드합니다.

Copying Enable-PSRemoting.ps1 to Azure
$saParams = @{ 'ResourceGroupName' = $ResourceGroupName 'Name' = $StorageAccountName } $storageContainer = Get-AzureRmStorageAccount @saParams |Get-AzureStorageContainer -Container $ContainerName $bcParams = @{ 'File' = 'C:\Enable-PSRemoting.ps1' 'BlobType' = 'Block' 'Blob' = ' Enable-PSRemoting.ps1' } $storageContainer | Set-AzureStorageBlobContent @bcParams

사용자 정의 스크립트 확장 실행

New-CustomScriptExtension.ps1을 실행하면 이 스크립트가 지정된 Azure 스토리지 계정에 Enable-PSRemoting.ps1 스크립트를 업로드합니다.

이제 스크립트가 Azure에 저장되었으므로 가상 머신의 사용자 정의 스크립트 확장을 통해 실행할 수 있습니다:

  • 이름: $VMName
  • 리소스 그룹: $rgName
  • 스토리지 계정: $saName
  • 스토리지 컨테이너: $scName

New-CustomScriptExtension.ps1을 텍스트 편집기에서 열고 아래 예제를 붙여넣으십시오. 이를 실행하면 Windows용 Azure 사용자 정의 스크립트 확장이 실행되어 이전에 업로드한 Enable-PSRemoting.ps1 PowerShell 스크립트가 실행됩니다.

New-CustomScriptExtension.ps1
# 설정해야 할 가상 머신 가져오기 $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $VMName # 스토리지 계정 키 가져오기 $key = (Get-AzureRmStorageAccountKey -Name $saName -ResourceGroupName$rgname).Key1 ## 사용자 정의 스크립트 확장 활성화 및 스크립트 실행 $scriptParams = @{ 'ResourceGroupName' = $rgName 'VMName' = $VMName 'Name' = 'Enable-PSRemoting.ps1' 'Location' = $vm.Location 'StorageAccountName' = $saName 'StorageAccountKey' = $key 'FileName' = 'Enable-PSRemoting.ps1' 'ContainerName' = $scName 'Run' = 'Enable-PSRemoting.ps1' } Set-AzureRmVMCustomScriptExtension @scriptParams

요약

이 스크립트가 완료되면 Enable-PSRemoting.ps1이 VM에서 실행되고 PowerShell 리모팅이 성공적으로 활성화되었는지 확인할 수 있습니다. 이제 Azure VM에 대해 Invoke-Command을 사용할 수 있어야 합니다.

Azure의 Windows 사용자 지정 스크립트 확장을 활용하여 Azure VM에서 모든 종류의 PowerShell 스크립트를 원격으로 실행할 수 있는 기능을 갖게 되었습니다.

Source:
https://adamtheautomator.com/azure-run-script-on-vm/