Tutorial: Criar aplicativo gerenciado com ações e recursos personalizados
Neste tutorial, você cria seu próprio aplicativo gerenciado com ações e recursos personalizados. O aplicativo gerenciado contém uma ação personalizada na Overview
página, um tipo de recurso personalizado exibido como um item de menu separado e Table of Content
uma ação de contexto personalizada na página de recurso personalizada.
Este tutorial inclui as seguintes etapas:
- Criar arquivo de definição de interface do usuário para criar uma instância de aplicativo gerenciado
- Criar modelo de implantação com o Provedor Personalizado do Azure, a Conta de Armazenamento do Azure e a Função do Azure
- Artefato de definição de exibição do autor com ações e recursos personalizados
- Implantar uma definição de aplicativo gerenciado
- Implantar uma instância do aplicativo gerenciado
- Execute ações personalizadas e crie recursos personalizados
Pré-requisitos
Para concluir este tutorial, você precisa saber:
- Como criar e publicar uma definição de aplicativo gerenciado.
- Como implantar o aplicativo Catálogo de Serviços por meio do portal do Azure.
- Como criar a interface do usuário do portal do Azure para seu aplicativo gerenciado.
- Exibir recursos de artefato de definição.
- Recursos do Provedor Personalizado do Azure.
Definição da interface do utilizador
Neste tutorial, você cria um aplicativo gerenciado e seu grupo de recursos gerenciados contém instância de provedor personalizado, conta de armazenamento e função. A Função do Azure usada neste exemplo implementa uma API que manipula operações de provedor personalizadas para ações e recursos. A Conta de Armazenamento do Azure é usada como armazenamento básico para seus recursos de provedor personalizados.
A definição da interface do usuário para criar uma instância de aplicativo gerenciado inclui funcname
elementos de entrada storagename
. O nome da conta de armazenamento e o nome da função devem ser globalmente exclusivos. Por padrão, os arquivos de função são implantados a partir do pacote de função de exemplo, mas você pode alterá-lo adicionando um elemento de entrada para um link de pacote em createUiDefinition.json:
{
"name": "funcname",
"type": "Microsoft.Common.TextBox",
"label": "Name of the function to be created",
"toolTip": "Name of the function to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "storagename",
"type": "Microsoft.Common.TextBox",
"label": "Name of the storage to be created",
"toolTip": "Name of the storage to be created",
"visible": true,
"constraints": {
"required": true
}
},
{
"name": "zipFileBlobUri",
"type": "Microsoft.Common.TextBox",
"defaultValue": "https://github.com/Azure/azure-quickstart-templates/tree/master/quickstarts/microsoft.customproviders/custom-rp-with-function/artifacts/functionzip/functionpackage.zip",
"label": "The Uri to the uploaded function zip file",
"toolTip": "The Uri to the uploaded function zip file",
"visible": true
}
E a saída em createUiDefinition.json:
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"
O exemplo de createUiDefinition.json completo pode ser encontrado em Referência: artefatos de elementos da interface do usuário.
Modelo com provedor personalizado
Para criar uma instância de aplicativo gerenciado com provedor personalizado, você precisa definir o recurso de provedor personalizado com nome público e digitar Microsoft.CustomProviders/resourceProviders
seu mainTemplate.json. Nesse recurso, você define os tipos de recursos e ações para seu serviço. Para implantar o Azure Function e as instâncias da Conta de Armazenamento do Azure, defina recursos do tipo Microsoft.Web/sites
e Microsoft.Storage/storageAccounts
respectivamente.
Neste tutorial, você cria um tipo de recurso, ping
uma ação personalizada e users/contextAction
uma users
ação personalizada que é executada em um contexto de um users
recurso personalizado. Para cada tipo de recurso e ação, forneça um ponto de extremidade apontando para a função com o nome fornecido em createUiDefinition.json. Especifique o como Proxy,Cache
para tipos de routingType
recursos e Proxy
ações:
{
"apiVersion": "[variables('customrpApiversion')]",
"type": "Microsoft.CustomProviders/resourceProviders",
"name": "[variables('customProviderName')]",
"location": "[parameters('location')]",
"properties": {
"actions": [
{
"name": "ping",
"routingType": "Proxy",
"endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
},
{
"name": "users/contextAction",
"routingType": "Proxy",
"endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
],
"resourceTypes": [
{
"name": "users",
"routingType": "Proxy,Cache",
"endpoint": "[listSecrets(resourceId('Microsoft.Web/sites/functions', parameters('funcname'), 'HttpTrigger1'), '2018-02-01').trigger_url]"
}
]
},
"dependsOn": [
"[concat('Microsoft.Web/sites/',parameters('funcname'))]"
]
}
O exemplo de mainTemplate.json completo pode ser encontrado em Referência: artefato de modelo de implantação.
Artefacto de definição de vista
Para definir a interface do usuário que inclui ações personalizadas e recursos personalizados em seu aplicativo gerenciado, você precisa criar viewDefinition.json artefato. Para obter mais informações sobre o artefato de definição de exibição, consulte Exibir artefato de definição em Aplicativos Gerenciados do Azure.
Neste tutorial, você define:
- Uma página Visão geral com o botão da barra de ferramentas que representa uma ação
TestAction
personalizada com entrada de texto básica. - Uma página Usuários que representa um tipo
users
de recurso personalizado . - Uma ação
users/contextAction
de recurso personalizada na página Usuários que será executada em um contexto de recurso personalizado do tipousers
.
O exemplo a seguir mostra a configuração de exibição para uma página "Visão geral":
{
"kind": "Overview",
"properties": {
"header": "Welcome to your Demo Azure Managed Application",
"description": "This Managed application with Custom Provider is for demo purposes only.",
"commands": [
{
"displayName": "Ping Action",
"path": "/customping",
"icon": "LaunchCurrent"
}
]
}
}
O exemplo a seguir inclui a configuração da página Recursos de usuários com ação de recurso personalizada:
{
"kind": "CustomResources",
"properties": {
"displayName": "Users",
"version": "1.0.0.0",
"resourceType": "users",
"createUIDefinition": {},
"commands": [
{
"displayName": "Custom Context Action",
"path": "users/contextAction",
"icon": "Start"
}
],
"columns": [
{
"key": "properties.FullName",
"displayName": "Full Name"
},
{
"key": "properties.Location",
"displayName": "Location",
"optional": true
}
]
}
}
O exemplo de viewDefinition.json completo pode ser encontrado em Reference: View definition artifact.
Definição de aplicativo gerenciado
Empacote os seguintes artefatos de aplicativos gerenciados para compactar o arquivo e enviá-lo para o armazenamento:
- createUiDefinition.json
- mainTemplate.json
- viewDefinition.json
Todos os arquivos devem estar no nível raiz. O pacote com artefatos pode ser armazenado em qualquer armazenamento, por exemplo, blob do GitHub ou blob da Conta de Armazenamento do Azure. Aqui está um script para carregar o pacote do aplicativo para a conta de armazenamento:
$resourceGroup="appResourcesGroup"
$storageName="mystorageaccount$RANDOM"
# Sign in to your Azure subscription
Connect-AzAccount
# Create resource group for managed application definition and application package
New-AzResourceGroup -Name $resourceGroup -Location eastus
# Create storage account for a package with application artifacts
$storageAccount=New-AzStorageAccount `
-ResourceGroupName $resourceGroup `
-Name $storageName `
-SkuName Standard_LRS `
-Location eastus `
$ctx=$storageAccount.Context
# Create storage container and upload zip to blob
New-AzStorageContainer -Name appcontainer -Context $ctx -Permission blob
Set-AzStorageBlobContent `
-File "path_to_your_zip_package" `
-Container appcontainer `
-Blob app.zip `
-Context $ctx
# Get blob absolute uri
$blobUri=(Get-AzureStorageBlob -Container appcontainer -Blob app.zip -Context $ctx).ICloudBlob.uri.AbsoluteUri
Execute o seguinte script da CLI do Azure ou siga as etapas no portal do Azure para implantar uma definição de aplicativo gerenciado do Catálogo de Serviços:
Para executar este exemplo, instale a versão mais recente da CLI do Azure. Para começar, execute az login
para criar uma ligação ao Azure.
Exemplos para a CLI do Azure são escritos para o bash
shell. Para executar este exemplo no Windows PowerShell ou no Prompt de Comando, talvez seja necessário alterar elementos do script.
resourceGroup="appResourcesGroup"
# Select subscription and create resource group (if you have not created yet)
az account set --subscription <subscriptionID>
az group create --name $resourceGroup --location eastus
# Get object ID of your identity
userid=$(az ad user list --upn example@contoso.org --query [0].id --output tsv)
# Get role definition ID for the Owner role
roleid=$(az role definition list --name Owner --query [].name --output tsv)
# Create managed application definition resource
az managedapp definition create \
--name "ManagedUsersAppDefinition" \
--location "eastus" \
--resource-group $resourceGroup \
--lock-level ReadOnly \
--display-name "Managed users app definition" \
--description "Managed application with Azure Custom Provider" \
--authorizations "$userid:$roleid" \
--package-file-uri "path to your app.zip package"
Instância de aplicativo gerenciado
Quando a definição de aplicativo gerenciado for implantada, execute o seguinte script ou siga as etapas no portal do Azure para implantar sua instância de aplicativo gerenciado com provedor personalizado:
appResourcesGroup="appResourcesGroup"
applicationGroup="usersApplicationGroup"
# Create resource group for managed application instance
az group create --name $applicationGroup --location eastus
# Get ID of managed application definition
appid=$(az managedapp definition show --name ManagedUsersAppDefinition --resource-group $appResourcesGroup --query id --output tsv)
# Create the managed application
az managedapp create \
--name ManagedUsersApp \
--location "eastus" \
--kind "Servicecatalog" \
--resource-group $applicationGroup \
--managedapp-definition-id $appid \
--managed-rg-id "managedResourcesGroup" \
--parameters "{\"funcname\": {\"value\": \"managedusersappfunction\"}, \"storageName\": {\"value\": \"managedusersappstorage\"}}"
Ações e recursos personalizados
Depois que a instância do aplicativo do catálogo de serviços for implantada, você terá dois novos grupos de recursos. O grupo applicationGroup
de recursos contém uma instância do aplicativo gerenciado e o grupo managedResourceGroup
de recursos contém os recursos para o aplicativo gerenciado, incluindo o provedor personalizado.
Você pode ir para a instância do aplicativo gerenciado e executar uma ação personalizada na página "Visão geral", criar um recurso personalizado para usuários na página "Usuários" e executar uma ação de contexto personalizada no recurso personalizado.
- Vá para Visão geral e selecione Ação de ping:
- Vá para Usuários e selecione Adicionar. Forneça entradas para criar um recurso e envie o formulário:
- Vá para Usuários e selecione um recurso de usuários e selecione Ação de contexto personalizada:
Clean up resources (Limpar recursos)
Nos passos anteriores, criou os recursos do Azure num grupo de recursos. Se provavelmente não necessitar desses recursos no futuro, pode eliminá-los ao eliminar o grupo de recursos.
No menu do portal do Azure ou na página inicial , selecione Grupos de recursos. Em seguida, na página Grupos de recursos, selecione myResourceGroup.
Na página myResourceGroup, certifique-se de que os recursos listados são aqueles que você deseja excluir.
Selecione Excluir grupo de recursos, digite myResourceGroup na caixa de texto para confirmar e selecione Excluir.
À procura de ajuda
Se você tiver dúvidas ou precisar de uma resposta sobre os Aplicativos Gerenciados do Azure, poderá postar uma pergunta em Estouro de pilha com tag azure-managed-app
ou Microsoft Q&&A com tag azure-managed-application
.
Próximos passos
Para publicar a aplicação gerida no Microsoft Azure Marketplace, veja Aplicações geridas do Azure no Marketplace.
Saiba mais sobre os Provedores Personalizados do Azure.