Přidání vlastních akcí do rozhraní Azure REST API

Tento článek projde požadavky a osvědčené postupy pro vytváření koncových bodů vlastního poskytovatele prostředků Azure, které implementují vlastní akce. Pokud nejste obeznámeni s vlastními poskytovateli prostředků Azure, projděte si přehled vlastních poskytovatelů prostředků.

Definování koncového bodu akce

Koncový bod je adresa URL, která odkazuje na službu, která implementuje podkladový kontrakt mezi ní a Azure. Koncový bod je definovaný ve vlastním poskytovateli prostředků a může to být libovolná veřejně přístupná adresa URL. V následující ukázce je akce s názvem myCustomAction implementovaná nástrojem endpointURL.

Ukázkový zdroj ResourceProvider:

{
  "properties": {
    "actions": [
      {
        "name": "myCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus",
  "type": "Microsoft.CustomProviders/resourceProviders",
  "id": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
  "name": "{resourceProviderName}"
}

Vytvoření koncového bodu akce

Koncový bod, který implementuje akci, musí zpracovat požadavek a odpověď pro nové rozhraní API v Azure. Když se vytvoří vlastní poskytovatel prostředků s akcí , vygeneruje v Azure novou sadu rozhraní API. V takovém případě akce vygeneruje nové rozhraní API pro akce Azure pro POST volání:

/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

Příchozí požadavek rozhraní Azure API:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction?api-version=2018-09-01-preview
Authorization: Bearer eyJ0e...
Content-Type: application/json

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Tento požadavek se pak předá koncovému bodu ve formátu :

POST https://{endpointURL}/?api-version=2018-09-01-preview
Content-Type: application/json
X-MS-CustomProviders-RequestPath: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Podobně se odpověď z koncového bodu přepošla zpět zákazníkovi. Odpověď z koncového bodu by měla vrátit:

  • Platný dokument objektu JSON. Všechna pole a řetězce by měly být vnořené pod objektem nahoře.
  • Hlavička Content-Type by měla být nastavená na application/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Odpověď poskytovatele vlastních prostředků Azure:

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

{
    "myProperty1": "myPropertyValue1",
    "myProperty2": {
        "myProperty3" : "myPropertyValue3"
    }
}

Volání vlastní akce

Existují dva hlavní způsoby volání vlastní akce z vlastního poskytovatele prostředků:

  • Azure CLI
  • Šablony Azure Resource Manageru

Azure CLI

az resource invoke-action --action {actionName} \
                          --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
                          --request-body \
                            '{
                                "myProperty1": "myPropertyValue1",
                                "myProperty2": {
                                    "myProperty3": "myPropertyValue3"
                                }
                            }'
Parametr Povinné Popis
action Ano Název akce definované v ResourceProvider.
Id Ano ID prostředku ResourceProvider.
text požadavku Ne Text požadavku, který se odešle do koncového bodu.

Šablona Azure Resource Manageru

Poznámka

Akce mají v šablonách Azure Resource Manager omezenou podporu. Aby bylo možné akci volat uvnitř šablony, musí v názvu obsahovat předponu list .

Sample ResourceProvider with List Action:Sample ResourceProvider with List Action:

{
  "properties": {
    "actions": [
      {
        "name": "listMyCustomAction",
        "routingType": "Proxy",
        "endpoint": "https://{endpointURL}/"
      }
    ]
  },
  "location": "eastus"
}

Ukázková šablona Azure Resource Manager:

{
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "variables": {
        "resourceIdentifier": "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}",
        "apiVersion": "2018-09-01-preview",
        "functionValues": {
            "myProperty1": "myPropertyValue1",
            "myProperty2": {
                "myProperty3": "myPropertyValue3"
            }
        }
    },
    "resources": [],
    "outputs": {
        "myCustomActionOutput": {
            "type": "object",
            "value": "[listMyCustomAction(variables('resourceIdentifier'), variables('apiVersion'), variables('functionValues'))]"
        }
    }
}
Parametr Povinné Popis
resourceIdentifier Ano ID prostředku ResourceProvider.
apiVersion Ano Verze rozhraní API modulu runtime prostředků. Vždy by to mělo být 2018-09-01-preview.
hodnoty funkce Ne Text požadavku, který se odešle do koncového bodu.

Další kroky