Estender recursos com provedores de recursos personalizados
Neste tutorial, você implanta um provedor de recursos personalizado no Azure que estende a API do Azure Resource Manager com o tipo de recurso Microsoft.CustomProviders/associations. O tutorial mostra como estender os recursos existentes que estão fora do grupo de recursos em que a instância do provedor de recursos personalizados está localizada. Neste tutorial, o provedor de recursos personalizado é ativado por um aplicativo lógico do Azure, mas você pode usar qualquer ponto de extremidade de API pública.
Pré-requisitos
Para concluir este tutorial, revise o seguinte:
- As funcionalidades dos Provedores de Recursos Personalizados do Azure.
- Informações básicas sobre a integração de recursos com provedores de recursos personalizados.
Introdução à integração de recursos
Neste tutorial, há duas partes que precisam ser implantadas: o provedor de recursos personalizados e a associação. Para facilitar o processo, opcionalmente, você pode usar um único modelo que implanta ambos.
O modelo usará 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')]"
}
}
}
Implante a infraestrutura do provedor de recursos personalizados
A primeira parte do modelo implanta a infraestrutura do provedor de recursos personalizados. Essa infraestrutura define o efeito do recurso de associações. Se você não estiver familiarizado com provedores de recursos personalizados, confira a Visão geral dos Provedores de Recursos Personalizados do Azure.
Vamos implantar a infraestrutura do provedor de recursos personalizados. Copie, salve e implante o modelo anterior ou acompanhe o tutorial e implante a infraestrutura usando o portal do Azure.
Vá para o Portal do Azure.
Pesquise modelos em Todos os Serviços ou usando a caixa de pesquisa principal:
Selecione Adicionar no painel Modelos:
Em Geral, insira um Nome e uma Descrição para o novo modelo:
Crie o modelo do Resource Manager copiando o modelo JSON da seção "Introdução à integração de recursos" deste artigo:
Selecione Adicionar para criar o modelo. Se o novo modelo não for exibido, selecione Atualizar.
Selecione o modelo recém-criado e, em seguida, selecione Implantar:
Insira as configurações para os campos obrigatórios e, em seguida, selecione a assinatura e o grupo de recursos. Deixe a caixa ID do Provedor de Recursos Personalizado vazia.
Nome da configuração Necessário? Descrição Location Sim A localização dos recursos no modelo. Nome do Aplicativo Lógico Não O nome do aplicativo lógico. Nome do Provedor de Recursos Personalizado Não O nome do provedor de recursos personalizado. ID do Provedor de Recursos Personalizado Não Um provedor de recursos personalizado existente que dá suporte ao recurso de associação. Se você especificar um valor aqui, o aplicativo lógico e a implantação do provedor de recursos personalizados serão ignorados. Nome da Associação Não O nome do recurso de associação. Parâmetros de exemplo:
Acesse a implantação e aguarde a conclusão dela. Você deverá ver algo semelhante à captura de tela a seguir. Você deverá ver o novo recurso de associação como uma saída:
Este é o grupo de recursos, com a opção Mostrar tipos ocultos selecionada:
Explore a guia Histórico de execuções do aplicativo lógico para ver as chamadas para a criação da associação:
Implantar associações adicionais
Depois de configurar a infraestrutura do provedor de recursos personalizados, você poderá implantar mais associações com facilidade. O grupo de recursos para associações adicionais não precisa ser o mesmo do grupo de recursos em que você implantou a infraestrutura do provedor de recursos personalizados. Para criar uma associação, você precisa ter permissões Microsoft.CustomProviders/resourceproviders/write na ID do Provedor de Recursos Personalizado especificado.
Acesse o recurso Microsoft.CustomProviders/resourceProviders do provedor de recursos personalizados no grupo de recursos da implantação anterior. Você precisa marcar a caixa de seleção Mostrar tipos ocultos:
Copie a propriedade ID do Recurso do provedor de recursos personalizados.
Pesquise modelos em Todos os Serviços ou usando a caixa de pesquisa principal:
Selecione o modelo criado anteriormente e, em seguida, selecione Implantar:
Insira as configurações para os campos obrigatórios e, em seguida, selecione a assinatura e outro grupo de recursos. Na configuração da ID do Provedor de Recursos Personalizados, insira a ID do Recurso que você copiou do provedor de recursos personalizados implantado anteriormente.
Acesse a implantação e aguarde a conclusão dela. Agora, ela deverá implantar apenas o novo recurso de associações:
Volte ao Histórico de execuções do aplicativo lógico e veja que outra chamada foi feita ao aplicativo lógico. Atualize o aplicativo lógico para aumentar a funcionalidade adicional de cada associação criada.
Próximas etapas
Neste artigo, você implantou um provedor de recursos personalizado no Azure que estende a API do Azure Resource Manager com o tipo de recurso Microsoft.CustomProviders/associates. Para continuar aprendendo sobre provedores de recursos personalizados, consulte: