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.

Förutsättningar

Kontrollera följande för att slutföra den här självstudien:

Kom igång med resursregistrering

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:

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

Distribuera infrastrukturen för den anpassade resursprovidern

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.

  1. Gå till Azure-portalen.

  2. Sök efter mallar i Alla tjänster eller med hjälp av huvudsökrutan:

    Skärmbild av sökfältet i Azure Portal med

  3. Välj Lägg till i fönstret Mallar :

    Skärmbild av fönstret Mallar i Azure Portal med knappen Lägg till markerad.

  4. Under Allmänt anger du namn ochbeskrivning för den nya mallen:

    Skärmbild av avsnittet Allmänt i Azure Portal där användaren anger ett namn och en beskrivning för den nya mallen.

  5. Skapa Resource Manager-mallen genom att kopiera I JSON-mallen från avsnittet "Kom igång med resursregistrering" i den här artikeln:

    Skärmbild av Azure Portal där användaren klistrar in JSON-mallen i avsnittet ARM-mall.

  6. Välj Lägg till för att skapa mallen. Om den nya mallen inte visas väljer du Uppdatera.

  7. Välj den nyligen skapade mallen och välj sedan Distribuera:

    Skärmbild av Azure Portal som visar den nyligen skapade mallen med knappen Distribuera markerad.

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

    Skärmbild av Azure Portal som visar mallparametrarnas indatafält för distributionen av den anpassade resursprovidern.

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

    Skärmbild av Azure Portal som visar en lyckad distribution med den nya associationsresursen som utdata.

    Här är resursgruppen med Visa dolda typer valt:

    Skärmbild av resursgruppen i Azure Portal med Visa dolda typer valt, som visar distributionen av den anpassade resursprovidern.

  10. Utforska logikappens historikflik för att se anropen för associationen skapa:

    Skärmbild av fliken Historik för logikappens körningar i Azure Portal som visar anropen för associationens skapande.

Distribuera ytterligare associationer

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.

  1. Gå till resursprovidern Microsoft.CustomProviders/resourceProviders i resursgruppen för föregående distribution. Du måste markera kryssrutan Visa dolda typer :

    Skärmbild av Azure Portal som visar resursen för den anpassade resursprovidern i resursgruppen med Visa dolda typer valt.

  2. Kopiera resurs-ID-egenskapen för den anpassade resursprovidern.

  3. Sök efter mallar i Alla tjänster eller med hjälp av huvudsökrutan:

    Skärmbild av sökfältet i Azure Portal med

  4. Välj den tidigare skapade mallen och välj sedan Distribuera:

    Skärmbild av Azure Portal som visar den tidigare skapade mallen med knappen Distribuera markerad.

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

  6. Gå till distributionen och vänta tills den har slutförts. Nu bör den endast distribuera den nya associationsresursen:

    Skärmbild av Azure Portal som visar distributionen av 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.

Nästa steg

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: