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

将自定义资源添加到 Azure REST API

本文将介绍有关创建实现自定义资源的 Azure 自定义资源提供程序终结点的要求和最佳做法。 如果不熟悉 Azure 自定义资源提供程序,请参阅 有关自定义资源提供程序的概述

如何定义资源终结点

终结点是一个指向服务的 URL,用于实现它与 Azure 之间的基础协定。 终结点在自定义资源提供程序中定义,可以是任何可公开访问的 URL。 下面的示例具有一个名为resourceTypemyCustomResource,由endpointURL实现。

示例 ResourceProvider

{
  "properties": {
    "resourceTypes": [
      {
        "name": "myCustomResource",
        "routingType": "Proxy, Cache",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
  "name": "{resourceProviderName}"
}

构建资源接口

实现 resourceType终结点必须处理 Azure 中新 API 的请求和响应。 创建具有 resourceType 的自定义资源提供程序时,它将在 Azure 中生成一组新的 API。 在这种情况下,resourceType 将生成新的 Azure 资源 API,以便 PUTGETDELETE 可以对单个资源执行 CRUD 操作,同时通过 GET 来检索所有现有资源。

操作单个资源(PUTGETDELETE):

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResource/{myCustomResourceName}

检索所有资源(GET):

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomResource

对于自定义资源,自定义资源提供程序提供两种类型的 routingType:“”Proxy和“”。Proxy, Cache

代理路由类型

ProxyroutingType 将所有请求方法代理到自定义资源提供程序中指定的 终结点 。 何时使用“Proxy”:

  • 需要完全控制响应。
  • 将系统与现有资源集成。

若要了解有关“Proxy”资源的详细信息,请参阅 自定义资源代理参考

代理缓存路由类型

Proxy, CacheroutingType 仅代理 PUTDELETE 请求方法到自定义资源提供程序中指定的 终结点。 自定义资源提供程序将根据缓存中存储的内容自动返回 GET 请求。 如果自定义资源标记为缓存,则自定义资源提供程序还会在响应中添加/覆盖字段,以使 API 符合 Azure。 何时使用“Proxy, Cache”:

  • 创建没有现有资源的新系统。
  • 使用现有的 Azure 生态系统。

若要了解有关“Proxy, Cache”资源的详细信息,请参阅 自定义资源缓存参考

创建自定义资源

从自定义资源提供者中创建自定义资源主要有两种方法:

  • Azure CLI
  • Azure 资源管理器模板

Azure CLI

创建自定义资源:

az resource create --is-full-object \
                   --id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{resourceTypeName}/{customResourceName} \
                   --properties \
                    '{
                        "location": "eastus",
                        "properties": {
                            "myProperty1": "myPropertyValue1",
                            "myProperty2": {
                                "myProperty3": "myPropertyValue3"
                            }
                        }
                    }'
参数 必选 Description
is-full-object 是的 指示属性对象包括其他选项,例如位置、标记、sku 和/或计划。
id 是的 自定义资源的资源 ID。 这应存在于 ResourceProvider 之外
properties 是的 将发送到 终结点的请求正文。

删除 Azure 自定义资源:

az resource delete --id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{resourceTypeName}/{customResourceName}
参数 必选 Description
id 是的 自定义资源的资源 ID。 此 ID 应独立于 ResourceProvider 存在。

检索 Azure 自定义资源:

az resource show --id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/{resourceTypeName}/{customResourceName}
参数 必选 Description
id 是的 自定义资源的资源 ID。 这应该是从 ResourceProvider 分离出来的

Azure 资源管理器模板

注释

资源要求响应包含终结点中的相应 idnametype

Azure 资源管理器模板要求从下游终结点正确返回 idnametype。 返回的资源响应应采用以下格式:

示例 终结点 响应:

{
  "properties": {
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3": "myPropertyValue3"
    }
  },
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{customResourceName}",
  "name": "{customResourceName}",
  "type": "Microsoft.CustomProviders/resourceProviders/{resourceTypeName}"
}

示例 Azure 资源管理器模板:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources": [
        {
            "type": "Microsoft.CustomProviders/resourceProviders/{resourceTypeName}",
            "name": "{resourceProviderName}/{customResourceName}",
            "apiVersion": "2018-09-01-preview",
            "location": "eastus",
            "properties": {
                "myProperty1": "myPropertyValue1",
                "myProperty2": {
                    "myProperty3": "myPropertyValue3"
                }
            }
        }
    ]
}
参数 必选 Description
资源类型名称 是的 自定义资源提供程序中定义的resourceType名称
资源提供者名称 是的 自定义资源提供程序实例名称。
自定义资源名称 是的 自定义资源名称。

后续步骤