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 conterá uma ação personalizada na 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 Overview 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:

Definição da interface do utilizador

Neste tutorial, você cria um aplicativo gerenciado e seu grupo de recursos gerenciados conterá instância de provedor personalizada, 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 serã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 saída em createUiDefinition.json:

  "funcname": "[steps('applicationSettings').funcname]",
  "storageName": "[steps('applicationSettings').storagename]",
  "zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"

O exemplo completo createUiDefinition.json pode ser encontrado em Reference: User interface elements artifacts.

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 public e digitar Microsoft.CustomProviders/resourceProviders em 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ê criará um tipo de recurso, ping uma ação personalizada e users/contextAction uma ação personalizada que serão executadas em um contexto de um usersusers 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 routingType como Proxy,Cache para tipos de recursos 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'))]"
  ]
}

O exemplo completo de mainTemplate.json pode ser encontrado em Reference: Deployment template artifact.

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 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ê 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 usersde 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 tipo users.

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 abaixo inclui a configuração da página de recursos "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 completo viewDefinition.json 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 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 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 script abaixo 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 tiver sido implantada, você terá dois novos grupos de recursos. O primeiro grupo de recursos contém uma instância do aplicativo gerenciado, o segundo grupo applicationGroupmanagedResourceGroup de recursos contém os recursos para o aplicativo gerenciado, incluindo o provedor personalizado.

Application resource groups

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 a página "Visão geral" e clique no botão "Ping Action":

Perform custom action

  • Vá para a página "Usuários" e clique no botão "Adicionar". Forneça entradas para criar um recurso e envie o formulário:

Screenshot shows the Add button selected from Users.

  • Vá para a página "Usuários", selecione um recurso "usuários" e clique em "Ação de contexto personalizada":

Screenshot shows Custom Context Action selected.

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 sobre os Aplicativos Gerenciados do Azure, tente perguntar em Estouro de pilha com tag azure-managed-app ou Perguntas e Respostas da Microsoft com tag azure-managed-application. Uma pergunta semelhante pode já ter sido feita e respondida, portanto, verifique primeiro antes de postar. Por favor, use as respetivas tags para uma resposta mais rápida.

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.