Aangepaste acties toevoegen aan Azure REST API

In dit artikel worden de vereisten en aanbevolen procedures beschreven voor het maken van eindpunten van de Azure Custom Resource Provider waarmee aangepaste acties worden geïmplementeerd. Als u niet bekend bent met aangepaste resourceproviders van Azure, raadpleegt u het overzicht van aangepaste resourceproviders.

Een actie-eindpunt definiëren

Een eindpunt is een URL die verwijst naar een service, waarmee het onderliggende contract tussen het eindpunt en Azure wordt geïmplementeerd. Het eindpunt wordt gedefinieerd in de aangepaste resourceprovider en kan elke openbaar toegankelijke URL zijn. Het onderstaande voorbeeld bevat een actie met de naam myCustomAction geïmplementeerd door endpointURL.

Voorbeeld van 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}"
}

Een actie-eindpunt bouwen

Een eindpunt dat een actie implementeert, moet de aanvraag en het antwoord voor de nieuwe API in Azure verwerken. Wanneer een aangepaste resourceprovider met een actie wordt gemaakt, wordt er een nieuwe set API's in Azure gegenereerd. In dit geval genereert de actie een nieuwe Azure-actie-API voor POST aanroepen:

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

Binnenkomende Azure API-aanvraag:

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"
    }
}

Deze aanvraag wordt vervolgens doorgestuurd naar het eindpunt in het volgende formulier:

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"
    }
}

Op dezelfde manier wordt het antwoord van het eindpunt vervolgens doorgestuurd naar de klant. Het antwoord van het eindpunt moet het volgende retourneren:

  • Een geldig JSON-objectdocument. Alle matrices en tekenreeksen moeten worden genest onder een bovenste object.
  • De Content-Type header moet worden ingesteld op 'application/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

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

Antwoord van aangepaste Azure-resourceprovider:

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

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

Een aangepaste actie aanroepen

Er zijn twee belangrijke manieren om een aangepaste actie aan te roepen van een aangepaste resourceprovider:

  • Azure CLI
  • Azure Resource Manager-sjablonen

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"
                                }
                            }'
Parameter Vereist Beschrijving
action Ja De naam van de actie die is gedefinieerd in ResourceProvider.
Ids Ja De resource-id van de ResourceProvider.
request-body No De aanvraagbody die naar het eindpunt wordt verzonden.

Azure Resource Manager-sjabloon

Notitie

Acties hebben beperkte ondersteuning in Azure Resource Manager-sjablonen. Als u de actie wilt aanroepen in een sjabloon, moet deze het voorvoegsel in de list naam bevatten.

Voorbeeld van ResourceProvider met lijstactie:

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

Voorbeeld van Azure Resource Manager-sjabloon:

{
    "$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'))]"
        }
    }
}
Parameter Vereist Beschrijving
resourceIdentifier Ja De resource-id van de ResourceProvider.
apiVersion Ja De API-versie van de resourceruntime. Dit moet altijd '2018-09-01-preview' zijn.
functionValues No De aanvraagbody die naar het eindpunt wordt verzonden.

Volgende stappen