你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

解决资源提供程序注册的错误

本文描述了当你使用尚未在 Azure 订阅中用过的资源提供程序时发生的资源提供程序注册错误。 使用 Bicep 文件或 Azure 资源管理器模板(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 门户或命令行接口自动注册,但并非全部注册。 如果以前未使用过特定资源提供程序,则可能需要注册该提供程序。

当虚拟机(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"