你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在本快速入门中,你将创建自定义资源提供程序并为该资源提供程序部署自定义资源。 有关自定义资源提供程序的详细信息,请参阅 Azure 自定义资源提供程序概述。
先决条件
- 如果没有 Azure 订阅,请在开始之前创建一个免费帐户。
- 若要完成此快速入门中的步骤,需要调用
REST操作。 发送 REST 请求的方法有所不同。
为 Azure CLI 准备环境。
在 Azure Cloud Shell 中使用 Bash 环境。 有关详细信息,请参阅 Azure Cloud Shell 入门。
如需在本地运行 CLI 参考命令,请安装 Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行 Azure CLI。 有关详细信息,请参阅如何在 Docker 容器中运行 Azure CLI。
如果使用的是本地安装,请使用 az login 命令登录到 Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅 使用 Azure CLI 向 Azure 进行身份验证。
出现提示时,请在首次使用时安装 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"
}
]
}
自定义资源提供程序命令
使用 自定义提供程序 命令处理自定义资源提供程序。
列出自定义资源提供程序
使用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
后续步骤
有关自定义资源提供程序的简介,请参阅以下文章: