Extensión de recursos con proveedores de recursos personalizados
En este tutorial, implementa un proveedor de recursos personalizado a Azure que amplía la API de Azure Resource Manager con el tipo de recursos Microsoft.CustomProviders/associations. En el tutorial se muestra cómo ampliar los recursos existentes que se encuentran fuera del grupo de recursos donde se encuentra la instancia del proveedor de recursos personalizado. En este tutorial, el proveedor de recursos personalizado se basa en una aplicación lógica de Azure, pero puede usar cualquier punto de conexión de API público.
Prerrequisitos
Para completar este tutorial, asegúrese de revisar lo siguiente:
- Las funcionalidades de los proveedores de recursos personalizados de Azure.
- La información básica sobre la incorporación de recursos con proveedores de recursos personalizados.
Introducción a la incorporación de recursos
En este tutorial, hay dos partes que se deben implementar: el proveedor de recursos personalizado y la asociación. Para facilitar el proceso, tiene la opción de usar una sola plantilla que implemente ambos.
La plantilla usará estos recursos:
- Microsoft.CustomProviders/resourceProviders
- Microsoft.Logic/workflows
- Microsoft.CustomProviders/associations
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"allowedValues": [
"australiaeast",
"eastus",
"westeurope"
],
"metadata": {
"description": "Location for the resources."
}
},
"logicAppName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]",
"metadata": {
"description": "Name of the logic app to be created."
}
},
"customResourceProviderName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]",
"metadata": {
"description": "Name of the custom resource provider to be created."
}
},
"customResourceProviderId": {
"type": "string",
"defaultValue": "",
"metadata": {
"description": "The resource ID of an existing custom resource provider. Provide this to skip deployment of new logic app and custom resource provider."
}
},
"associationName": {
"type": "string",
"defaultValue": "myAssociationResource",
"metadata": {
"description": "Name of the custom resource that is being created."
}
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"condition": "[empty(parameters('customResourceProviderId'))]",
"name": "customProviderInfrastructureTemplate",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logicAppName": {
"type": "string",
"defaultValue": "[parameters('logicAppName')]"
}
},
"resources": [
{
"type": "Microsoft.Logic/workflows",
"apiVersion": "2019-05-01",
"name": "[parameters('logicAppName')]",
"location": "[parameters('location')]",
"properties": {
"state": "Enabled",
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Switch": {
"cases": {
"Case": {
"actions": {
"CreateCustomResource": {
"inputs": {
"body": {
"properties": "@addProperty(triggerBody().Body['properties'], 'myDynamicProperty', 'myDynamicValue')"
},
"statusCode": 200
},
"kind": "Http",
"type": "Response"
}
},
"case": "CREATE"
}
},
"default": {
"actions": {
"DefaultHttpResponse": {
"inputs": {
"statusCode": 200
},
"kind": "Http",
"type": "Response"
}
}
},
"expression": "@triggerBody().operationType",
"type": "Switch"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"CustomProviderWebhook": {
"inputs": {
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
}
}
},
{
"type": "Microsoft.CustomProviders/resourceProviders",
"apiVersion": "2018-09-01-preview",
"name": "[parameters('customResourceProviderName')]",
"location": "[parameters('location')]",
"properties": {
"resourceTypes": [
{
"name": "associations",
"mode": "Secure",
"routingType": "Webhook,Cache,Extension",
"endpoint": "[[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows', parameters('logicAppName')), '/triggers/CustomProviderWebhook'), '2019-05-01').value]"
}
]
}
}
],
"outputs": {
"customProviderResourceId": {
"type": "string",
"value": "[resourceId('Microsoft.CustomProviders/resourceProviders', parameters('customResourceProviderName'))]"
}
}
}
}
},
{
"type": "Microsoft.CustomProviders/associations",
"apiVersion": "2018-09-01-preview",
"name": "[parameters('associationName')]",
"location": "global",
"properties": {
"targetResourceId": "[if(empty(parameters('customResourceProviderId')), reference('customProviderInfrastructureTemplate').outputs.customProviderResourceId.value, parameters('customResourceProviderId'))]",
"myCustomInputProperty": "myCustomInputValue",
"myCustomInputObject": {
"Property1": "Value1"
}
}
}
],
"outputs": {
"associationResource": {
"type": "object",
"value": "[reference(parameters('associationName'), '2018-09-01-preview', 'Full')]"
}
}
}
Implementación de la infraestructura de proveedores de recursos personalizados
La primera parte de la plantilla implementa la infraestructura de proveedores de recursos personalizados. Esta infraestructura define el efecto del recurso de asociaciones. Si no está familiarizado con los proveedores de recursos personalizados, consulte Información general sobre los proveedores de recursos personalizados de Azure.
Vamos a implementar la infraestructura de proveedores de recursos personalizados. Copie, guarde e implemente la plantilla anterior, o bien siga e implemente la infraestructura mediante Azure Portal.
Vaya a Azure Portal.
Busque plantillasen en Todos los servicios o mediante el cuadro de búsqueda principal:
Seleccione Agregar en el panel Plantillas:
En General, escriba un Nombre y una Descripción para la nueva plantilla:
Para crear la plantilla de Resource Manager, copie la plantilla JSON de la sección "Introducción a la incorporación de recursos" de este artículo:
Seleccione Agregar para crear la plantilla. Si la nueva plantilla no aparece, seleccione Actualizar.
Seleccione la plantilla recién creada y, luego, seleccione Implementar:
Escriba la configuración de los campos obligatorios y, a continuación, seleccione la suscripción y el grupo de recursos. Puede dejar vacío el cuadro Custom Resource Provider Id (Id. de proveedor de recursos personalizado).
Nombre del valor ¿Necesario? Descripción Location Sí Ubicación de los recursos en la plantilla. Nombre de la aplicación lógica No nombre de la aplicación lógica. Custom Resource Provider Name (Nombre del proveedor de recursos personalizado) No Nombre del proveedor de recursos personalizado. Custom Resource Provider Id (Id. de proveedor de recursos personalizado) No Proveedor de recursos personalizado existente que admite el recurso de asociación. Si especifica un valor aquí, se omitirá la implementación de la aplicación lógica y del proveedor de recursos personalizado. Nombre de asociación No Nombre del recurso de asociación. Parámetros de ejemplo:
Vaya a la implementación y espere a que finalice. Debe ver algo parecido a la captura de pantalla siguiente. Debería ver el nuevo recurso de asociación como salida:
Aquí está el grupo de recursos, con Mostrar tipos ocultos seleccionado:
Explore la pestaña Historial de ejecuciones de la aplicación lógica para ver las llamadas para la creación de la asociación:
Implementar asociaciones adicionales
Una vez configurada la infraestructura de proveedores de recursos personalizados, puede implementar fácilmente más asociaciones. No es necesario que el grupo de recursos para las asociaciones adicionales sea el mismo que el grupo de recursos en el que ha implementado la infraestructura de proveedores de recursos personalizados. Para crear una asociación, debe tener permisos de Microsoft.CustomProviders/resourceproviders/write en el identificador del proveedor de recursos personalizado especificado.
Vaya al recurso del proveedor de recursos personalizado Microsoft.CustomProviders/resourceProviders en el grupo de recursos de la implementación anterior. Tiene que activar la casilla Mostrar tipos ocultos:
Copie la propiedad Id. de recurso del proveedor de recursos personalizado.
Busque plantillasen en Todos los servicios o mediante el cuadro de búsqueda principal:
Seleccione la plantilla creada anteriormente y, luego, seleccione Implementar:
Escriba la configuración de los campos obligatorios y, a continuación, seleccione la suscripción y otro grupo de recursos. Para la opción Id. de proveedor de recursos personalizado, escriba el identificador de recurso que copió del proveedor de recursos personalizado que implementó anteriormente.
Vaya a la implementación y espere a que finalice. Ahora debería implementar solo el nuevo recurso de asociaciones:
Puede volver al Historial de ejecuciones de la aplicación lógica y ver que se hizo otra llamada a la aplicación lógica. Puede actualizar la aplicación lógica para aumentar la funcionalidad adicional de cada asociación creada.
Pasos siguientes
En este artículo, ha implementado en Azure un proveedor de recursos personalizado a Azure, que amplía la API de Azure Resource Manager con el tipo de recursos Microsoft.CustomProviders/associations. Para seguir aprendiendo sobre los proveedores de recursos personalizados, consulte: