Étendre des ressources avec des fournisseurs de ressources personnalisés

Ce didacticiel explique comment déployer dans Azure un fournisseur de ressources personnalisé qui étend l’API Azure Resource Manager avec le type de ressource Microsoft. CustomProviders/associations. Ce tutoriel montre comment étendre des ressources existantes qui se trouvent en dehors du groupe de ressources où se trouve l’instance du fournisseur de ressources personnalisé. Dans ce didacticiel, le fournisseur de ressources personnalisé est alimenté par une application logique Azure, mais vous pouvez utiliser n’importe quel point de terminaison d’API public.

Prérequis

Pour suivre ce tutoriel, vérifiez les éléments suivants :

Prise en main de l’intégration de ressources

Dans ce tutoriel, deux éléments doivent être déployés : le fournisseur de ressources personnalisé et l’association. Pour faciliter le processus, vous pouvez utiliser un modèle unique qui déploie les deux.

Le modèle utilisera les ressources suivantes :

{
    "$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')]"
        }
    }
}

Déployer l’infrastructure du fournisseur de ressources personnalisé

La première partie du modèle déploie l’infrastructure du fournisseur de ressources personnalisé. Cette infrastructure définit l’effet de la ressource associations. Pour plus d’informations sur les fournisseurs de ressources personnalisées, consultez la Vue d’ensemble des fournisseurs de ressources personnalisés.

Déployons l’infrastructure du fournisseur de ressources personnalisé. Copiez, enregistrez et déployez le modèle précédent, ou suivez et la procédure de déploiement via le portail Azure.

  1. Accédez au portail Azure.

  2. Recherchez Modèles dans Tous les services ou en utilisant la zone de recherche principale :

    Capture d’écran de la barre de recherche dans le Portail Azure avec le terme « modèles » saisi dans la requête de recherche.

  3. Dans le volet Modèles, sélectionnez Ajouter :

    Capture d’écran du volet Modèles dans le Portail Azure avec le bouton Ajouter mis en surbrillance.

  4. Sous Général, entrez un Nom et une Description pour le nouveau modèle :

    Capture d’écran de la section Général dans le Portail Azure dans laquelle l’utilisateur saisit un Nom et une Description pour le nouveau modèle.

  5. Créez le modèle Resource Manager en copiant dans le modèle JSON à partir de la section « Prise en main de l’intégration de ressources » de cet article :

    Capture d’écran du Portail Azure dans lequel l’utilisateur colle le modèle JSON dans la section du modèle ARM.

  6. Sélectionnez Ajouter pour créer le modèle. Si le nouveau modèle n’apparaît pas, sélectionnez Actualiser.

  7. Sélectionnez le modèle nouvellement créé, puis choisissez Déployer :

    Capture d’écran du Portail Azure montrant le modèle nouvellement créé avec le bouton Déployer mis en surbrillance.

  8. Entrez les paramètres des champs obligatoires, puis sélectionnez l’abonnement et le groupe de ressources. Vous pouvez laisser la zone ID du fournisseur de ressources personnalisé vide.

    Nom du paramètre Requis ? Description
    Emplacement Oui Emplacement des ressources dans le modèle.
    Nom de l’application logique Non Nom de l’application logique.
    Nom du fournisseur de ressources personnalisé Non Nom du fournisseur de ressources personnalisé.
    ID du fournisseur de ressources personnalisé Non Fournisseur de ressources personnalisé prenant en charge la ressource d’association. Si vous spécifiez une valeur ici, le déploiement de l’application logique et du fournisseur de ressources personnalisé sont ignorés.
    Nom de l’association Non Nom de la ressource d’association.

    Exemples de paramètres :

    Capture d’écran du Portail Azure affichant les champs d’entrée des paramètres du modèle pour le déploiement personnalisé du fournisseur de ressources.

  9. Accédez au déploiement et attendez qu’il se termine. Un écran similaire à cette capture d’écran doit s’afficher. Vous devez voir la nouvelle ressource d’association comme sortie :

    Capture d’écran du Portail Azure montrant un déploiement réussi avec la ressource d’association en tant que sortie.

    Voici le groupe de ressources, avec l’option Afficher les types masqués sélectionnée :

    Capture d’écran du groupe de ressources dans le Portail Azure avec l’option Afficher les types masqués sélectionnée, montrant le déploiement personnalisé du fournisseur de ressources.

  10. Explorez l’onglet Historique des exécutions de l’application logique afin de voir les appels pour la création d’association :

    Capture d’écran de l’onglet Historique des exécutions de l’application logique dans le Portail Azure montrant les appels pour la création d’association.

Déployer des associations supplémentaires

Une fois l’infrastructure du fournisseur de ressources personnalisé configurée, vous pouvez facilement déployer davantage d’associations. Le groupe de ressources pour les associations supplémentaires n’a pas besoin d’être le même que le groupe de ressources dans lequel vous avez déployé l’infrastructure du fournisseur de ressources personnalisé. Pour créer une association, vous devez disposer d’autorisations Microsoft.CustomProviders/resourceproviders/write sur l’ID du fournisseur de ressources personnalisé spécifié.

  1. Accédez à la ressource Microsoft.CustomProviders/resourceProviders du fournisseur de ressources personnalisé dans le groupe de ressources du déploiement précédent. Vous devez activer la case à cocher Afficher les types masqués :

    Capture d’écran du Portail Azure affichant la ressource personnalisée du fournisseur de ressources dans le groupe de ressources avec l’option Afficher les types masqués sélectionnée.

  2. Copiez la propriété ID de ressource du fournisseur de ressources personnalisé.

  3. Recherchez Modèles dans Tous les services ou en utilisant la zone de recherche principale :

    Capture d’écran de la barre de recherche dans le Portail Azure avec le terme « modèles » saisi dans la requête de recherche.

  4. Sélectionnez le modèle créé précédemment, puis choisissez Déployer :

    Capture d’écran du Portail Azure montrant le modèle précédemment créé avec le bouton Déployer mis en surbrillance.

  5. Entrez les paramètres des champs obligatoires, puis sélectionnez l’abonnement et un autre groupe de ressources. Pour le paramètre ID du fournisseur de ressources personnalisé, entrez l’ID de ressource que vous avez copié à partir du fournisseur de ressources personnalisé que vous avez déployé précédemment.

  6. Accédez au déploiement et attendez qu’il se termine. Il doit maintenant déployer uniquement la nouvelle ressource associations :

    Capture d’écran du Portail Azure affichant le déploiement réussi d’une nouvelle ressource d’associations.

Vous pouvez revenir à l’Historique d’exécution de l’application logique, et voir qu’un autre appel a été adressé à l’application logique. Vous pouvez mettre à jour l’application logique pour augmenter les fonctionnalités supplémentaires de chaque association créée.

Étapes suivantes

Cet article explique comment déployer dans Azure un fournisseur de ressources personnalisé qui étend l’API Azure Resource Manager avec le type de ressource Microsoft. CustomProviders/associates. Pour continuer à découvrir les fournisseurs de ressources personnalisés, consultez :