リソース プロバイダーの登録エラーの解決

この記事では、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 パラメーターを使用して、読みやすくするために出力をフィルター処理しています。 このパラメーターを省略して、すべてのプロパティを表示することもできます。

次のコマンドは、すべてのサブスクリプションのリソース プロバイダーと、それが RegisteredNotRegistered のどちらであるかを一覧表示します。

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"