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

快速入门:创建 Azure 自定义资源提供程序和部署自定义资源

在本快速入门中,你会创建自定义资源提供程序,并为该资源提供程序部署自定义资源。 有关自定义资源提供程序的详细信息,请参阅 Azure 自定义资源提供程序概述

先决条件

为 Azure CLI 准备环境。

Azure CLI 示例将 az rest 用于 REST 请求。 有关详细信息,请参阅 az rest

部署自定义资源提供程序

若要设置自定义资源提供程序,请将示例模板部署到 Azure 订阅。

该模板将以下资源部署到订阅:

  • 可以针对资源和操作运行的函数应用。
  • 存储帐户,用于存储通过自定义资源提供程序创建的用户。
  • 自定义资源提供程序,用于定义自定义资源类型和操作。 它使用函数应用终结点来发送请求。
  • 自定义资源提供程序提供的自定义资源。

若要部署自定义资源提供程序,请使用 Azure CLI、PowerShell 或 Azure 门户。

本示例提示你输入资源组、位置和提供程序的函数应用名称。 名称会存储在其他命令中所使用的变量中。 az group createaz deployment group create 命令将部署资源。

read -p "Enter a resource group name:" rgName &&
read -p "Enter the location (i.e. eastus):" location &&
read -p "Enter the provider's function app name:" funcName &&
templateUri="https://raw.githubusercontent.com/Azure/azure-docs-json-samples/master/custom-providers/customprovider.json" &&
az group create --name $rgName --location "$location" &&
az deployment group create --resource-group $rgName --template-uri $templateUri --parameters funcName=$funcName &&
echo "Press [ENTER] to continue ..." &&
read

若要在 Azure 门户中部署模板,请选择“部署到 Azure”按钮。

Button to deploy the Resource Manager template to Azure.

查看自定义资源提供程序和资源

在门户中,自定义资源提供程序是隐藏的资源类型。 若要确认资源提供程序已部署,请转到资源组并选择“显示隐藏类型”。

Screenshot of Azure portal displaying hidden resource types and resources deployed in a resource group.

要查看已部署的自定义资源,请对资源类型使用 GET 操作。 JSON 响应中显示的资源类型 Microsoft.CustomProviders/resourceProviders/users 包括模板创建的资源。

GET https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users?api-version=2018-09-01-preview
subID=$(az account show --query id --output tsv)
requestURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/users?api-version=2018-09-01-preview"
az rest --method get --uri $requestURI

你会收到响应:

{
  "value": [
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/ana",
      "name": "ana",
      "properties": {
        "FullName": "Ana Bowman",
        "Location": "Moon",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    }
  ]
}

调用操作

自定义资源提供程序还具有名为 ping 的操作。 处理请求的代码在函数应用中实现。 ping 操作使用一条问候信息进行回复。

要发送 ping 请求,请对操作使用 POST 操作。

POST https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/ping?api-version=2018-09-01-preview
pingURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/ping?api-version=2018-09-01-preview"
az rest --method post --uri $pingURI

你会收到响应:

{
  "message": "hello <function-name>.azurewebsites.net",
  "pingcontent": {
    "source": "<function-name>.azurewebsites.net"
  }
}

使用 PUT 创建资源

在本快速入门中,模板使用资源类型 Microsoft.CustomProviders/resourceProviders/users 来部署资源。 还可以使用 PUT 操作来创建资源。 例如,如果未使用模板部署资源,则 PUT 操作将创建一个资源。

在此示例中,由于模板已部署资源,因此 PUT 操作会创建新资源。

PUT https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/<resource-name>?api-version=2018-09-01-preview

{"properties":{"FullName": "Test User", "Location": "Earth"}}
addURI="https://management.azure.com/subscriptions/$subID/resourceGroups/$rgName/providers/Microsoft.CustomProviders/resourceProviders/$funcName/users/testuser?api-version=2018-09-01-preview"
az rest --method put --uri $addURI --body "{'properties':{'FullName': 'Test User', 'Location': 'Earth'}}"

