你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:创建 Azure 自定义资源提供程序和部署自定义资源
在本快速入门中,你会创建自定义资源提供程序,并为该资源提供程序部署自定义资源。 有关自定义资源提供程序的详细信息,请参阅 Azure 自定义资源提供程序概述。
先决条件
- 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 完成本快速入门中的步骤需要调用
REST
操作。 可以通过不同的方法来发送 REST 请求。
为 Azure CLI 准备环境。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 中的 Bash 快速入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅使用 Azure CLI 登录。
出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展详细信息,请参阅使用 Azure CLI 的扩展。
运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade。
Azure CLI 示例将 az rest
用于 REST
请求。 有关详细信息,请参阅 az rest。
部署自定义资源提供程序
若要设置自定义资源提供程序,请将示例模板部署到 Azure 订阅。
该模板将以下资源部署到订阅:
- 可以针对资源和操作运行的函数应用。
- 存储帐户,用于存储通过自定义资源提供程序创建的用户。
- 自定义资源提供程序,用于定义自定义资源类型和操作。 它使用函数应用终结点来发送请求。
- 自定义资源提供程序提供的自定义资源。
若要部署自定义资源提供程序,请使用 Azure CLI、PowerShell 或 Azure 门户。
本示例提示你输入资源组、位置和提供程序的函数应用名称。 名称会存储在其他命令中所使用的变量中。 az group create 和 az 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”按钮。
查看自定义资源提供程序和资源
在门户中,自定义资源提供程序是隐藏的资源类型。 若要确认资源提供程序已部署,请转到资源组并选择“显示隐藏类型”。
要查看已部署的自定义资源,请对资源类型使用 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
命令创建或更新自定义资源提供程序。 此示例更新了 actions
和 resourceTypes
。
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
后续步骤
有关自定义资源提供程序的简介,请参阅以下文章: