Condividi tramite


Estendere le risorse con provider di risorse personalizzati

In questa esercitazione viene distribuito in Azure un provider di risorse personalizzato che estende l'API Azure Resource Manager con il tipo di risorsa Microsoft. CustomProviders/associations. L'esercitazione illustra come estendere le risorse esistenti esterne al gruppo di risorse in cui si trova l'istanza del provider di risorse personalizzato. In questa esercitazione il provider di risorse personalizzato è fornito da un'app per la logica di Azure, ma è possibile usare qualsiasi endpoint API pubblico.

Prerequisiti

Per completare questa esercitazione, accertarsi di esaminare quanto segue:

Introduzione all'onboarding delle risorse

In questa esercitazione sono disponibili due parti che devono essere distribuite: il provider di risorse personalizzato e l'associazione. Per semplificare il processo, è possibile usare un unico modello che distribuisce entrambi gli elementi.

Il modello userà queste risorse:

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

Distribuire l'infrastruttura del provider di risorse personalizzata

La prima parte del modello distribuisce l'infrastruttura del provider personalizzata. Questa infrastruttura definisce l'effetto della risorsa delle associazioni. Se non si ha familiarità con i provider di risorse personalizzati, vedere Panoramica dei provider di risorse personalizzati di Azure.

Distribuire l'infrastruttura del provider personalizzata. Copiare, salvare e distribuire il modello precedente oppure proseguire e distribuire l'infrastruttura usando il portale di Azure.

  1. Vai al portale di Azure.

  2. Cercare i modelli in Tutti i servizi o usando la casella di ricerca principale:

    Screenshot of the search bar in Azure portal with 'templates' entered as the search query.

  3. Selezionare Aggiungi nel riquadro Modelli:

    Screenshot of the Templates pane in Azure portal with the Add button highlighted.

  4. In Generale immettere un Nome e una Descrizione per il nuovo modello:

    Screenshot of the General section in Azure portal where the user enters a Name and Description for the new template.

  5. Creare il modello di Resource Manager copiando nel modello JSON dalla sezione "Introduzione all'onboarding delle risorse" di questo articolo:

    Screenshot of the Azure portal where the user pastes the JSON template into the ARM Template section.

  6. Selezionare Aggiungi per creare il modello. Se il nuovo modello non viene visualizzato, selezionare Aggiorna.

  7. Selezionare il modello appena creato, quindi selezionare Distribuisci:

    Screenshot of the Azure portal showing the newly created template with the Deploy button highlighted.

  8. Immettere le impostazioni per i campi obbligatori e quindi selezionare la sottoscrizione e il gruppo di risorse. È possibile lasciare vuota la casella Custom Resource Provider Id (ID provider di risorse personalizzato).

    Nome impostazione Obbligatorio? Descrizione
    Ubicazione Posizione delle risorse nel modello.
    Nome dell'app per la logica No Nome dell'app per la logica.
    Custom Resource Provider Name (Nome provider di risorse personalizzato) No Nome del provider di risorse personalizzato.
    Custom Resource Provider Id (ID provider di risorse personalizzato) No Provider di risorse personalizzato esistente che supporta la risorsa di associazione. Se si specifica un valore, l'app per la logica e la distribuzione del provider di risorse personalizzato verranno ignorate.
    Nome associazione No Nome della risorsa di associazione.

    Parametri di esempio:

    Screenshot of the Azure portal displaying the template parameters input fields for the custom resource provider deployment.

  9. Passare alla distribuzione e attendere il completamento. Verrà visualizzata una schermata simile allo screenshot seguente. Verrà visualizzata la nuova risorsa di associazione come output:

    Screenshot of the Azure portal showing a successful deployment with the new association resource as an output.

    Di seguito è riportato il gruppo di risorse con l'opzione Mostra tipi nascosti selezionata:

    Screenshot of the resource group in Azure portal with Show hidden types selected, displaying the custom resource provider deployment.

  10. Esplorare la scheda Cronologia esecuzioni dell'app per la logica per visualizzare le chiamate per l'associazione CREATE:

    Screenshot of the Logic app Runs history tab in Azure portal showing the calls for the association create.

Distribuire associazioni aggiuntive

Dopo aver configurato l'infrastruttura del provider di risorse personalizzata, è possibile distribuire facilmente altre associazioni. Il gruppo di risorse per le associazioni aggiuntive non deve necessariamente essere lo stesso gruppo di risorse in cui è stata distribuita l'infrastruttura del provider di risorse personalizzata. Per creare un'associazione, è necessario avere le autorizzazioni Microsoft.CustomProviders/resourceproviders/write per l'ID del provider di risorse personalizzato specificato.

  1. Passare alla risorsa Microsoft.CustomProviders/resourceProviders del provider di risorse personalizzato nel gruppo di risorse della distribuzione precedente. È necessario selezionare la casella di controllo Mostra tipi nascosti:

    Screenshot of the Azure portal displaying the custom resource provider resource in the resource group with Show hidden types selected.

  2. Copiare la proprietà ID risorsa del provider di risorse personalizzato.

  3. Cercare i modelli in Tutti i servizi o usando la casella di ricerca principale:

    Screenshot of the search bar in Azure portal with 'templates' entered as the search query.

  4. Selezionare il modello creato in precedenza, quindi selezionare Distribuisci:

    Screenshot of the Azure portal showing the previously created template with the Deploy button highlighted.

  5. Immettere le impostazioni per i campi obbligatori e quindi selezionare la sottoscrizione e un gruppo di risorse diverso. Per l'impostazione Custom Resource Provider Id (ID provider di risorse personalizzato), immettere l'ID risorsa copiato dal provider di risorse personalizzato distribuito in precedenza.

  6. Passare alla distribuzione e attendere il completamento. A questo punto verrà distribuita solo la nuova risorsa associations:

    Screenshot of the Azure portal displaying the successful deployment of the new associations resource.

È possibile tornare alla Cronologia di esecuzione dell'app per la logica e verificare che sia stata effettuata un'altra chiamata all'app per la logica. È possibile aggiornare l'app per la logica per aumentare la funzionalità aggiuntiva per ogni associazione creata.

Passaggi successivi

In questa esercitazione è stato distribuito un provider di risorse personalizzato in Azure che estende l'API di Azure Resource Manager con il tipo di risorsa Microsoft.CustomProviders/associates. Per ulteriori informazioni sui provider di risorse personalizzati, vedere: