리소스 공급자 등록 오류 해결

이 문서에서는 Azure 구독에서 아직 사용하지 않은 리소스 공급자를 사용할 때 발생하는 리소스 공급자 등록 오류에 대해 설명합니다. Bicep 파일 또는 Azure Resource Manager 템플릿(ARM 템플릿)을 사용하여 리소스를 배포할 때 오류가 표시됩니다. Azure에서 리소스 공급자를 자동으로 등록하지 않는 경우 수동 등록을 할 수 있습니다.

증상

리소스가 배포되면 다음 오류 코드 및 메시지가 표시될 수 있습니다.

Code: NoRegisteredProviderFound
Message: No registered resource provider found for location {location}
and API version {api-version} for type {resource-type}.

또는 다음과 같은 비슷한 메시지가 표시될 수 있습니다.

Code: MissingSubscriptionRegistration
Message: The subscription is not registered to use namespace {resource-provider-namespace}

오류 메시지는 지원되는 위치 및 API 버전에 대해 제안을 제공해야 합니다. 제안된 값을 사용하도록 템플릿을 변경할 수 있습니다. 대부분의 공급자는 Microsoft Azure Portal 또는 명령줄 인터페이스에서 자동으로 등록되지만 그렇지 않은 경우도 있습니다. 이전에 특정 리소스 공급자를 사용하지 않은 경우 해당 공급자를 등록해야 할 수 있습니다.

VM(가상 머신) 자동 종료가 사용하지 않도록 설정되면 다음과 비슷한 오류 메시지가 표시될 수 있습니다.

Code: AuthorizationFailed
Message: The client '<identifier>' with object id '<identifier>' does not have authorization to perform
action 'Microsoft.Compute/virtualMachines/read' over scope ...

ARM 템플릿 또는 Bicep 파일에 없는 리소스 공급자에 대해 예기치 않은 오류가 발생할 수 있습니다. 이 오류는 다른 지원 리소스를 만드는 리소스가 배포될 때 발생할 수 있습니다. 예를 들어 템플릿의 리소스에서 모니터링 또는 보안 리소스를 추가합니다. 오류 메시지는 등록해야 하는 리소스 공급자 네임스페이스가 지원 리소스에 대한 것임을 나타냅니다.

원인

이러한 오류가 표시되는 이유는 다음과 같습니다.

  • 필요한 리소스 공급자가 구독에 등록되지 않았습니다.
  • 리소스 종류에 대해 지원되지 않는 API 버전입니다.
  • 리소스 종류에 대해 지원되지 않는 위치입니다.
  • VM 자동 종료의 경우 Microsoft.DevTestLab 리소스 공급자를 등록해야 합니다.

솔루션

Azure CLI를 사용하여 리소스 공급자의 등록 상태에 대한 정보를 가져오고 리소스 공급자를 등록할 수 있습니다.

az provider list를 사용하여 구독의 리소스 공급자에 대한 등록 상태를 표시합니다. 다음 예제에서는 가독성을 위해 --output table 매개 변수를 사용하여 출력을 필터링합니다. 모든 속성을 보려면 매개 변수를 생략할 수 있습니다.

다음 명령은 구독의 모든 리소스 공급자와 해당 공급자가 Registered 또는 NotRegistered인지 여부를 나열합니다.

az provider list --output table

등록 상태를 기준으로 출력을 필터링할 수 있습니다. 쿼리 값을 Registered 또는 NotRegistered로 바꿉니다.

az provider list --query "[?registrationState=='Registered']" --output table

특정 리소스 공급자에 대한 등록 상태를 가져옵니다.

az provider list --query "[?namespace=='Microsoft.Compute']" --output table

리소스 공급자를 등록하려면 az provider register 명령을 사용하고 등록할 네임스페이스를 지정합니다.

az provider register --namespace Microsoft.Cdn

리소스 종류에 대해 지원되는 위치를 가져오려면 az provider show를 사용합니다.

az provider show --namespace Microsoft.Web --query "resourceTypes[?resourceType=='sites'].locations"

리소스 종류에 대해 지원되는 API 버전을 가져옵니다.

az provider show --namespace Microsoft.Web --query "resourceTypes[?resourceType=='sites'].apiVersions"