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

Azure 自定义资源提供程序资源载入概述

Azure 自定义资源提供程序资源载入是 Azure 资源类型的扩展性模型。 它允许在现有的 Azure 资源上大规模地应用操作或管理。 有关详细信息,请参阅 Azure 自定义资源提供程序如何扩展 Azure。 本文介绍:

  • 资源载入可以执行的作。
  • 资源载入基础知识及其用法。
  • 在何处查找入门指南和代码示例。

重要

自定义资源提供程序目前以公共预览版提供。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持,或者可能具有受限功能。 有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

资源载入可以做什么?

Azure 自定义资源提供程序自定义资源类似,资源载入定义了一个协定,用于将“载入”请求代理到终结点。 与自定义资源不同,资源载入不会创建新的资源类型。 而是允许扩展现有资源类型。 资源引入与 Azure Policy 一起使用,因此可以大规模管理和配置资源。 资源载入工作流的一些示例:

  • 在虚拟机扩展上安装和管理。
  • 在 Azure 存储帐户上上传和配置默认值。
  • 大规模启用基线诊断设置。

资源载入基础知识

通过使用 Microsoft.CustomProviders/resourceProviders 和 Microsoft.CustomProviders/associations 资源类型,借助 Azure 自定义资源提供程序来配置资源的载入。 在配置过程中,为了使自定义资源提供程序能够引入资源,请创建一个名为“associations”的resourceType,并为其分配一个包含“Extension”的routingType。 Microsoft.CustomProviders/associations 和 Microsoft.CustomProviders/resourceProviders 不需要属于同一资源组。

下面是一个示例 Azure 自定义资源提供程序:

{
  "properties": {
    "resourceTypes": [
      {
        "name": "associations",
        "routingType": "Proxy,Cache,Extension",
        "endpoint": "https://microsoft.com/"
      }
    ]
  },
  "location": "eastus"
}
资产 Required? Description
姓名 是的 终结点定义的名称。 对于资源载入,名称必须为“关联”。
routingType 是的 确定与终结点的协定类型。 对于资源载入,有效的 routingTypes 为“Proxy, Cache, Extension”和“Webhook, Cache, Extension”。
终结点 是的 要将请求路由到的端点。 这将处理响应以及请求可能产生的任何副作用。

使用关联资源类型创建自定义资源提供程序后,可以使用 Microsoft.CustomProviders/associations 为目标。 Microsoft.CustomProviders/associations 是可以扩展任何其他 Azure 资源的扩展资源。 创建 Microsoft.CustomProviders/associations 的实例时,它将采用属性 targetResourceId,该属性应该是有效的 Microsoft.CustomProviders/resourceProviders 或 Microsoft.Solutions/applications 资源 ID。 在这些情况下,请求将被转发到您所创建的 Microsoft.CustomProviders/resourceProviders 实例上的关联资源类型。

注释

如果 Microsoft.Solutions/applications 资源 ID 作为 targetResourceId 提供,则必须在托管资源组中部署名为“public”的 Microsoft.CustomProviders/resourceProviders。

Azure 自定义资源提供程序的关联示例:

{
  "properties": {
    "targetResourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
    ...
  }
}
资产 Required? Description
targetResourceId 是的 Microsoft.CustomProviders/resourceProviders 或 Microsoft.Solutions/applications 的资源 ID。

如何使用资源载入

资源载入的工作原理是使用 Microsoft.CustomProviders/associations 扩展资源扩展其他资源。 在以下示例中,对虚拟机发出请求,但可以扩展任何资源。

首先,需要创建一种关联类型的自定义资源提供程序。 这将声明在创建相应的 Microsoft.CustomProviders/associations 资源(面向自定义资源提供程序)时使用的回调 URL。

示例 Microsoft.CustomProviders/resourceProviders 创建请求:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
  "properties": {
    "resourceTypes": [
      {
        "name": "associations",
        "routingType": "Proxy,Cache,Extension",
        "endpoint": "https://{myCustomEndpoint}/"
      }
    ]
  },
  "location": "{location}"
}

创建自定义资源提供程序后,可以面向其他资源,并对其应用自定义资源提供程序的副作用。

示例 Microsoft.CustomProviders/associations 创建请求:

PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}/providers/Microsoft.CustomProviders/associations/{associationName}?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
  "properties": {
    "targetResourceId": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
  }
}

然后,此请求将转发到在创建的自定义资源提供程序中指定的终结点,此终结点由 targetResourceId 以以下形式引用:

PUT https://{endpointURL}/?api-version=2018-09-01-preview
Content-Type: application/json
X-MS-CustomProviders-RequestPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/associations/{associationName}
X-MS-CustomProviders-ExtensionPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}/providers/Microsoft.CustomProviders/associations/{associationName}
X-MS-CustomProviders-ExtendedResource: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{virtualMachineName}

{
  "properties": {
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
  }
}

终结点应使用应用程序/json Content-Type 和有效的 JSON 响应正文进行响应。 JSON 属性 对象下返回的字段将添加到关联返回响应中。

获取帮助

如果对 Azure 自定义资源提供程序开发有疑问,请尝试在 Stack Overflow 上提问。 类似的问题可能已经得到解答,因此请在发布之前先检查。 添加标记 azure-custom-providers 以获取快速响应!

后续步骤

本文中,您学习了关于自定义资源提供程序的内容。 请参阅以下文章了解详细信息: