Utöka resurser med anpassade resursprovidrar
I den här självstudien distribuerar du en anpassad resursprovider till Azure som utökar Azure Resource Manager-API:et med resurstypen Microsoft.CustomProviders/associations. Självstudien visar hur du utökar befintliga resurser som ligger utanför resursgruppen där den anpassade resursproviderinstansen finns. I den här självstudien drivs den anpassade resursprovidern av en Azure-logikapp, men du kan använda valfri offentlig API-slutpunkt.
Kontrollera följande för att slutföra den här självstudien:
- Funktionerna i Anpassade Resursprovidrar i Azure.
- Grundläggande information om resursregistrering med anpassade resursproviders.
I den här självstudien finns det två delar som måste distribueras: den anpassade resursprovidern och associationen. Om du vill göra processen enklare kan du använda en enda mall som distribuerar båda.
Mallen använder följande resurser:
- 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')]"
}
}
}
Den första delen av mallen distribuerar infrastrukturen för den anpassade resursprovidern. Den här infrastrukturen definierar effekten av associationsresursen. Om du inte är bekant med anpassade resursprovidrar kan du läsa Översikt över anpassade resursproviders i Azure.
Nu ska vi distribuera infrastrukturen för den anpassade resursprovidern. Kopiera, spara och distribuera föregående mall eller följ med och distribuera infrastrukturen med hjälp av Azure Portal.
Gå till Azure-portalen.
Sök efter mallar i Alla tjänster eller med hjälp av huvudsökrutan:
Välj Lägg till i fönstret Mallar :
Under Allmänt anger du namn ochbeskrivning för den nya mallen:
Skapa Resource Manager-mallen genom att kopiera I JSON-mallen från avsnittet "Kom igång med resursregistrering" i den här artikeln:
Välj Lägg till för att skapa mallen. Om den nya mallen inte visas väljer du Uppdatera.
Välj den nyligen skapade mallen och välj sedan Distribuera:
Ange inställningarna för de obligatoriska fälten och välj sedan prenumerationen och resursgruppen. Du kan lämna rutan Anpassad resursprovider-ID tom.
Inställningsnamn Obligatoriskt? Description Plats Ja Platsen för resurserna i mallen. Namn på logikapp Inga Namnet på logikappen. Namn på anpassad resursprovider Inga Namnet på den anpassade resursprovidern. Anpassat resursprovider-ID Inga En befintlig anpassad resursprovider som stöder associationsresursen. Om du anger ett värde här hoppas distributionen av logikappen och den anpassade resursprovidern över. Associationsnamn Inga Namnet på associationsresursen. Exempelparametrar:
Gå till distributionen och vänta tills den har slutförts. Du bör se något som liknar följande skärmbild. Du bör se den nya associationsresursen som utdata:
Här är resursgruppen med Visa dolda typer valt:
Utforska logikappens historikflik för att se anropen för associationen skapa:
När du har konfigurerat infrastrukturen för den anpassade resursprovidern kan du enkelt distribuera fler associationer. Resursgruppen för ytterligare associationer behöver inte vara samma som resursgruppen där du distribuerade infrastrukturen för den anpassade resursprovidern. Om du vill skapa en association måste du ha behörigheten Microsoft.CustomProviders/resourceproviders/write för det angivna anpassade resursprovider-ID:t.
Gå till resursprovidern Microsoft.CustomProviders/resourceProviders i resursgruppen för föregående distribution. Du måste markera kryssrutan Visa dolda typer :
Kopiera resurs-ID-egenskapen för den anpassade resursprovidern.
Sök efter mallar i Alla tjänster eller med hjälp av huvudsökrutan:
Välj den tidigare skapade mallen och välj sedan Distribuera:
Ange inställningarna för de obligatoriska fälten och välj sedan prenumerationen och en annan resursgrupp. För inställningen Anpassad resursprovider-ID anger du det resurs-ID som du kopierade från den anpassade resursprovidern som du distribuerade tidigare.
Gå till distributionen och vänta tills den har slutförts. Nu bör den endast distribuera den nya associationsresursen:
Du kan gå tillbaka till logikappens körningshistorik och se att ett annat anrop gjordes till logikappen. Du kan uppdatera logikappen för att utöka ytterligare funktioner för varje skapad association.
I den här artikeln har du distribuerat en anpassad resursprovider till Azure som utökar Azure Resource Manager API med resurstypen Microsoft.CustomProviders/associates. Om du vill lära dig mer om anpassade resursprovidrar kan du läsa: