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. |