Freigeben über


Erweitern von Ressourcen mit benutzerdefinierten Ressourcenanbietern

In diesem Tutorial stellen Sie einen benutzerdefinierten Ressourcenanbieter für Azure bereit, der die Azure Resource Manager-API um den Ressourcentyp „Microsoft.CustomProviders/associations“ erweitert. In diesem Tutorial wird gezeigt, wie Sie bestehende Ressourcen, die sich außerhalb der Ressourcengruppe befinden, in der sich die benutzerdefinierte Ressourcenanbieterinstanz befindet, erweitern können. In diesem Tutorial wird der benutzerdefinierte Ressourcenanbieter von einer Azure-Logik-App unterstützt, aber Sie können jeden öffentlichen API-Endpunkt verwenden.

Voraussetzungen

Damit Sie dieses Tutorial durcharbeiten können, sollten Sie folgende Ressourcen überprüfen:

Erste Schritte für das Onboarding von Ressourcen

In diesem Tutorial gibt es zwei Komponenten, die bereitgestellt werden müssen: der benutzerdefinierte Ressourcenanbieter und die Zuordnung. Sie können zur Vereinfachung des Prozesses optional eine einzelne Vorlage verwenden, die beides bereitstellt.

Die Vorlage verwendet folgende Ressourcen:

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

Bereitstellen der Infrastruktur für benutzerdefinierte Ressourcenanbieter

Der erste Teil der Vorlage stellt die Infrastruktur des benutzerdefinierten Ressourcenanbieters bereit. Diese Infrastruktur definiert die Auswirkung der Zuordnungsressource. Wenn Sie mit benutzerdefinierten Ressourcenanbietern noch nicht vertraut sind, finden Sie weitere Informationen in der Übersicht über benutzerdefinierte Azure-Ressourcenanbieter.

Stellen wir die Infrastruktur des benutzerdefinierten Ressourcenanbieters bereit. Sie können die vorherige Vorlage entweder kopieren, speichern und bereitstellen oder mithilfe des Azure-Portals die Infrastruktur mitverfolgen und bereitstellen.

  1. Öffnen Sie das Azure-Portal.

  2. Suchen Sie in Alle Dienste nach Vorlagen, oder verwenden Sie das Hauptsuchfeld:

    Screenshot: Suchleiste im Azure-Portal mit Eingabe von „Vorlagen“ als Suchabfrage

  3. Wählen Sie im Bereich Vorlagen die Option Hinzufügen aus:

    Screenshot: Bereich „Vorlagen“ im Azure-Portal mit hervorgehobener Schaltfläche „Hinzufügen“

  4. Geben Sie unter Allgemein einen Namen und eine Beschreibung für die neue Vorlage ein:

    Screenshot: Abschnitt „Allgemein“ im Azure-Portal, wo ein Namen und eine Beschreibung für die neue Vorlage eingegeben wird

  5. Erstellen Sie die Resource Manager-Vorlage, indem Sie sie in die JSON-Vorlage aus dem Abschnitt „Erste Schritte für das Onboarding von Ressourcen“ in diesem Artikel kopieren:

    Screenshot: Azure-Portal, wo die JSON-Vorlage in den Bereich „ARM-Vorlage“ einfügt

  6. Wählen Sie Hinzufügen aus, um die Vorlage zu erstellen. Wenn die neue Vorlage nicht angezeigt wird, wählen Sie Aktualisieren aus.

  7. Wählen Sie die neu erstellte Vorlage und anschließend Bereitstellen aus:

    Screenshot: Azure-Portal mit der neu erstellten Vorlage und hervorgehobener Schaltfläche „Bereitstellen“

  8. Geben Sie die Einstellungen für die erforderlichen Felder ein, und wählen Sie dann das Abonnement und die Ressourcengruppe aus. Sie können das Feld für die ID des benutzerdefinierten Ressourcenanbieters leer lassen.

    Name der Einstellung Erforderlich? BESCHREIBUNG
    Standort Ja Der Standort für die Ressourcen in der Vorlage.
    Logik-App-Name Nein Der Name der Logik-App.
    Name des benutzerdefinierten Ressourcenanbieters Nein Der Name des benutzerdefinierten Ressourcenanbieters.
    ID des benutzerdefinierten Ressourcenanbieters Nein Ein vorhandener benutzerdefinierter Ressourcenanbieter, der die Zuordnungsressource unterstützt. Wenn Sie hier einen Wert angeben, werden die Logik-App und die benutzerdefinierte Ressourcenanbieterbereitstellung übersprungen.
    Zuordnungsname Nein Der Name der Zuordnungsressource.

    Beispielparameter:

    Screenshot: Azure-Portal mit den Eingabefeldern für Vorlagenparameter für die Bereitstellung eines benutzerdefinierten Ressourcenanbieters

  9. Wechseln Sie zur Bereitstellung, und warten Sie, bis sie abgeschlossen ist. Es sollte ein Screenshot angezeigt werden, der in etwa wie folgt aussieht. Die neue Zuordnungsressource sollte als Ausgabe angezeigt werden:

    Screenshot: Azure-Portal mit einer erfolgreichen Bereitstellung und der neuen Zuordnungsressource als Ausgabe

    Hier ist die Ressourcengruppe mit der Auswahl Ausgeblendete Typen anzeigen:

    Screenshot: Ressourcengruppe im Azure-Portal mit ausgewählter Option „Ausgeblendete Typen anzeigen“, die die Bereitstellung des benutzerdefinierten Ressourcenanbieters zeigt

  10. Untersuchen Sie die Registerkarte Ausführungsverlauf der Logik-App, um die Aufrufe für die Erstellung der Zuordnung anzuzeigen:

    Screenshot: Registerkarte „Ausführungsverlauf“ der Logik-App im Azure-Portal mit den Aufrufen zum Erstellen der Zuordnung

Bereitstellen zusätzlicher Zuordnungen

Nachdem Sie die Infrastruktur des benutzerdefinierten Ressourcenanbieters eingerichtet haben, können Sie problemlos weitere Zuordnungen bereitstellen. Die Ressourcengruppe für zusätzliche Zuordnungen muss nicht mit der Ressourcengruppe übereinstimmen, in der Sie die Infrastruktur des benutzerdefinierten Ressourcenanbieters bereitgestellt haben. Um eine Zuordnung zu erstellen, benötigen Sie die Berechtigungen „Microsoft.CustomProviders/resourceproviders/write“ für die angegebene ID des benutzerdefinierten Ressourcenanbieters.

  1. Wechseln Sie zur Ressource Microsoft.CustomProviders/resourceProviders des benutzerdefinierten Ressourcenanbieters in der Ressourcengruppe der vorherigen Bereitstellung. Sie müssen das Kontrollkästchen Ausgeblendete Typen anzeigen aktivieren:

    Screenshot: Azure-Portal mit dem benutzerdefinierten Ressourcenanbieter in der Ressourcengruppe und ausgewählter Option „Ausgeblendete Typen anzeigen“

  2. Kopieren Sie die Ressourcen-ID-Eigenschaft des benutzerdefinierten Ressourcenanbieters.

  3. Suchen Sie in Alle Dienste nach Vorlagen, oder verwenden Sie das Hauptsuchfeld:

    Screenshot: Suchleiste im Azure-Portal mit Eingabe von „Vorlagen“ als Suchabfrage

  4. Wählen Sie die zuvor erstellte Vorlage und anschließend Bereitstellen aus:

    Screenshot: Azure-Portal mit der zuvor erstellten Vorlage und hervorgehobener Schaltfläche „Bereitstellen“

  5. Geben Sie die Einstellungen für die erforderlichen Felder ein, und wählen Sie dann das Abonnement und eine andere Ressourcengruppe aus. Geben Sie für die Einstellung für die ID des benutzerdefinierten Ressourcenanbieters die Ressourcen-ID ein, die Sie von dem benutzerdefinierten und zuvor bereitgestellten Ressourcenanbieter kopiert haben.

  6. Wechseln Sie zur Bereitstellung, und warten Sie, bis sie abgeschlossen ist. Es sollte jetzt nur noch die neue Zuordnungsressource bereitgestellt werden:

    Screenshot: Azure-Portal mit erfolgreicher Bereitstellung der neuen Zuordnungsressource

Sie können zum Ausführungsverlauf der Logik-App zurückkehren und werden feststellen, dass ein weiterer Aufruf an die Logik-App erfolgt ist. Sie können die Logik-App aktualisieren, um zusätzliche Funktionen für jede erstellte Zuordnung zu erweitern.

Nächste Schritte

In diesem Artikel haben Sie einen benutzerdefinierten Ressourcenanbieter für Azure bereitgestellt, der die Azure Resource Manager-API um den Ressourcentyp „Microsoft.CustomProviders/associations“ erweitert. Weitere Informationen zu benutzerdefinierten Ressourcenanbietern finden Sie unter: