Share via


Esercitazione: Creare un'applicazione gestita con azioni e risorse personalizzate

Questa esercitazione illustra come creare un'applicazione gestita con azioni e risorse personalizzate. L'applicazione gestita conterrà un'azione personalizzata nella pagina Overview, un tipo di risorsa personalizzata visualizzato come voce di menu separata in Table of Content e un'azione contestuale personalizzata nella pagina di risorse personalizzate.

Questa esercitazione include i passaggi seguenti:

  • Creare un file di definizione dell'interfaccia utente per la creazione di un'istanza di applicazione gestita
  • Creare un modello di distribuzione con un provider personalizzato di Azure, un account di archiviazione di Azure e una funzione di Azure
  • Creare l'artefatto di definizione delle visualizzazioni con azioni e risorse personalizzate
  • Distribuire una definizione di applicazione gestita
  • Distribuire un'istanza di applicazione gestita
  • Eseguire azioni personalizzate e creare risorse personalizzate

Prerequisiti

Per completare questa esercitazione, è necessario sapere come:

Definizione di interfaccia utente

In questa esercitazione verrà creata un'applicazione gestita e il relativo gruppo di risorse gestite conterrà un'istanza del provider personalizzato, un account di archiviazione e una funzione. La funzione di Azure usata in questo esempio implementa un'API che gestisce le operazioni del provider personalizzato per azioni e risorse. L'account di archiviazione di Azure viene usato come risorsa di archiviazione di base per le risorse del provider personalizzato.

La definizione dell'interfaccia utente per la creazione di un'istanza di applicazione gestita include gli elementi di input funcname e storagename. Il nome dell'account di archiviazione e il nome della funzione devono essere globalmente univoci. Per impostazione predefinita, i file della funzione verranno distribuiti dal pacchetto di funzioni di esempio, che è tuttavia possibile cambiare aggiungendo un elemento di input per il collegamento a un pacchetto in 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
}

Con l'output in createUiDefinition.json:

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

L'esempio createUiDefinition.json completo è disponibile in Riferimento: Elementi dell'interfaccia utente.

Modello con provider personalizzato

Per creare un'istanza di applicazione gestita con un provider personalizzato, è necessario definire una risorsa provider personalizzato con il nome public e il tipo Microsoft.CustomProviders/resourceProviders nel file mainTemplate.json. In tale risorsa si definiscono i tipi di risorse e le azioni per il servizio. Per distribuire le istanze della funzione di Azure e dell'account di archiviazione di Azure, definire rispettivamente le risorse di tipo Microsoft.Web/sites e Microsoft.Storage/storageAccounts.

In questa esercitazione verranno creati un tipo di risorsa users, un'azione personalizzata pinge un'azione personalizzata users/contextAction da eseguire nel contesto di una risorsa personalizzata users. Per ogni tipo di risorsa e azione fornire un endpoint che punta alla funzione con il nome specificato in createUiDefinition.json. Specificare routingType come Proxy,Cache per i tipi di risorsa e Proxy per le azioni:

