Sdílet prostřednictvím


Rozšíření prostředků o vlastní poskytovatele prostředků

V tomto kurzu nasadíte do Azure vlastního poskytovatele prostředků, který rozšiřuje rozhraní API azure Resource Manager o typ prostředku Microsoft.CustomProviders/associations. V tomto kurzu se dozvíte, jak rozšířit existující prostředky, které jsou mimo skupinu prostředků, ve které se nachází instance vlastního poskytovatele prostředků. V tomto kurzu používá vlastní poskytovatel prostředků technologii aplikace logiky Azure, ale můžete použít libovolný veřejný koncový bod rozhraní API.

Požadavky

Abyste mohli absolvovat tento kurz, nezapomeňte si projít následující:

Začínáme s onboardingem prostředků

V tomto kurzu je potřeba nasadit dvě části: vlastního poskytovatele prostředků a přidružení. Pokud chcete tento proces zjednodušit, můžete volitelně použít jednu šablonu, která nasadí obojí.

Šablona bude používat tyto prostředky:

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

Nasazení infrastruktury vlastního poskytovatele prostředků

První část šablony nasadí vlastní infrastrukturu poskytovatele prostředků. Tato infrastruktura definuje účinek prostředku přidružení. Pokud nejste obeznámeni s vlastními poskytovateli prostředků, projděte si přehled vlastních poskytovatelů prostředků Azure.

Pojďme nasadit vlastní infrastrukturu poskytovatele prostředků. Buď zkopírujte, uložte a nasaďte předchozí šablonu, nebo postupujte podle pokynů a nasaďte infrastrukturu pomocí Azure Portal.

  1. Přejděte na Azure Portal.

  2. Vyhledejte šablony ve všech službách nebo pomocí hlavního vyhledávacího pole:

    Snímek obrazovky s panelem hledání v Azure Portal se zadaným výrazem templates jako vyhledávacím dotazem

  3. V podokně Šablony vyberte Přidat:

    Snímek obrazovky s podoknem Šablony v Azure Portal se zvýrazněným tlačítkem Přidat

  4. V části Obecné zadejte Název a Popis nové šablony:

    Snímek obrazovky s oddílem Obecné v Azure Portal, kam uživatel zadá Název a Popis nové šablony

  5. Vytvořte šablonu Resource Manager tak, že zkopírujete šablonu JSON z části Začínáme s onboardingem prostředků v tomto článku:

    Snímek obrazovky s Azure Portal, kam uživatel vkládá šablonu JSON do oddílu Šablona ARM

  6. Vyberte Přidat a vytvořte šablonu. Pokud se nová šablona nezobrazí, vyberte Aktualizovat.

  7. Vyberte nově vytvořenou šablonu a pak vyberte Nasadit:

    Snímek obrazovky s Azure Portal zobrazující nově vytvořenou šablonu se zvýrazněným tlačítkem Nasadit

  8. Zadejte nastavení pro požadovaná pole a pak vyberte předplatné a skupinu prostředků. Pole ID vlastního poskytovatele prostředků můžete nechat prázdné.

    Název nastavení Povinné? Description
    Umístění Ano Umístění prostředků v šabloně.
    Název aplikace logiky No Název aplikace logiky.
    Název vlastního poskytovatele prostředků No Název vlastního poskytovatele prostředků.
    ID vlastního poskytovatele prostředků No Existující vlastní poskytovatel prostředků, který podporuje prostředek přidružení. Pokud zadáte hodnotu, přeskočí se nasazení aplikace logiky a vlastního poskytovatele prostředků.
    Název přidružení No Název prostředku přidružení.

    Ukázkové parametry:

    Snímek obrazovky s Azure Portal zobrazující vstupní pole parametrů šablony pro nasazení vlastního poskytovatele prostředků

  9. Přejděte k nasazení a počkejte, až se dokončí. Měli byste vidět něco podobného jako na následujícím snímku obrazovky. Jako výstup by se měl zobrazit nový prostředek přidružení:

    Snímek obrazovky s Azure Portal znázorňující úspěšné nasazení s novým prostředkem přidružení jako výstupem

    Tady je skupina prostředků s vybranou možností Zobrazit skryté typy :

    Snímek obrazovky se skupinou prostředků v Azure Portal s vybranou možností Zobrazit skryté typy zobrazující nasazení vlastního poskytovatele prostředků

  10. Prozkoumejte kartu Historie spuštění aplikace logiky a podívejte se na volání pro vytvoření přidružení:

    Snímek obrazovky s kartou Historie spuštění aplikace logiky v Azure Portal zobrazující volání pro vytvoření přidružení

Nasazení dalších přidružení

Po nastavení infrastruktury vlastního poskytovatele prostředků můžete snadno nasadit více přidružení. Skupina prostředků pro další přidružení nemusí být stejná jako skupina prostředků, do které jste nasadili vlastní infrastrukturu poskytovatele prostředků. Pokud chcete vytvořit přidružení, musíte mít oprávnění Microsoft.CustomProviders/resourceproviders/write pro zadané ID vlastního poskytovatele prostředků.

  1. Přejděte k prostředku vlastního poskytovatele prostředků Microsoft.CustomProviders/resourceProviders ve skupině prostředků předchozího nasazení. Musíte zaškrtnout políčko Zobrazit skryté typy :

    Snímek obrazovky s Azure Portal zobrazující prostředek vlastního poskytovatele prostředků ve skupině prostředků s vybranou možností Zobrazit skryté typy

  2. Zkopírujte vlastnost ID prostředku vlastního poskytovatele prostředků.

  3. Vyhledejte šablony ve všech službách nebo pomocí hlavního vyhledávacího pole:

    Snímek obrazovky s panelem hledání v Azure Portal se zadaným výrazem templates jako vyhledávacím dotazem

  4. Vyberte dříve vytvořenou šablonu a pak vyberte Nasadit:

    Snímek obrazovky s Azure Portal znázorňující dříve vytvořenou šablonu se zvýrazněným tlačítkem Nasadit

  5. Zadejte nastavení požadovaných polí a pak vyberte předplatné a jinou skupinu prostředků. Pro nastavení ID vlastního poskytovatele prostředků zadejte ID prostředku, které jste zkopírovali z vlastního poskytovatele prostředků, kterého jste nasadili dříve.

  6. Přejděte k nasazení a počkejte, až se dokončí. Teď by měl nasadit jenom nový prostředek přidružení:

    Snímek obrazovky s Azure Portal zobrazující úspěšné nasazení nového prostředku přidružení

Můžete se vrátit do historie spuštění aplikace logiky a podívat se, že bylo provedeno další volání aplikace logiky. Aplikaci logiky můžete aktualizovat a rozšířit tak další funkce pro každé vytvořené přidružení.

Další kroky

V tomto článku jste do Azure nasadili vlastního poskytovatele prostředků, který rozšiřuje rozhraní API azure Resource Manager o typ prostředku Microsoft.CustomProviders/associates. Další informace o poskytovateli vlastních prostředků najdete v tématech: