你当前正在访问 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 ”按钮。

用于将资源管理器模板部署到 Azure 的按钮。

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

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

Azure 门户的屏幕截图,其中显示了资源组中部署的隐藏资源类型和资源。

若要查看您部署的自定义资源,请在您的资源类型上使用 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"
    }
  ]
}

自定义资源提供程序命令

使用 自定义提供程序 命令处理自定义资源提供程序。

列出自定义资源提供程序

使用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

后续步骤

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