Aggiunta di azioni personalizzate all'API REST di Azure

Questo articolo esamina i requisiti e le procedure consigliate per creare endpoint dei provider di risorse personalizzati di Azure che vogliono implementare azioni personalizzate. Se non si ha familiarità con i provider di risorse personalizzati di Azure, vedere la panoramica dei provider di risorse personalizzati.

Come definire un endpoint azione

Un endpoint è un URL che punta a un servizio, che implementa il contratto sottostante tra di esso e Azure. L'endpoint è definito nel provider di risorse personalizzato e può essere qualsiasi URL accessibile pubblicamente. L'esempio seguente include un’azione denominata myCustomAction implementata da endpointURL.

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

Creazione di un endpoint azione

Un endpoint che implementa un’azione deve gestire la richiesta e la risposta per la nuova API in Azure. Quando viene creato un provider di risorse personalizzato con un’azione , verrà generato un nuovo set di API in Azure. In questo caso, l'azione genererà una nuova API di azione di Azure per le chiamate POST :

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

Richiesta in ingresso dell’API di Azure:

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

Questa richiesta verrà quindi inoltrata all’endpoint nel modulo:

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

Analogamente, la risposta dell’endpoint viene poi reinoltrata al cliente. La risposta dell'endpoint deve restituire:

  • Un documento oggetto JSON valido Tutte le matrici e le stringhe devono essere annidate in un oggetto superiore.
  • L'intestazione Content-Type deve essere impostata su "application/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8

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

Risposta del provider di risorse personalizzato di Azure:

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

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

Chiamata di un'azione personalizzata

Esistono due modi principali per chiamare un'azione personalizzata da un provider di risorse personalizzato:

  • Interfaccia della riga di comando di Azure
  • Modelli di Azure Resource Manager

Interfaccia della riga di comando di Azure

az resource invoke-action --action {actionName} \
                          --ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
                          --request-body \
                            '{
                                "myProperty1": "myPropertyValue1",
                                "myProperty2": {
                                    "myProperty3": "myPropertyValue3"
                                }
                            }'
Parametro Richiesto Descrizione
action yes nome dell'azione definita in ResourceProvider.
ids yes ID risorsa di ResourceProvider.
request-body no corpo della richiesta che verrà inviato all’endpoint.

Modello di Azure Resource Manager

Nota

Le azioni hanno un supporto limitato nei modelli di Resource Manager di Azure. Affinché l'azione venga chiamata all'interno di un modello, deve contenere il prefisso list nel nome.

Esempio di ResourceProvider con azione elenco:

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

Modello di Azure Resource Manager di esempio:

{
    "$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'))]"
        }
    }
}
Parametro Richiesto Descrizione
resourceIdentifier yes ID risorsa di ResourceProvider.
apiVersion yes Versione API del runtime della risorsa. Deve essere sempre "2018-09-01-preview".
functionValues no corpo della richiesta che verrà inviato all’endpoint.

Passaggi successivi