Expandir recursos com fornecedores de recursos personalizados
Neste tutorial, vai implementar um fornecedor de recursos personalizado no Azure que expande a API de Resource Manager do Azure com o tipo de recurso Microsoft.CustomProviders/associations. O tutorial mostra como expandir os recursos existentes que estão fora do grupo de recursos onde está localizada a instância do fornecedor de recursos personalizado. Neste tutorial, o fornecedor de recursos personalizado é alimentado por uma aplicação lógica do Azure, mas pode utilizar qualquer ponto final de API público.
Pré-requisitos
Para concluir este tutorial, certifique-se de que revê o seguinte:
- As capacidades dos Fornecedores de Recursos Personalizados do Azure.
- Informações básicas sobre a integração de recursos com fornecedores de recursos personalizados.
Introdução à integração de recursos
Neste tutorial, existem duas partes que precisam de ser implementadas: o fornecedor de recursos personalizado e a associação. Para facilitar o processo, pode utilizar opcionalmente um único modelo que implemente ambos.
O modelo utilizará estes recursos:
- Microsoft.CustomProviders/resourceProviders
- Microsoft.Logic/workflows
- Microsoft.CustomProviders/associations
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"allowedValues": [
"australiaeast",
"eastus",
"westeurope"
],
"metadata": {
"description": "Location for the resources."
}
},
"logicAppName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]",
"metadata": {
"description": "Name of the logic app to be created."
}
},
"customResourceProviderName": {
"type": "string",
"defaultValue": "[uniqueString(resourceGroup().id)]",
"metadata": {
"description": "Name of the custom resource provider to be created."
}
},
"customResourceProviderId": {
"type": "string",
"defaultValue": "",
"metadata": {
"description": "The resource ID of an existing custom resource provider. Provide this to skip deployment of new logic app and custom resource provider."
}
},
"associationName": {
"type": "string",
"defaultValue": "myAssociationResource",
"metadata": {
"description": "Name of the custom resource that is being created."
}
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2021-04-01",
"condition": "[empty(parameters('customResourceProviderId'))]",
"name": "customProviderInfrastructureTemplate",
"properties": {
"mode": "Incremental",
"template": {
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"logicAppName": {
"type": "string",
"defaultValue": "[parameters('logicAppName')]"
}
},
"resources": [
{
"type": "Microsoft.Logic/workflows",
"apiVersion": "2019-05-01",
"name": "[parameters('logicAppName')]",
"location": "[parameters('location')]",
"properties": {
"state": "Enabled",
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"actions": {
"Switch": {
"cases": {
"Case": {
"actions": {
"CreateCustomResource": {
"inputs": {
"body": {
"properties": "@addProperty(triggerBody().Body['properties'], 'myDynamicProperty', 'myDynamicValue')"
},
"statusCode": 200
},
"kind": "Http",
"type": "Response"
}
},
"case": "CREATE"
}
},
"default": {
"actions": {
"DefaultHttpResponse": {
"inputs": {
"statusCode": 200
},
"kind": "Http",
"type": "Response"
}
}
},
"expression": "@triggerBody().operationType",
"type": "Switch"
}
},
"contentVersion": "1.0.0.0",
"outputs": {},
"parameters": {},
"triggers": {
"CustomProviderWebhook": {
"inputs": {
"schema": {}
},
"kind": "Http",
"type": "Request"
}
}
}
}
},
{
"type": "Microsoft.CustomProviders/resourceProviders",
"apiVersion": "2018-09-01-preview",
"name": "[parameters('customResourceProviderName')]",
"location": "[parameters('location')]",
"properties": {
"resourceTypes": [
{
"name": "associations",
"mode": "Secure",
"routingType": "Webhook,Cache,Extension",
"endpoint": "[[listCallbackURL(concat(resourceId('Microsoft.Logic/workflows', parameters('logicAppName')), '/triggers/CustomProviderWebhook'), '2019-05-01').value]"
}
]
}
}
],
"outputs": {
"customProviderResourceId": {
"type": "string",
"value": "[resourceId('Microsoft.CustomProviders/resourceProviders', parameters('customResourceProviderName'))]"
}
}
}
}
},
{
"type": "Microsoft.CustomProviders/associations",
"apiVersion": "2018-09-01-preview",
"name": "[parameters('associationName')]",
"location": "global",
"properties": {
"targetResourceId": "[if(empty(parameters('customResourceProviderId')), reference('customProviderInfrastructureTemplate').outputs.customProviderResourceId.value, parameters('customResourceProviderId'))]",
"myCustomInputProperty": "myCustomInputValue",
"myCustomInputObject": {
"Property1": "Value1"
}
}
}
],
"outputs": {
"associationResource": {
"type": "object",
"value": "[reference(parameters('associationName'), '2018-09-01-preview', 'Full')]"
}
}
}
Implementar a infraestrutura do fornecedor de recursos personalizado
A primeira parte do modelo implementa a infraestrutura do fornecedor de recursos personalizado. Esta infraestrutura define o efeito do recurso de associações. Se não estiver familiarizado com fornecedores de recursos personalizados, veja Descrição Geral dos Fornecedores de Recursos Personalizados do Azure.
Vamos implementar a infraestrutura do fornecedor de recursos personalizado. Copie, guarde e implemente o modelo anterior ou siga e implemente a infraestrutura com o portal do Azure.
Aceda ao Portal do Azure.
Procure modelos em Todos os Serviços ou através da caixa de pesquisa principal:
Selecione Adicionar no painel Modelos :
Em Geral, introduza um Nome e uma Descrição para o novo modelo:
Crie o modelo Resource Manager ao copiar no modelo JSON a partir da secção "Introdução à integração de recursos" deste artigo:
Selecione Adicionar para criar o modelo. Se o novo modelo não for apresentado, selecione Atualizar.
Selecione o modelo criado recentemente e, em seguida, selecione Implementar:
Introduza as definições dos campos necessários e, em seguida, selecione a subscrição e o grupo de recursos. Pode deixar a caixa ID do Fornecedor de Recursos Personalizado vazia.
Nome da definição Necessário? Description Localização Sim A localização dos recursos no modelo. Nome da Aplicação Lógica Não O nome da aplicação lógica. Nome do Fornecedor de Recursos Personalizado Não O nome do fornecedor de recursos personalizado. ID do Fornecedor de Recursos Personalizado Não Um fornecedor de recursos personalizado existente que suporta o recurso de associação. Se especificar um valor aqui, a aplicação lógica e a implementação do fornecedor de recursos personalizado serão ignoradas. Nome da Associação Não O nome do recurso de associação. Parâmetros de exemplo:
Aceda à implementação e aguarde que a implementação seja concluída. Deverá ver algo semelhante à seguinte captura de ecrã. Deverá ver o novo recurso de associação como um resultado:
Eis o grupo de recursos, com a opção Mostrar tipos ocultos selecionada:
Explore o separador Histórico de execuções da aplicação lógica para ver as chamadas para a criação da associação:
Implementar associações adicionais
Depois de configurar a infraestrutura do fornecedor de recursos personalizado, pode facilmente implementar mais associações. O grupo de recursos para associações adicionais não tem de ser o mesmo que o grupo de recursos onde implementou a infraestrutura do fornecedor de recursos personalizado. Para criar uma associação, tem de ter permissões Microsoft.CustomProviders/resourceproviders/write no ID do Fornecedor de Recursos Personalizado especificado.
Aceda ao recurso Microsoft.CustomProviders/resourceProviders do fornecedor de recursos personalizado no grupo de recursos da implementação anterior. Tem de selecionar a caixa de verificação Mostrar tipos ocultos :
Copie a propriedade ID do Recurso do fornecedor de recursos personalizado.
Procure modelos em Todos os Serviços ou através da caixa de pesquisa principal:
Selecione o modelo criado anteriormente e, em seguida, selecione Implementar:
Introduza as definições dos campos necessários e, em seguida, selecione a subscrição e um grupo de recursos diferente. Para a definição ID do Fornecedor de Recursos Personalizado , introduza o ID do Recurso que copiou do fornecedor de recursos personalizado que implementou anteriormente.
Aceda à implementação e aguarde que a implementação seja concluída. Deverá agora implementar apenas o novo recurso de associações:
Pode voltar ao Histórico de execuções da aplicação lógica e ver que foi efetuada outra chamada para a aplicação lógica. Pode atualizar a aplicação lógica para aumentar a funcionalidade adicional para cada associação criada.
Passos seguintes
Neste artigo, implementou um fornecedor de recursos personalizado no Azure que expande a API de Resource Manager do Azure com o tipo de recurso Microsoft.CustomProviders/associates. Para continuar a aprender sobre fornecedores de recursos personalizados, veja: