Create and use a custom resource provider
A custom resource provider is a contract between Azure and an endpoint. With custom resource providers, you can change workflows on Azure. This tutorial shows the process of creating a custom resource provider. If you're unfamiliar with Azure Custom Resource Providers, see the overview of Azure Custom Resource Providers.
Create a custom resource provider
Note
This tutorial does not show how to author an endpoint. If you don't have a RESTFUL endpoint, follow the tutorial on authoring RESTful endpoints, which is the foundation for the current tutorial.
After you create an endpoint, you can create a custom resource provider to generate a contract between the provider and the endpoint. With a custom resource provider, you can specify a list of endpoint definitions:
{
"name": "myEndpointDefinition",
"routingType": "Proxy",
"endpoint": "https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>"
}
Property | Required | Description |
---|---|---|
name | Yes | The name of the endpoint definition. Azure exposes this name through its API under /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders /resourceProviders/{resourceProviderName}/{endpointDefinitionName} |
routingType | No | The endpoint contract type. If the value isn't specified, it defaults to "Proxy". |
endpoint | Yes | The endpoint to route the requests to. This endpoint handles the response and any side effects of the request. |
The value of endpoint is the trigger URL of the Azure function app. The <yourapp>
, <funcname>
, and <functionkey>
placeholders must be replaced with values for your created function app.
Define custom actions and resources
The custom resource provider contains a list of endpoint definitions modeled under the actions and resourceTypes properties. The actions property maps to the custom actions exposed by the custom resource provider, and the resourceTypes property is the custom resources. In this tutorial, the custom resource provider has an actions property named myCustomAction
and a resourceTypes property named myCustomResources
.
{
"properties": {
"actions": [
{
"name": "myCustomAction",
"routingType": "Proxy",
"endpoint": "https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>"
}
],
"resourceTypes": [
{
"name": "myCustomResources",
"routingType": "Proxy",
"endpoint": "https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>"
}
]
},
"location": "eastus"
}
Deploy the custom resource provider
Note
You must replace the endpoint values with the trigger URL from the function app created in the previous tutorial.
You can deploy the previous custom resource provider by using an Azure Resource Manager template:
{
"$schema": "http://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.CustomProviders/resourceProviders",
"name": "myCustomProvider",
"apiVersion": "2018-09-01-preview",
"location": "eastus",
"properties": {
"actions": [
{
"name": "myCustomAction",
"routingType": "Proxy",
"endpoint": "https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>"
}
],
"resourceTypes": [
{
"name": "myCustomResources",
"routingType": "Proxy",
"endpoint": "https://<yourapp>.azurewebsites.net/api/<funcname>?code=<functionkey>"
}
]
}
}
]
}
Use custom actions and resources
After you create a custom resource provider, you can use the new Azure APIs. The following sections explain how to call and use a custom resource provider.
Custom actions
Azure CLI
Note
You must replace the {subscriptionId}
and {resourceGroupName}
placeholders with the subscription and resource group of where you deployed the custom resource provider.
az resource invoke-action --action myCustomAction \
--ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/myCustomProvider \
--request-body
'{
"hello": "world"
}'
Parameter | Required | Description |
---|---|---|
action | Yes | The name of the action defined in the custom resource provider. |
ids | Yes | The resource ID of the custom resource provider. |
request-body | No | The request body that will be sent to the endpoint. |
Custom resources
Note
You must replace the {subscriptionId}
and {resourceGroupName}
placeholders with the subscription and resource group of where you deployed the custom resource provider.
Create a custom resource
az resource create --is-full-object \
--id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/myCustomProvider/myCustomResources/myTestResourceName1 \
--properties
'{
"location": "eastus",
"properties": {
"hello" : "world"
}
}'
Parameter | Required | Description |
---|---|---|
is-full-object | Yes | Indicates whether the properties object includes other options like location, tags, SKU, or plan. |
id | Yes | The resource ID of the custom resource. This ID is an extension of the custom resource provider's resource ID. |
properties | Yes | The request body that will be sent to the endpoint. |
Delete a custom resource
az resource delete --id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/myCustomProvider/myCustomResources/myTestResourceName1
Parameter | Required | Description |
---|---|---|
id | Yes | The resource ID of the custom resource. This ID is an extension of the custom resource provider's resource ID. |
Retrieve a custom resource
az resource show --id /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/myCustomProvider/myCustomResources/myTestResourceName1
Parameter | Required | Description |
---|---|---|
id | Yes | The resource ID of the custom resource. This ID is an extension of the custom resource provider's resource ID. |
Note
After you finish deploying and using the custom resource provider, remember to clean up all created resources including the Azure function app.
Next steps
In this article, you learned about custom resource providers. For more information, see: