Lägga till anpassade åtgärder i Azure REST API

Den här artikeln går igenom kraven och metodtipsen för att skapa slutpunkter för Azure Custom Resource Provider som implementerar anpassade åtgärder. Om du inte är bekant med anpassade Azure-resursprovidrar kan du läsa översikten över anpassade resursprovidrar.

Definiera en åtgärdsslutpunkt

En slutpunkt är en URL som pekar på en tjänst som implementerar det underliggande kontraktet mellan den och Azure. Slutpunkten definieras i den anpassade resursprovidern och kan vara valfri offentligt tillgänglig URL. Exemplet nedan har en åtgärd som heter myCustomAction implementerad av endpointURL.

Exempel på 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}"
}

Skapa en åtgärdsslutpunkt

En slutpunkt som implementerar en åtgärd måste hantera begäran och svar för det nya API:et i Azure. När en anpassad resursprovider med en åtgärd skapas genererar den en ny uppsättning API:er i Azure. I det här fallet genererar åtgärden ett nytt Azure-åtgärds-API för POST anrop:

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

Inkommande begäran för 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"
    }
}

Den här begäran vidarebefordras sedan till slutpunkten i formuläret:

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

På samma sätt vidarebefordras svaret från slutpunkten tillbaka till kunden. Svaret från slutpunkten bör returnera:

  • Ett giltigt JSON-objektdokument. Alla matriser och strängar ska vara kapslade under ett översta objekt.
  • Rubriken Content-Type ska vara inställd på "application/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

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

Svar för anpassad Azure-resursprovider:

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

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

Anropa en anpassad åtgärd

Det finns två huvudsakliga sätt att anropa en anpassad åtgärd från en anpassad resursprovider:

  • Azure CLI
  • Azure Resource Manager-mallar

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 Krävs Beskrivning
åtgärd Ja Namnet på åtgärden som definierats i ResourceProvider.
Id Ja Resurs-ID för ResourceProvider.
request-body Nej Begärandetexten som ska skickas till slutpunkten.

Azure Resource Manager-mall

Anteckning

Åtgärder har begränsat stöd i Azure Resource Manager-mallar. För att åtgärden ska anropas i en mall måste den innehålla prefixet list i dess namn.

Exempel på ResourceProvider med liståtgärd:

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

Exempelmall för 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'))]"
        }
    }
}
Parameter Krävs Beskrivning
resourceIdentifier Ja Resurs-ID för ResourceProvider.
apiVersion Ja API-versionen av resurskörningen. Detta bör alltid vara "2018-09-01-preview".
functionValues Nej Begärandetexten som ska skickas till slutpunkten.

Nästa steg