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 contém uma ação personalizada na página 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 personalizada.
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 seu grupo de recursos gerenciados contém uma instância de provedor personalizada, uma conta de armazenamento e uma 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 são implantados do pacote de funções de exemplo, mas você pode alterá-los 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 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 o recurso de provedor personalizado com o 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
, uma ação personalizada ping
e uma ação personalizada users/contextAction
executada em um contexto de um recurso personalizado users
. 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 routingType
como Proxy,Cache
para tipos de recurso e 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 a seguir inclui a configuração da página de recursos dos Usuários com a 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
}
]
}
}
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. Aqui está um script para carregar o pacote do aplicativo 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 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 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 de aplicativo gerenciado for implantada, execute o script a seguir ou siga as etapas no portal do Azure para implantar sua instância de aplicativo gerenciado com o 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 de recursos applicationGroup
contém uma instância do aplicativo gerenciado, e o grupo de recursos managedResourceGroup
conté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 Visão geral e selecione Ação de ping:
- Vá para Usuários e selecione Adicionar. Forneça entradas para criar um recurso e enviar o formulário:
- Acesse Usuários, selecione um recurso de usuários e selecione 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 você tiver dúvidas ou precisar de uma resposta sobre os Aplicativos Gerenciados do Azure, poderá postar uma pergunta no Stack Overflow com a marca azure-managed-app
ou Microsoft Q&A com a marca azure-managed-application
.
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.