Rozszerzanie zasobów za pomocą niestandardowych dostawców zasobów

W tym samouczku wdrożysz niestandardowego dostawcę zasobów na platformie Azure, który rozszerza interfejs API usługi Azure Resource Manager przy użyciu typu zasobu Microsoft.CustomProviders/associations. W samouczku pokazano, jak rozszerzyć istniejące zasoby znajdujące się poza grupą zasobów, w której znajduje się wystąpienie niestandardowego dostawcy zasobów. W tym samouczku niestandardowy dostawca zasobów jest obsługiwany przez aplikację logiki platformy Azure, ale możesz użyć dowolnego publicznego punktu końcowego interfejsu API.

Wymagania wstępne

Aby ukończyć ten samouczek, zapoznaj się z następującymi artykułami:

Wprowadzenie do dołączania zasobów

W tym samouczku istnieją dwa elementy, które należy wdrożyć: niestandardowy dostawca zasobów i skojarzenie. Aby ułatwić proces, możesz opcjonalnie użyć pojedynczego szablonu, który wdraża oba te elementy.

Szablon będzie używać następujących zasobów:

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

Wdrażanie niestandardowej infrastruktury dostawcy zasobów

Pierwsza część szablonu wdraża niestandardową infrastrukturę dostawcy zasobów. Ta infrastruktura definiuje wpływ zasobu skojarzeń. Jeśli nie znasz niestandardowych dostawców zasobów, zobacz Omówienie niestandardowych dostawców zasobów platformy Azure.

Wdróżmy niestandardową infrastrukturę dostawcy zasobów. Skopiuj, zapisz i wdróż powyższy szablon lub postępuj zgodnie z instrukcjami i wdróż infrastrukturę przy użyciu Azure Portal.

  1. Przejdź do witryny Azure Portal.

  2. Wyszukaj szablony we wszystkich usługach lub przy użyciu głównego pola wyszukiwania:

    Zrzut ekranu przedstawiający pasek wyszukiwania w Azure Portal z ciągiem

  3. Wybierz pozycję Dodaj w okienku Szablony :

    Zrzut ekranu przedstawiający okienko Szablony w Azure Portal z wyróżnionym przyciskiem Dodaj.

  4. W obszarze Ogólne wprowadź nazwę i opis nowego szablonu:

    Zrzut ekranu przedstawiający sekcję Ogólne w Azure Portal, w której użytkownik wprowadza nazwę i opis nowego szablonu.

  5. Utwórz szablon Resource Manager, kopiując go w szablonie JSON z sekcji "Wprowadzenie do dołączania zasobów" w tym artykule:

    Zrzut ekranu przedstawiający Azure Portal, w którym użytkownik wkleja szablon JSON do sekcji Szablon usługi ARM.

  6. Wybierz pozycję Dodaj , aby utworzyć szablon. Jeśli nowy szablon nie zostanie wyświetlony, wybierz pozycję Odśwież.

  7. Wybierz nowo utworzony szablon, a następnie wybierz pozycję Wdróż:

    Zrzut ekranu przedstawiający Azure Portal przedstawiający nowo utworzony szablon z wyróżnionym przyciskiem Wdróż.

  8. Wprowadź ustawienia wymaganych pól, a następnie wybierz subskrypcję i grupę zasobów. Pole Identyfikator niestandardowego dostawcy zasobów można pozostawić puste.

    Nazwa ustawienia Wymagane? Opis
    Lokalizacja Tak Lokalizacja zasobów w szablonie.
    Nazwa aplikacji logiki Nie Nazwa aplikacji logiki.
    Nazwa niestandardowego dostawcy zasobów Nie Nazwa niestandardowego dostawcy zasobów.
    Identyfikator niestandardowego dostawcy zasobów Nie Istniejący niestandardowy dostawca zasobów obsługujący zasób skojarzenia. Jeśli określisz w tym miejscu wartość, aplikacja logiki i wdrożenie niestandardowego dostawcy zasobów zostaną pominięte.
    Nazwa skojarzenia Nie Nazwa zasobu skojarzenia.

    Przykładowe parametry:

    Zrzut ekranu przedstawiający Azure Portal z polami wejściowymi parametrów szablonu dla wdrożenia niestandardowego dostawcy zasobów.

  9. Przejdź do wdrożenia i poczekaj na zakończenie. Powinien zostać wyświetlony podobny do poniższego zrzutu ekranu. Nowy zasób skojarzenia powinien być widoczny jako dane wyjściowe:

    Zrzut ekranu przedstawiający Azure Portal pomyślne wdrożenie z nowym zasobem skojarzenia jako danymi wyjściowymi.

    Oto grupa zasobów z wybraną pozycją Pokaż ukryte typy :

    Zrzut ekranu przedstawiający grupę zasobów w Azure Portal z wybraną pozycją Pokaż ukryte typy z wyświetlonym wdrożeniem niestandardowego dostawcy zasobów.

  10. Zapoznaj się z kartą Historia przebiegów aplikacji logiki, aby wyświetlić wywołania tworzenia skojarzenia:

    Zrzut ekranu przedstawiający kartę Historia uruchomień aplikacji logiki w Azure Portal z wywołaniami tworzenia skojarzenia.

Wdrażanie dodatkowych skojarzeń

Po skonfigurowaniu niestandardowej infrastruktury dostawcy zasobów można łatwo wdrożyć więcej skojarzeń. Grupa zasobów dla dodatkowych skojarzeń nie musi być taka sama jak grupa zasobów, w której wdrożono niestandardową infrastrukturę dostawcy zasobów. Aby utworzyć skojarzenie, musisz mieć uprawnienia Microsoft.CustomProviders/resourceproviders/write dla określonego identyfikatora niestandardowego dostawcy zasobów.

  1. Przejdź do zasobu niestandardowego dostawcy zasobów Microsoft.CustomProviders/resourceProviders w grupie zasobów poprzedniego wdrożenia. Musisz zaznaczyć pole wyboru Pokaż ukryte typy :

    Zrzut ekranu przedstawiający Azure Portal wyświetlania zasobu niestandardowego dostawcy zasobów w grupie zasobów z wybraną funkcją Pokaż ukryte typy.

  2. Skopiuj właściwość Resource ID niestandardowego dostawcy zasobów.

  3. Wyszukaj szablony we wszystkich usługach lub przy użyciu głównego pola wyszukiwania:

    Zrzut ekranu przedstawiający pasek wyszukiwania w Azure Portal z ciągiem

  4. Wybierz wcześniej utworzony szablon, a następnie wybierz pozycję Wdróż:

    Zrzut ekranu przedstawiający Azure Portal przedstawiający wcześniej utworzony szablon z wyróżnionym przyciskiem Wdróż.

  5. Wprowadź ustawienia wymaganych pól, a następnie wybierz subskrypcję i inną grupę zasobów. Dla ustawienia Identyfikator niestandardowego dostawcy zasobów wprowadź identyfikator zasobu skopiowany z wdrożonego wcześniej dostawcy zasobów niestandardowych.

  6. Przejdź do wdrożenia i poczekaj na zakończenie. Powinien on teraz wdrażać tylko nowy zasób skojarzeń:

    Zrzut ekranu przedstawiający Azure Portal z pomyślnym wdrożeniem nowego zasobu skojarzeń.

Możesz wrócić do historii uruchamiania aplikacji logiki i zobaczyć, że do aplikacji logiki zostało wykonane kolejne wywołanie. Możesz zaktualizować aplikację logiki, aby rozszerzyć dodatkowe funkcje dla każdego utworzonego skojarzenia.

Następne kroki

W tym artykule wdrożono niestandardowego dostawcę zasobów na platformie Azure, który rozszerza interfejs API usługi Azure Resource Manager o typ zasobu Microsoft.CustomProviders/associates. Aby kontynuować poznawanie niestandardowych dostawców zasobów, zobacz: