Adicionar Ações Personalizadas à API REST do Azure
Este artigo irá analisar os requisitos e as melhores práticas para criar pontos finais do Fornecedor de Recursos Personalizados do Azure que implementam ações personalizadas. Se não estiver familiarizado com os Fornecedores de Recursos Personalizados do Azure, veja a descrição geral dos fornecedores de recursos personalizados.
Como definir um Ponto Final de Ação
Um ponto final é um URL que aponta para um serviço, que implementa o contrato subjacente entre o mesmo e o Azure. O ponto final é definido no fornecedor de recursos personalizado e pode ser qualquer URL acessível publicamente. O exemplo abaixo tem uma ação chamada myCustomAction
implementada pelo endpointURL
.
ResourceProvider de Exemplo:
{
"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}"
}
Criar um ponto final de ação
Um ponto final que implemente uma ação tem de processar o pedido e a resposta da nova API no Azure. Quando um fornecedor de recursos personalizado com uma ação é criado, irá gerar um novo conjunto de APIs no Azure. Neste caso, a ação irá gerar uma nova API de ação do Azure para POST
chamadas:
/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName}/myCustomAction
Pedido de Entrada da API do 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"
}
}
Em seguida, este pedido será reencaminhado para o ponto final no formulário:
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"
}
}
Da mesma forma, a resposta do ponto final é reencaminhada para o cliente. A resposta do ponto final deve devolver:
- Um documento de objeto JSON válido. Todas as matrizes e cadeias devem ser aninhadas num objeto superior.
- O
Content-Type
cabeçalho deve ser definido como "aplicação/json; charset=utf-8".
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"myProperty1": "myPropertyValue1",
"myProperty2": {
"myProperty3" : "myPropertyValue3"
}
}
Resposta do Fornecedor de Recursos Personalizado do Azure:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
{
"myProperty1": "myPropertyValue1",
"myProperty2": {
"myProperty3" : "myPropertyValue3"
}
}
Chamar uma Ação Personalizada
Existem duas formas principais de chamar uma ação personalizada de um fornecedor de recursos personalizado:
- CLI do Azure
- Modelos do Azure Resource Manager
CLI do Azure
az resource invoke-action --action {actionName} \
--ids /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CustomProviders/resourceProviders/{resourceProviderName} \
--request-body \
'{
"myProperty1": "myPropertyValue1",
"myProperty2": {
"myProperty3": "myPropertyValue3"
}
}'
Parâmetro | Necessário | Descrição |
---|---|---|
action | sim | O nome da ação definida no ResourceProvider. |
IDs | sim | O ID de recurso do ResourceProvider. |
request-body | não | O corpo do pedido que será enviado para o ponto final. |
Modelo do Azure Resource Manager
Nota
As ações têm suporte limitado nos Modelos de Resource Manager do Azure. Para que a ação seja chamada dentro de um modelo, tem de conter o list
prefixo no respetivo nome.
ResourceProvider de Exemplo com Ação de Lista:
{
"properties": {
"actions": [
{
"name": "listMyCustomAction",
"routingType": "Proxy",
"endpoint": "https://{endpointURL}/"
}
]
},
"location": "eastus"
}
Modelo de Resource Manager do Azure de exemplo:
{
"$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'))]"
}
}
}
Parâmetro | Necessário | Descrição |
---|---|---|
resourceIdentifier | sim | O ID de recurso do ResourceProvider. |
apiVersion | sim | A versão da API do runtime de recursos. Deve ser sempre "2018-09-01-preview". |
functionValues | não | O corpo do pedido que será enviado para o ponto final. |
Passos seguintes
- Descrição geral dos Fornecedores de Recursos Personalizados do Azure
- Início Rápido: Criar o Fornecedor de Recursos Personalizados do Azure e implementar recursos personalizados
- Tutorial: Criar ações e recursos personalizados no Azure
- Procedimentos: Adicionar Recursos Personalizados à API REST do Azure