Tutorial: Creación de una aplicación administrada con acciones y recursos personalizados

En este tutorial, creará su propia aplicación administrada con acciones y recursos personalizados. La aplicación administrada contendrá una acción personalizada en la página Overview, un tipo de recurso personalizado que se muestra como un elemento de menú independiente en Table of Content y una acción de contexto personalizada en la página de recursos personalizados.

Este tutorial incluye los siguientes pasos:

  • Creación de un archivo de definición de la interfaz de usuario para crear una instancia de aplicación administrada.
  • Creación de una plantilla de implementación con el proveedor personalizado de Azure, la cuenta de Azure Storage y una función de Azure.
  • Creación de un artefacto de definición de vistas con acciones y recursos personalizados.
  • Creación de una definición de aplicación administrada.
  • Implementación de una instancia de aplicación administrada.
  • Realización de acciones personalizadas y creación de recursos personalizados.

Prerrequisitos

Para completar este tutorial, necesita saber lo siguiente:

Definición de la interfaz de usuario

En este tutorial, creará una aplicación administrada y su grupo de recursos administrados contendrá una instancia de proveedor personalizado, una cuenta de almacenamiento y una función. La función de Azure que se usa en este ejemplo implementa una API que controla las operaciones del proveedor personalizado para las acciones y los recursos. La cuenta de Azure Storage se usa como almacenamiento básico para los recursos del proveedor personalizado.

La definición de la interfaz de usuario para crear una instancia de aplicación administrada incluye los elementos de entrada funcname y storagename. El nombre de la cuenta de almacenamiento y el nombre de la función deben ser únicos globalmente. De forma predeterminada, los archivos de función se implementarán desde el paquete de función de ejemplo, pero esto puede cambiarse si agrega un elemento de entrada de un vínculo de paquete en 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
}

y de salida en createUiDefinition.json:

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

El ejemplo de createUiDefinition.json completo se puede encontrar en Referencia: Artefactos de elementos de la interfaz de usuario.

Plantilla con proveedor personalizado

Para crear una instancia de aplicación administrada con un proveedor personalizado, debe definir el recurso de proveedor personalizado con el nombre public y el tipo Microsoft.CustomProviders/resourceProviders en mainTemplate.json En ese recurso, defina los tipos de recurso y las acciones para el servicio. Para implementar las instancias de Azure Functions y de la cuenta de Azure Storage, defina recursos del tipo Microsoft.Web/sites y Microsoft.Storage/storageAccounts respectivamente.

En este tutorial, creará un tipo de recurso users, una acción personalizada ping y una acción personalizada users/contextAction que se realizarán en un contexto de un recurso personalizado users. Para cada tipo de recurso y acción, proporcione un punto de conexión que apunte a la función con el nombre proporcionado en createUiDefinition.json. Especifique routingType como Proxy,Cache para los tipos de recurso y Proxy para las acciones:

{
  "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'))]"
  ]
}

El ejemplo de mainTemplate.json completo se puede encontrar en Referencia: Artefacto de plantilla de implementación.

Ver definición de artefacto

Para definir una interfaz de usuario que incluya acciones personalizadas y recursos personalizados en la aplicación administrada, debe crear el artefacto viewDefinition.json. Para más información sobre el artefacto de definición de vistas, consulte Artefacto de definición de vistas en Azure Managed Applications.

En este tutorial, definirá:

  • Una página de información general con un botón de la barra de herramientas que representa una acción personalizada TestAction con entrada de texto básica.
  • Una página de usuarios que representa un tipo de recurso personalizado users.
  • Una acción de recursos personalizada users/contextAction en la página de usuarios que se realizará en un contexto de recurso personalizado de tipo users.

En el ejemplo siguiente se muestra la configuración de vista de una página de información general:

{
    "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"
      }]
    }
  }

En el ejemplo siguiente se incluye la configuración de la página de recursos de usuarios con la acción de recursos 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 }
      ]
    }
  }

El ejemplo de viewDefinition.json completo se puede encontrar en Referencia: Artefacto de definición de vistas.

Definición de aplicación administrada

Empaquete los siguientes artefactos de aplicación administrada en un archivo ZIP y cárguelo en el almacenamiento:

  • createUiDefinition.json
  • mainTemplate.json
  • viewDefinition.json

Todos los archivos deben estar en el nivel raíz. El paquete con artefactos se puede almacenar en cualquier almacenamiento, por ejemplo, un blob de GitHub o un blob de una cuenta de Azure Storage. Este es un script para cargar el paquete de aplicación en la cuenta de almacenamiento:

$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

Ejecute el siguiente script de la CLI de Azure o siga los pasos descritos en Azure Portal para implementar una definición de aplicación administrada del catálogo de servicios:

Para ejecutar este ejemplo, instale la versión más reciente de la CLI de Azure. Para empezar, ejecute az login para crear una conexión con Azure.

Los ejemplos de la CLI de Azure están escritos para el shell bash. Para ejecutar este ejemplo en Windows PowerShell o en el símbolo del sistema, es posible que necesite cambiar algunos elementos del 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"

Instancia de la aplicación administrada

Una vez implementada la definición de la aplicación administrada, ejecute el siguiente script o siga los pasos descritos en Azure Portal para implementar la instancia de la aplicación administrada con el proveedor 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\"}}"

Acciones y recursos personalizados

Una vez implementada la instancia de la aplicación del catálogo de servicios, tendrá dos nuevos grupos de recursos. El primer grupo de recursos applicationGroup contiene una instancia de la aplicación administrada y el segundo grupo de recursos managedResourceGroup contiene los recursos de la aplicación administrada, incluido el proveedor personalizado.

Application resource groups

Puede ir a la instancia de la aplicación administrada y realizar una acción personalizada en la página de información general, crear un recurso personalizado de usuarios en la página de usuarios y ejecutar una acción de contexto personalizada en un recurso personalizado.

  • Vaya a la página de información general y haga clic en el botón "Ping Action" (Acción ping):

Perform custom action

  • Vaya a la página de usuarios y haga clic en el botón "Agregar". Proporcione entradas para crear un recurso y envíe el formulario:

Screenshot shows the Add button selected from Users.

  • Vaya a la página de usuarios, seleccione un recurso "users" y haga clic en "Custom Context Action" (Acción de contexto personalizado):

Screenshot shows Custom Context Action selected.

Limpieza de recursos

En los pasos anteriores, creó recursos de Azure en un grupo de recursos. Si no cree que vaya a necesitar estos recursos en el futuro, puede eliminarlos mediante la eliminación del grupo de recursos.

En el menú de Azure Portal o la página Inicio, seleccione Grupos de recursos. En la página Grupos de recursos, seleccione myResourceGroup.

En la página myResourceGroup, asegúrese de que los recursos enumerados sean los que desea eliminar.

Seleccione Eliminar grupo de recursos, escriba myResourceGroup en el cuadro de texto para confirmar y, después, seleccione Eliminar.

¿Busca ayuda?

Si tiene preguntas sobre Azure Managed Applications, puede probar a hacer preguntas en Stack Overflow con la etiqueta azure-managed-app o en Microsoft Q&A con la etiqueta azure-managed-application. Puede que ya se haya formulado y respondido una pregunta similar, así que compruébelo antes de publicar la suya. Use las etiquetas correspondientes para recibir una respuesta más rápida.

Pasos siguientes

Para publicar la aplicación administrada en Azure Marketplace, consulte Aplicaciones administradas de Azure en Marketplace.

Más información sbre los proveedores personalizados de Azure.