Compartir a través de


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:

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:

{
    "$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.

  1. Vaya a Azure Portal.

  2. Busque plantillasen en Todos los servicios o mediante el cuadro de búsqueda principal:

    Captura de pantalla de la barra de búsqueda en el Azure Portal con

  3. Seleccione Agregar en el panel Plantillas:

    Captura de pantalla del panel Plantillas del Azure Portal con el botón Agregar resaltado.

  4. En General, escriba un Nombre y una Descripción para la nueva plantilla:

    Captura de pantalla de la sección General del Azure Portal donde el usuario introduce un Nombre y una Descripción para la nueva plantilla.

  5. 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:

    Captura de pantalla del Azure Portal donde el usuario pega la plantilla JSON en la sección Plantilla ARM.

  6. Seleccione Agregar para crear la plantilla. Si la nueva plantilla no aparece, seleccione Actualizar.

  7. Seleccione la plantilla recién creada y, luego, seleccione Implementar:

    Captura de pantalla del Azure Portal mostrando la plantilla recién creada con el botón Implementar resaltado.

  8. 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 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:

    Captura de pantalla del Azure Portal que muestra los campos de entrada de parámetros de plantilla para la implementación del proveedor de recursos personalizado.

  9. 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:

    Captura de pantalla del Azure Portal que muestra una implementación correcta con el nuevo recurso de asociación como salida.

    Aquí está el grupo de recursos, con Mostrar tipos ocultos seleccionado:

    Captura de pantalla del grupo de recursos en el Azure Portal con la opción Mostrar tipos ocultos seleccionada, mostrando la implementación del proveedor de recursos personalizado.

  10. 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:

    Captura de pantalla de la pestaña Historial de ejecuciones de la aplicación Logic en el Azure Portal que muestra las llamadas para la asociación crear.

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.

  1. 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:

    Captura de pantalla del Azure Portal mostrando el recurso proveedor de recursos personalizado en el grupo de recursos con la opción Mostrar tipos ocultos seleccionada.

  2. Copie la propiedad Id. de recurso del proveedor de recursos personalizado.

  3. Busque plantillasen en Todos los servicios o mediante el cuadro de búsqueda principal:

    Captura de pantalla de la barra de búsqueda en el Azure Portal con

  4. Seleccione la plantilla creada anteriormente y, luego, seleccione Implementar:

    Captura de pantalla del Azure Portal mostrando la plantilla creada previamente con el botón Implementar resaltado.

  5. 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.

  6. Vaya a la implementación y espere a que finalice. Ahora debería implementar solo el nuevo recurso de asociaciones:

    Captura de pantalla del Azure Portal que muestra la implementación correcta del 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: