다음을 통해 공유


Azure Windows VM 확장 오류 문제 해결

Azure Resource Manager 템플릿 개요

Azure Resource Manager 템플릿을 사용하면 리소스 간의 종속성을 정의하여 JSON 언어로 Azure IaaS 인프라를 선언적으로 지정할 수 있습니다.

확장을 사용하기 위한 템플릿 작성에 대한 자세한 내용은 확장 템플릿 작성을 참조하세요.

이 문서에서는 몇 가지 일반적인 VM 확장 오류 문제를 해결하는 방법을 알아봅니다.

확장 상태 보기

Azure Resource Manager 템플릿은 Azure PowerShell에서 실행할 수 있습니다. 템플릿이 실행되면 Azure Resource Explorer 또는 명령줄 도구에서 확장 상태를 볼 수 있습니다.

예제는 다음과 같습니다.

Azure PowerShell:

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

샘플 출력은 다음과 같습니다.

Extensions:  {
  "ExtensionType": "Microsoft.Compute.CustomScriptExtension",
  "Name": "myCustomScriptExtension",
  "SubStatuses": [
    {
      "Code": "ComponentStatus/StdOut/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "    Directory: C:\\temp\\n\\n\\nMode                LastWriteTime     Length Name
          \\n----                -------------     ------ ----                              \\n-a---          9/1/2015   2:03 AM         11
          test.txt                          \\n\\n",
                  "Time": null
      },
    {
      "Code": "ComponentStatus/StdErr/succeeded",
      "DisplayStatus": "Provisioning succeeded",
      "Level": "Info",
      "Message": "",
      "Time": null
    }
  ]
}

확장 오류 문제 해결

VM 에이전트가 실행 중이고 준비되었는지 확인합니다.

확장을 관리, 설치 및 실행하려면 VM 에이전트가 필요합니다. VM 에이전트가 실행되고 있지 않거나 준비 상태를 Azure 플랫폼에 보고하지 못하는 경우 확장이 제대로 작동하지 않습니다.

다음 페이지에서 VM 에이전트 문제를 해결합니다.

특정 확장 문제 해결 가이드 확인

일부 확장에는 문제를 해결하는 방법을 설명하는 특정 페이지가 있습니다. 이러한 확장 및 페이지 목록은 문제 해결 확장 에서 찾을 수 있습니다.

확장의 상태 보기

앞에서 설명한 대로 PowerShell cmdlet을 실행하여 확장 상태를 찾을 수 있습니다.

Get-AzVM -ResourceGroupName $RGName -Name $vmName -Status

또는 CLI 명령:x

az vm extension show -g <RG Name> --vm-name <VM Name>  --name <Extension Name>

또는 Azure Portal에서 VM 블레이드/설정/확장으로 이동합니다. 그런 다음 확장을 클릭하고 해당 상태 및 메시지를 확인할 수 있습니다.

VM에서 확장 다시 실행

사용자 지정 스크립트 확장을 사용하여 VM에서 스크립트를 실행하는 경우 VM이 성공적으로 만들어졌지만 스크립트가 실패하는 오류가 발생할 수 있습니다. 이러한 조건에서 이 오류에서 복구하는 권장 방법은 확장을 제거하고 템플릿을 다시 실행하는 것입니다.

비고

나중에 확장을 제거할 필요가 없도록 이 기능이 향상될 것입니다.

Azure PowerShell에서 확장 제거

Remove-AzVMExtension -ResourceGroupName $RGName -VMName $vmName -Name "myCustomScriptExtension"

확장이 제거되면 템플릿을 다시 실행하여 VM에서 스크립트를 실행할 수 있습니다.

VM에 새 GoalState 트리거

'Windows Azure CRP 인증서 생성기'가 누락되어 확장이 실행되고 있지 않을 수 있습니다. 이 인증서는 전송 중에 확장의 설정을 보호하는 데 도움이 됩니다. 해당 인증서는 가상 머신 내부에서 Windows 게스트 에이전트를 다시 시작하여 자동으로 다시 생성됩니다.

  • 작업 관리자 열기
  • 세부 정보 탭으로 이동
  • WindowsAzureGuestAgent.exe 프로세스 찾기
  • 마우스 오른쪽 단추를 클릭하고 "작업 종료"를 선택합니다. 프로세스가 자동으로 다시 시작됩니다.

"VM 다시 적용"을 실행하여 VM에 대한 새 GoalState를 트리거할 수도 있습니다. VM 다시 적용 은 VM의 상태를 다시 적용하기 위해 2020년에 도입된 API입니다. 짧은 VM 가동 중지 시간을 허용할 수 있는 한 번에 이 작업을 수행하는 것이 좋습니다. 일반적으로 다시 적용해도 VM은 다시 부팅되지 않지만 드문 경우지만 다시 시작해야 하는 보류 중인 업데이트가 트리거될 수 있습니다.

Azure Portal:

포털에서 VM을 선택하고 지원 + 문제 해결 아래의 왼쪽 창에서 다시 배포 + 다시 적용을 선택한 다음 다시 적용을 선택합니다.

Azure PowerShell(RG 이름 및 VM 이름을 값으로 바꿉니다.)

Set-AzVM -ResourceGroupName <RG Name> -Name <VM Name> -Reapply

Azure CLI(RG 이름 및 VM 이름을 값으로 바꿉니다.)

az vm reapply -g <RG Name> -n <VM Name>

"VM 다시 적용"이 작동하지 않는 경우 Azure 관리 포털에서 VM에 빈 데이터 디스크를 새로 추가한 다음 나중에 인증서가 다시 추가되면 제거할 수 있습니다.

VM 내의 확장 로그 살펴보기

이전 단계가 작동하지 않았고 확장이 여전히 실패 상태인 경우 다음 단계는 Virtual Machine 내의 로그를 살펴보는 것입니다.

Windows VM에서 확장 로그는 기본적으로 에 상주합니다.

C:\WindowsAzure\Logs\Plugins

기본적으로 확장 설정 및 상태 파일은 에 있습니다.

C:\Packages\Plugins

Linux VM에서 확장 로그는 기본적으로 에 상주합니다.

/var/log/azure/

그리고 세부 정보별 확장 설정 및 상태 파일은 에 있습니다.

/var/lib/waagent/

각 확장은 서로 다르지만 일반적으로 비슷한 원칙을 따릅니다.

확장 패키지 및 이진 파일은 VM에서 다운로드됩니다(예: Linux용 "/var/lib/waagent/custom-script/download/1" 또는 Windows 의 경우 "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Downloads\0" ).

해당 구성 및 설정은 Azure 플랫폼에서 VM 에이전트를 통해 확장 처리기로 전달됩니다(예: Linux의 경우 "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/config" 또는 Windows의 경우 "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\RuntimeSettings" )

VM 내의 확장 처리기는 Azure 플랫폼에 보고되는 상태 파일(예: Linux용 "/var/lib/waagent/Microsoft.Azure.Extensions.CustomScript-2.1.3/status/1.status" 또는 "C:\Packages\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\Status" )에 쓰고 있습니다. 해당 상태는 PowerShell, CLI 또는 Azure Portal의 VM 확장 블레이드에서 보고됩니다.

또한 실행에 대한 자세한 로그를 작성합니다(예: Linux의 경우 "/var/log/azure/custom-script/handler.log" 또는 Windows 의 경우 "C:\WindowsAzure\Logs\Plugins\Microsoft.Compute.CustomScriptExtension\1.10.12\CustomScriptHandler.log" ).

기존 VM에서 VM을 다시 만드는 경우

다른 Azure VM에서 제공되는 특수 디스크를 기반으로 Azure VM을 만드는 경우 발생할 수 있습니다. 이 경우 이전 VM에 확장 및 이진 파일, 로그 및 상태 파일이 남아 있는 것일 수 있습니다. 새 VM 모델은 이전 VM의 확장 상태를 인식하지 못하며 이러한 확장에 대해 잘못된 상태를 보고할 수 있습니다. 새 VM을 만들기 전에 이전 VM에서 확장을 제거한 다음 새 VM이 만들어지면 이러한 확장을 다시 설치하는 것이 좋습니다. 기존 Azure VM에서 일반화된 이미지를 만들 때도 마찬가지입니다. 확장에서 일관성 없는 상태를 방지하기 위해 확장을 제거하도록 초대합니다.

알려진 문제

PowerShell은 내부 또는 외부 명령으로 인식되지 않습니다.

RunCommand 확장의 출력에 다음과 같은 오류 항목이 표시됩니다.

RunCommandExtension failed with "'powershell' isn't recognized as an internal or external command,"

분석

확장은 로컬 시스템 계정에서 실행되므로 VM에 RDP할 때 powershell.exe 정상적으로 작동하지만 RunCommand를 사용하여 실행하면 실패할 수 있습니다.

Solution

  • POWERShell이 PATH 환경 변수에 제대로 나열되어 있는지 확인합니다.
    • 제어판 열기
    • 시스템 및 보안
    • 시스템
    • 고급 탭 -> 환경 변수
  • '시스템 변수'에서 편집을 클릭하고 PowerShell이 PATH 환경 변수에 있는지 확인합니다(일반적으로 "C:\Windows\System32\WindowsPowerShell\v1.0").
  • VM을 다시 부팅하거나 WindowsAzureGuestAgent 서비스를 다시 시작한 다음, 실행 명령을 다시 시도합니다.

명령은 내부 또는 외부 명령으로 인식되지 않습니다.

C:\WindowsAzure\Logs\Plugins<ExtensionName><Version>\CommandExecution.log 파일에 다음이 표시됩니다.

Execution Error: '<command>' isn't recognized as an internal or external command, operable program or batch file.

분석

확장은 로컬 시스템 계정에서 실행되므로 VM에 RDP할 때 powershell.exe 정상적으로 작동하지만 RunCommand를 사용하여 실행하면 실패할 수 있습니다.

Solution

  • VM에서 명령 프롬프트를 열고 명령을 실행하여 오류를 재현합니다. VM 에이전트는 관리자 cmd.exe 사용하며 cmd가 시작될 때마다 실행되도록 미리 구성된 명령이 있을 수 있습니다.
  • PATH 변수가 잘못 구성되었지만 문제가 있는 명령에 따라 달라질 수도 있습니다.

VMAccessAgent가 실패하고 관리자 계정에 대한 원격 데스크톱 연결 설정을 업데이트할 수 없습니다. 오류: System.Runtime.InteropServices.COMException(0x800706D9): 엔드포인트 매퍼에서 사용할 수 있는 엔드포인트가 더 이상 없습니다.

확장의 상태에 다음이 표시됩니다.

Type Microsoft.Compute.VMAccessAgent
Version 2.4.8
Status Provisioning failed
Status level Error
Status message Cannot update Remote Desktop Connection settings for Administrator account. Error: System.Runtime.InteropServices.COMException (0x800706D9): There are no more endpoints available from the endpoint mapper. (Exception from HRESULT: 0x800706D9) at NetFwTypeLib.INetFwRules.GetEnumerator() at 
Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktopFirewallRules() 
at Microsoft.WindowsAzure.GuestAgent.Plugins.JsonExtensions.VMAccess.RemoteDesktopManager.EnableRemoteDesktop() at

분석

이 오류는 Windows 방화벽 서비스가 실행되고 있지 않을 때 발생할 수 있습니다.

Solution

Windows 방화벽 서비스가 활성화되어 실행 중인지 확인합니다. 그렇지 않은 경우 사용하도록 설정하고 시작합니다. VMAccessAgent를 다시 실행해 보세요.

유효성 검사 절차에 따라 원격 인증서가 잘못되었습니다.

WaAppAgent.log 다음이 표시됩니다.

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. ---> System.Security.
Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.

분석

VM에 "신뢰할 수 있는 루트 인증 기관"의 Baltimore CyberTrust 루트 인증서가 누락되었을 수 있습니다.

Solution

certmgr.msc를 사용하여 인증서 콘솔을 열고 인증서가 있는지 확인합니다.

ZScaler와 같은 타사 SSL 검사 도구가 인증서 체인을 손상할 수 있습니다. SSL 검사를 무시하도록 이러한 도구를 구성해야 합니다.