Compartilhar via


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:

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

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.

Grupos de recursos do aplicativo

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:

Executar ação personalizada

  • Vá para Usuários e selecione Adicionar. Forneça entradas para criar um recurso e enviar o formulário:

Captura de tela mostra o botão

  • Acesse Usuários, selecione um recurso de usuários e selecione Ação de contexto personalizado:

Captura de tela mostra a opção

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.