{
  "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'esempio mainTemplate.json completo è disponibile in Riferimento: Artefatto del modello di distribuzione.

Artefatto di definizione delle visualizzazioni

Per definire l'interfaccia utente che include azioni personalizzate e risorse personalizzate nell'applicazione gestita, è necessario creare l'artefatto viewDefinition.json. Per altre informazioni sull'artefatto di definizione delle visualizzazioni, vedere Artefatto di definizione delle visualizzazioni nelle applicazioni gestite di Azure.

In questa esercitazione definire:

  • Una pagina Overview con un pulsante della barra degli strumenti che rappresenta un'azione personalizzata TestAction con un input di testo di base.
  • Una pagina Users che rappresenta un tipo di risorsa personalizzato users.
  • Un'azione di risorsa personalizzata users/contextAction nella pagina Users che verrà eseguita nel contesto di una risorsa personalizzata di tipo users.

L'esempio seguente illustra la configurazione delle visualizzazioni per una pagina "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'esempio seguente include la configurazione della pagina di risorse "Users" con l'azione di risorsa personalizzata:

{
    "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'esempio viewDefinition.json completo è disponibile in Riferimento: Artefatto di definizione della vista.

Definizione dell'applicazione gestita

Inserire i seguenti artefatti dell'applicazione gestita in un archivio ZIP e caricarlo nella risorsa di archiviazione:

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

Tutti i file devono trovarsi al livello radice. Il pacchetto con gli artefatti può essere archiviato in qualsiasi risorsa di archiviazione, ad esempio BLOB di GitHub o BLOB dell'account di archiviazione di Azure. Ecco uno script per caricare il pacchetto dell'applicazione nell'account di archiviazione:

$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

Eseguire il seguente script dell'interfaccia della riga di comando di Azure oppure seguire i passaggi descritti nel portale di Azure per distribuire una definizione di applicazione gestita del catalogo di servizi:

Per eseguire questo esempio, installare l'ultima versione dell'interfaccia della riga di comando di Azure. Per iniziare, eseguire az login per creare una connessione con Azure.

Gli esempi per l'interfaccia della riga di comando di Azure sono scritti per la shell bash. Per eseguire questo esempio in Windows PowerShell o dal prompt dei comandi, può essere necessario cambiare elementi dello 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"

Istanza di applicazione gestita

Quando viene distribuita la definizione di applicazione gestita, eseguire lo script seguente o seguire i passaggi descritti nel portale di Azure per distribuire l'istanza di applicazione gestita con il provider personalizzato:

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

Azioni e risorse personalizzate

Dopo la distribuzione dell'istanza di applicazione del catalogo di servizi, sono disponibili due nuovi gruppi di risorse. Il primo gruppo di risorse, applicationGroup, contiene un'istanza dell'applicazione gestita e il secondo, managedResourceGroup, contiene le risorse per l'applicazione gestita, incluso il provider personalizzato.

Application resource groups

È possibile passare all'istanza di applicazione gestita ed eseguire un'azione personalizzata nella pagina "Overview", creare la risorsa personalizzata users nella pagina "Users" ed eseguire un'azione contestuale personalizzata nella risorsa personalizzata.

  • Passare alla pagina "Overview" e fare clic sul pulsante "Ping Action":

Perform custom action

  • Passare alla pagina "Users" e fare clic sul pulsante "Add". Specificare gli input per la creazione di una risorsa e inviare il modulo:

Screenshot shows the Add button selected from Users.

  • Passare alla pagina "Users", selezionare una risorsa "users" e fare clic su "Custom Context Action":

Screenshot shows Custom Context Action selected.

Pulire le risorse

Nei passaggi precedenti sono state create risorse di Azure in un gruppo di risorse. Se non si prevede di aver bisogno di queste risorse in futuro, è possibile eliminarle eliminando il gruppo di risorse.

Nel menu del portale di Azure o nella pagina Home selezionare Gruppi di risorse. Quindi, nella pagina Gruppi di risorse selezionare myResourceGroup.

Nella pagina myResourceGroup assicurarsi che le risorse elencate siano quelle da eliminare.

Selezionare Elimina gruppo di risorse, digitare myResourceGroup nella casella di testo per confermare e quindi selezionare Elimina.

Assistenza

Per domande sulle applicazioni gestite di Azure, è possibile provare a porre domande su Stack Overflow con tag azure-managed-app o Microsoft Q&A con tag azure-managed-application. È possibile che siano già state fornite risposte a domande simili, quindi verificare prima di pubblicarle. Usare i rispettivi tag per una risposta più rapida.

Passaggi successivi

Per pubblicare l'applicazione gestita in Azure Marketplace, vedere Applicazioni gestite di Azure nel Marketplace.

Altre informazioni sui provider personalizzati di Azure.