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:
- Funzionalità dei provider di risorse personalizzati di Azure.
- Informazioni di base sull’onboarding delle risorse con provider di risorse personalizzati.
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:
- 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')]"
}
}
}
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.
Vai al portale di Azure.
Cercare i modelli in Tutti i servizi o usando la casella di ricerca principale:
Selezionare Aggiungi nel riquadro Modelli:
In Generale immettere un Nome e una Descrizione per il nuovo modello:
Creare il modello di Resource Manager copiando nel modello JSON dalla sezione "Introduzione all'onboarding delle risorse" di questo articolo:
Selezionare Aggiungi per creare il modello. Se il nuovo modello non viene visualizzato, selezionare Aggiorna.
Selezionare il modello appena creato, quindi selezionare Distribuisci:
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 Sì 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:
Passare alla distribuzione e attendere il completamento. Verrà visualizzata una schermata simile allo screenshot seguente. Verrà visualizzata la nuova risorsa di associazione come output:
Di seguito è riportato il gruppo di risorse con l'opzione Mostra tipi nascosti selezionata:
Esplorare la scheda Cronologia esecuzioni dell'app per la logica per visualizzare le chiamate per l'associazione 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.
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:
Copiare la proprietà ID risorsa del provider di risorse personalizzato.
Cercare i modelli in Tutti i servizi o usando la casella di ricerca principale:
Selezionare il modello creato in precedenza, quindi selezionare Distribuisci:
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.
Passare alla distribuzione e attendere il completamento. A questo punto verrà distribuita solo la nuova risorsa associations:
È 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: