解决资源提供程序注册的错误
本文描述了当你使用尚未在 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 版本的建议。 可以将模板更改为使用建议的值。 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"