Partilhar via


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:

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

Grupos de recursos de aplicativos

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:

Executar ação personalizada

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

A captura de tela mostra o botão Adicionar selecionado em Usuários.

  • Vá para Usuários e selecione um recurso de usuários e selecione Ação de contexto personalizada:

A captura de tela mostra a Ação de contexto personalizada selecionada.

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.