你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
本文将介绍有关创建实现自定义资源的 Azure 自定义资源提供程序终结点的要求和最佳做法。 如果不熟悉 Azure 自定义资源提供程序,请参阅 有关自定义资源提供程序的概述。
如何定义资源终结点
终结点是一个指向服务的 URL,用于实现它与 Azure 之间的基础协定。 终结点在自定义资源提供程序中定义,可以是任何可公开访问的 URL。 下面的示例具有一个名为resourceType的myCustomResource,由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,以便 PUT、GET 和 DELETE 可以对单个资源执行 CRUD 操作,同时通过 GET 来检索所有现有资源。
操作单个资源(PUT、GET 和 DELETE):
/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
代理路由类型
“Proxy” routingType 将所有请求方法代理到自定义资源提供程序中指定的 终结点 。 何时使用“Proxy”:
- 需要完全控制响应。
- 将系统与现有资源集成。
若要了解有关“Proxy”资源的详细信息,请参阅 自定义资源代理参考
代理缓存路由类型
“Proxy, Cache” routingType 仅代理 PUT 和 DELETE 请求方法到自定义资源提供程序中指定的 终结点。 自定义资源提供程序将根据缓存中存储的内容自动返回 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 资源管理器模板
注释
资源要求响应包含终结点中的相应 id、name 和 type。
Azure 资源管理器模板要求从下游终结点正确返回 id、name 和 type。 返回的资源响应应采用以下格式:
示例 终结点 响应:
{
"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的名称。 |
| 资源提供者名称 | 是的 | 自定义资源提供程序实例名称。 |
| 自定义资源名称 | 是的 | 自定义资源名称。 |