Lägga till anpassade åtgärder i Azure REST API
Den här artikeln går igenom kraven och bästa praxis för att skapa Azure-slutpunkter för resurs leverantören som implementerar anpassade åtgärder. Om du inte är bekant med Azures anpassade resurs leverantörer kan du läsa Översikt över anpassade resurs leverantörer.
Definiera en åtgärds slut punkt
En slut punkt är en URL som pekar på en tjänst, som implementerar det underliggande kontraktet mellan det och Azure. Slut punkten definieras i den anpassade resurs leverantören och kan vara en offentligt tillgänglig URL. Exemplet nedan har en åtgärd som kallas 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ärds slut punkt
En slut punkt som implementerar en åtgärd måste hantera begäran och svar för det nya API: et i Azure. När en anpassad resurs leverantör med en åtgärd skapas, kommer den att generera en ny uppsättning API: er i Azure. I det här fallet genererar åtgärden ett nytt Azure Action API för POST anrop:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction
Inkommande Azure API-begäran:
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 kommer sedan att vidarebefordras till slut punkten 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 slut punkten tillbaka till kunden. Svaret från slut punkten ska returnera:
- Ett giltigt JSON-objekt dokument. Alla matriser och strängar ska kapslas under ett översta objekt.
Content-TypeRubriken 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 från Azures anpassade resurs leverantör:
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 av en anpassad resurs leverantör:
- 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. |
| kompatibilitet | Ja | Resurs-ID för ResourceProvider. |
| Request-Body | Nej | Begär ande texten som ska skickas till slut punkten. |
Azure Resource Manager-mall
Anteckning
Åtgärder har begränsat stöd i Azure Resource Manager mallar. För att åtgärden ska kunna anropas inuti en mall måste den innehålla list prefixet i sitt namn.
Exempel på ResourceProvider med list åtgärd:
{
"properties": {
"actions": [
{
"name": "listMyCustomAction",
"routingType": "Proxy",
"endpoint": "https://{endpointURL}/"
}
]
},
"location": "eastus"
}
Exempel på Azure Resource Manager mall:
{
"$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 för resurs körningen. Detta bör alltid vara "2018-09-01-för hands version". |
| functionValues | Nej | Begär ande texten som ska skickas till slut punkten. |