Tutorial: criar um 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 conterá uma ação personalizada na página de Overview
, um tipo de recurso personalizado exibido como um item de menu separado em Table of Content
e uma ação de contexto personalizada na página de recursos personalizados.
Este tutorial inclui as seguintes etapas:
- Criar um arquivo de definição da interface do usuário para criar uma instância de aplicativo gerenciado
- Criar um modelo de implantação com o Provedor Personalizado do Azure, uma conta de armazenamento do Azure e uma função do Azure
- Criar artefato de definição de exibição com ações e recursos personalizados
- Implantar uma definição de aplicativo gerenciado
- Implantar uma instância do aplicativo gerenciado
- Executar ações personalizadas e criar recursos personalizados
Pré-requisitos
Para concluir este tutorial, você precisará saber:
- Como Criar e publicar a definição de um aplicativo gerenciado.
- Como Implantar o aplicativo de catálogo de serviços por meio do portal do Azure.
- Como Criar uma interface do usuário do portal do Azure para seu aplicativo gerenciado.
- Exibir funcionalidades do artefato de definição.
- Funcionalidades do provedor personalizado do Azure.
Definição da interface do usuário
Neste tutorial, você criará um aplicativo gerenciado e o grupo de recursos gerenciados dele conterá a instância do provedor personalizado, a conta de armazenamento e a função. A função do Azure usada neste exemplo implementa uma API que trata operações de provedor personalizadas para ações e recursos. A conta de armazenamento do Azure é usada como armazenamento básico para os recursos do provedor personalizado.
A definição da interface do usuário para criar uma instância de aplicativo gerenciado inclui os elementos de entrada funcname
e 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 serão implantados do pacote de funções de amostra. No entanto, é possível alterar isso adicionando um elemento de entrada a 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 uma saída em createUiDefinition.json:
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"
a amostra createUiDefinition.json completa pode ser encontrada 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 um recurso de provedor personalizado com nome público e digitar Microsoft.CustomProviders/resourceProviders em seu mainTemplate.json. Nesse recurso, você define os tipos de recursos e as ações para o serviço. Para implantar instâncias da função do Azure e da conta de armazenamento do Azure, defina recursos do tipo Microsoft.Web/sites
e Microsoft.Storage/storageAccounts
, respectivamente.
Neste tutorial, você criará um tipo de recurso users
, a ação personalizada ping
e a ação personalizada users/contextAction
que será executada no contexto de um recurso personalizado users
. Para cada tipo de recurso e ação, forneça um ponto de extremidade que aponte para a função com o nome fornecido em createUiDefinition.json. Especifique o routingType como Proxy,Cache
para os tipos de recurso e como Proxy
para 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'))]"
]
}
A amostra mainTemplate.json completa pode ser encontrada na Referência: artefato do modelo de implantação.
Exibir artefato de definição
Para definir a interface do usuário que inclui ações personalizadas e recursos personalizados em seu aplicativo gerenciado, você precisa criar o artefato viewDefinition.json. 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ê definirá:
- Uma página de Visão geral com botão de barra de ferramentas que representa uma ação personalizada
TestAction
com entrada de texto básico. - Uma página de Usuários que representa um tipo de recurso personalizado
users
. - Uma ação de recurso personalizada
users/contextAction
na página de Usuários que será executada no contexto de recurso personalizado do tipousers
.
O exemplo a seguir mostra a configuração de exibição para uma página de "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 abaixo inclui a configuração da página de recursos de "Usuários" com ação de recurso personalizado:
{
"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 }
]
}
}
A amostra viewDefinition.json completa pode ser encontrada na Referência: exibir artefato de definição.
Definição do aplicativo gerenciado
Empacote os seguintes artefatos de aplicativo gerenciado em um arquivo morto zip e carregue-o no armazenamento:
- createUiDefinition.json
- mainTemplate.json
- viewDefinition.json
Todos os arquivos devem estar no nível da raiz. O pacote com artefatos pode ser armazenado em qualquer armazenamento, por exemplo, blob do GitHub ou blob da conta de armazenamento do Azure. Eis um script para carregar o pacote de aplicativos na 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 script da CLI do Azure abaixo ou siga as etapas no portal do Azure para implantar uma definição de aplicativo gerenciado do catálogo de serviços:
Para executar esta amostra, instale a última versão da CLI do Azure. Para iniciar, execute az login
para criar uma conexão com o Azure.
As amostras da CLI do Azure são escritas para o shell bash
. Para executar esta amostra no prompt de comando ou no Windows PowerShell, talvez você precise alterar os 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 do aplicativo gerenciado
Quando a definição do aplicativo gerenciado for implantada, execute o script abaixo ou siga as etapas no portal do Azure para implantar a instância do seu 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 tiver sido implantada, você terá dois novos grupos de recursos. O primeiro grupo de recursos, applicationGroup
, contém uma instância do aplicativo gerenciado; o segundo grupo de recursos, managedResourceGroup
, mantém os recursos do aplicativo gerenciado, incluindo o provedor personalizado.
Você pode ir para a instância do aplicativo gerenciado e executar a ação personalizada na página de "Visão geral", criar o recurso personalizado usuários na página de "Usuários" e executar a ação de contexto personalizado no recurso personalizado.
- Vá para a página de "Visão geral" e clique no botão "Ação de ping":
- Vá para a página de "Usuários" e clique no botão "Adicionar". Forneça entradas para criar um recurso e enviar o formulário:
- Vá para a página de "Usuários", selecione um recurso "usuários" e clique em "Ação de contexto personalizado":
Limpar os recursos
Nas etapas anteriores, você criou os recursos do Azure em um grupo de recursos. Se você não espera precisar desses recursos no futuro, poderá excluí-los ao excluir 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 deseja excluir.
Selecione Excluir grupo de recursos, digite myResourceGroup na caixa de texto para confirmar e selecione Excluir.
Procurando ajuda
Se tiver dúvidas sobre os Aplicativos Gerenciados do Azure, tente perguntar no Stack Overflow com a marca azure-managed-app ou no Microsoft Q&A com a marca azure-managed-application. Uma pergunta semelhante pode já ter sido feita e respondida. Portanto, verifique primeiro antes de postar. Use as respectivas marcas para ter uma resposta mais rápida.
Próximas etapas
Para publicar o aplicativo gerenciado no Azure Marketplace, veja Aplicativos Gerenciados do Azure no Marketplace.
Saiba mais sobre os Provedores Personalizados do Azure.