Tutoriel : Créer une application managée avec des actions et des ressources personnalisées

Dans ce tutoriel, vous allez créer votre propre application managée avec des actions et des ressources personnalisées. L’application managée contient une action personnalisée dans la page Overview, un type de ressource personnalisé affiché sous la forme d’un élément de menu distinct dans Table of Content, et une action contextuelle personnalisée dans la page des ressources personnalisées.

Ce tutoriel comprend les étapes suivantes :

  • Créer un fichier de définition d’interface utilisateur pour la création d’une instance d’application managée
  • Créer un modèle de déploiement avec un fournisseur personnalisé Azure, un compte Stockage Azure et une fonction Azure
  • Créer un artefact de définition de vue avec des actions et des ressources personnalisées
  • Déployer une définition d’application managée
  • Déployer une instance d’application managée
  • Exécuter des actions personnalisées et créer des ressources personnalisées

Prérequis

Pour suivre ce tutoriel, vous devez savoir :

Définition d’interface utilisateur

Dans ce tutoriel, vous allez créer une application managée et son groupe de ressources managé contenant une instance de fournisseur personnalisé, un compte de stockage et une fonction. La fonction Azure utilisée dans cet exemple implémente une API qui gère des opérations de fournisseur personnalisé pour des actions et des ressources. Le compte Stockage Azure est utilisé comme stockage de base pour vos ressources de fournisseur personnalisé.

La définition de l’interface utilisateur pour la création d’une instance d’application managée comprend des éléments d’entrée funcname et storagename. Le nom du compte de stockage et le nom de la fonction doivent être globalement uniques. Par défaut, les fichiers de fonction seront déployés à partir d’un exemple de package de fonction, mais vous pouvez changer cela en ajoutant un élément d’entrée pour un lien de package dans 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
}

et une sortie dans createUiDefinition.json :

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

L’exemple createUiDefinition.json complet se trouve dans Référence : Artefacts des éléments d’interface utilisateur.

Modèle avec fournisseur personnalisé

Pour créer une instance d’application managée avec un fournisseur personnalisé, vous devez définir une ressource de fournisseur personnalisé avec le nom public et le type Microsoft.CustomProviders/resourceProviders dans votre fichier mainTemplate.json. Dans cette ressource, vous définissez les types de ressources et les actions de votre service. Pour déployer des instances de fonction Azure et de compte Stockage Azure, définissez des ressources de type Microsoft.Web/sites et Microsoft.Storage/storageAccounts, respectivement.

Dans ce tutoriel, vous allez créer un type de ressource users, une action personnalisée ping, et une action personnalisée users/contextAction qui sera exécutée dans le contexte d’une ressource personnalisée users. Pour chaque type de ressource et action, fournissez un point de terminaison pointant vers la fonction nommée dans createUiDefinition.json. Comme routingType, affectez la valeur Proxy,Cache pour les types de ressources et Proxy pour les actions :

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

L’exemple mainTemplate.json complet se trouve dans Référence : Artefact de modèle de déploiement.

Afficher un artefact de définition

Pour définir une interface utilisateur qui comprend des actions personnalisées et des ressources personnalisées dans votre application managée, vous devez créer un artefact viewDefinition.json. Pour plus d’informations sur les artefacts de définition de vue, consultez Artefact de définition de vue dans Applications managées Azure.

Dans ce tutoriel, vous allez définir :

  • Une page Overview avec un bouton de barre d’outils qui représente une action personnalisée TestAction avec une entrée de texte de base.
  • Une page Users qui représente un type de ressource personnalisé users.
  • Une action de ressource personnalisée users/contextAction dans la page Users qui sera exécutée dans un contexte de ressource personnalisée de type users.

L’exemple suivant illustre la configuration de vue pour une page « Overview » :

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

L’exemple ci-dessous comprend la configuration de la page de ressources « Users » avec l’action de ressource personnalisée :

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

L’exemple viewDefinition.json complet se trouve dans Référence : Artefact de définition de vue.

Définition d’application managée

Empaquetez les artefacts d’application managée suivants dans une archive zip et chargez-les dans le stockage :

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

Tous les fichiers doivent se trouver au niveau racine. Le package avec les artefacts peut être stocké dans n’importe quel stockage, par exemple un objet blob GitHub ou un objet blob de compte Stockage Azure. Voici un script permettant de charger le package d’application dans un compte de stockage :

$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

Exécutez le script Azure CLI ci-dessous ou effectuez les étapes dans le portail Azure pour déployer une définition d’application managée du catalogue de services :

Pour exécuter cet exemple, installez la dernière version d’Azure CLI. Pour démarrer, exécutez az login pour créer une connexion avec Azure.

Des exemples pour l’interface CLI sont écrits pour l’interpréteur de commandes bash. Pour exécuter cet exemple dans Windows PowerShell ou à une invite de commandes, vous devrez peut-être modifier certains éléments du 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"

Instance d’application managée

Quand la définition d’application managée est déployée, exécutez le script ci-dessous ou effectuez les étapes dans le portail Azure pour déployer votre instance d’application managée avec un fournisseur personnalisé :

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\"}}"

Actions et ressources personnalisées

Une fois l’instance d’application de catalogue de services déployée, vous avez deux nouveaux groupes de ressources. Le premier groupe de ressources applicationGroup contient une instance de l’application managée, tandis que le deuxième groupe de ressources managedResourceGroup contient les ressources pour l’application managée, notamment le fournisseur personnalisé.

Application resource groups

Vous pouvez accéder à l’instance d’application managée et effectuer une action personnalisée dans la page « Overview », créer une ressource personnalisée users dans la page « Users » et exécuter une action de contexte personnalisée sur une ressource personnalisée.

  • Accédez à la page « Overview » et cliquez sur le bouton « Ping Action » :

Perform custom action

  • Accédez à la page « Users » et cliquez sur le bouton « Add ». Fournissez des entrées pour la création d’une ressource et envoyez le formulaire :

Screenshot shows the Add button selected from Users.

  • Accédez à la page « Users », sélectionnez une ressource « users » et cliquez sur « Custom Context Action » :

Screenshot shows Custom Context Action selected.

Nettoyer les ressources

Au cours des étapes précédentes, vous avez créé des ressources Azure au sein d’un groupe de ressources. Si vous ne pensez pas avoir besoin de ces ressources à l’avenir, vous pouvez les supprimer en supprimant le groupe de ressources.

Dans le menu ou la page d’accueil du portail Azure, sélectionnez Groupes de ressources. Ensuite, dans la page Groupes de ressources, sélectionnez myResourceGroup.

Dans la page myResourceGroup, assurez-vous que les ressources répertoriées sont bien celles que vous souhaitez supprimer.

Sélectionnez Supprimer le groupe de ressources, tapez myResourceGroup dans la zone de texte pour confirmer, puis sélectionnez Supprimer.

Besoin d’aide

Si vous avez des questions sur les applications managées Azure, vous pouvez essayer de demander sur Stack Overflow avec l’étiquette azure-managed-app ou sur Microsoft Q&A avec l’étiquette azure-managed-application. Avant de la publier, vérifiez si votre réponse a déjà été posée et a déjà reçu une réponse. Pour une réponse plus rapide, utilisez les étiquettes appropriées.

Étapes suivantes

Pour publier votre application gérée sur la Place de marché Microsoft Azure, consultez Applications gérées Azure sur la Place de marché.

Apprenez-en davantage sur les fournisseurs personnalisés Azure.