你会收到响应:

{
  "id": "/subscriptions/<sub-ID>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/testuser",
  "name": "testuser",
  "properties": {
    "FullName": "Test User",
    "Location": "Earth",
    "provisioningState": "Succeeded"
  },
  "type": "Microsoft.CustomProviders/resourceProviders/users"
}

可以从查看自定义资源提供程序和资源部分重新运行 GET 操作,以显示已创建的两个资源。 此示例显示 Azure CLI 命令的输出。

{
  "value": [
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/ana",
      "name": "ana",
      "properties": {
        "FullName": "Ana Bowman",
        "Location": "Moon",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    },
    {
      "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceProviders/<provider-name>/users/testuser",
      "name": "testuser",
      "properties": {
        "FullName": "Test User",
        "Location": "Earth",
        "provisioningState": "Succeeded"
      },
      "type": "Microsoft.CustomProviders/resourceProviders/users"
    }
  ]
}

自定义资源提供程序命令

通过 custom-providers 命令来使用自定义资源提供程序。

列出自定义资源提供程序

使用 list 命令显示订阅中的所有自定义资源提供程序。 默认列出当前订阅的自定义资源提供程序,你也可以指定 --subscription 参数。 要列出资源组,请使用 --resource-group 参数。

az custom-providers resource-provider list --subscription $subID
[
  {
    "actions": [
      {
        "endpoint": "https://<provider-name>.azurewebsites.net/api/{requestPath}",
        "name": "ping",
        "routingType": "Proxy"
      }
    ],
    "id": "/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/Microsoft.CustomProviders/resourceproviders/<provider-name>",
    "location": "eastus",
    "name": "<provider-name>",
    "provisioningState": "Succeeded",
    "resourceGroup": "<rg-name>",
    "resourceTypes": [
      {
        "endpoint": "https://<provider-name>.azurewebsites.net/api/{requestPath}",
        "name": "users",
        "routingType": "Proxy, Cache"
      }
    ],
    "tags": {},
    "type": "Microsoft.CustomProviders/resourceproviders",
    "validations": null
  }
]

显示属性

使用 show 命令显示自定义资源提供程序的属性。 输出格式类似于 list 输出。

az custom-providers resource-provider show --resource-group $rgName --name $funcName

创建新资源

使用 create 命令创建或更新自定义资源提供程序。 此示例更新了 actionsresourceTypes

az custom-providers resource-provider create --resource-group $rgName --name $funcName \
--action name=ping endpoint=https://myTestSite.azurewebsites.net/api/{requestPath} routing_type=Proxy \
--resource-type name=users endpoint=https://myTestSite.azurewebsites.net/api/{requestPath} routing_type="Proxy, Cache"
"actions": [
  {
    "endpoint": "https://myTestSite.azurewebsites.net/api/{requestPath}",
    "name": "ping",
    "routingType": "Proxy"
  }
],

"resourceTypes": [
  {
    "endpoint": "https://myTestSite.azurewebsites.net/api/{requestPath}",
    "name": "users",
    "routingType": "Proxy, Cache"
  }
],

更新提供程序的标记

update 命令仅更新自定义资源提供程序的标记。 在 Azure 门户中,自定义资源提供程序的应用服务会显示标记。

az custom-providers resource-provider update --resource-group $rgName --name $funcName --tags new=tag
"tags": {
  "new": "tag"
},

删除自定义资源提供程序

delete 命令将发出提示,并仅删除自定义资源提供程序。 不会删除存储帐户、应用服务和应用服务计划。 删除提供程序后,将返回到命令提示符。

az custom-providers resource-provider delete --resource-group $rgName --name $funcName

清理资源

如果已完成本文中的创建资源操作,则可以删除资源组。 删除一个资源组时,该资源组中的所有资源都会被删除。

az group delete --resource-group $rgName

后续步骤

有关自定义资源提供程序的简介,请参阅以下文章: