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 contiene un'azione personalizzata nella pagina Overview
, un tipo di risorsa personalizzato visualizzato come voce di menu separata in Table of Content
e un'azione contestuale personalizzata nella pagina della risorsa personalizzata.
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:
- Creare e pubblicare una definizione di applicazione gestita.
- Distribuire un'app del catalogo di servizi tramite il portale di Azure.
- Creare l'interfaccia utente del portale di Azure per l'applicazione gestita.
- Usare le funzionalità dell'artefatto di definizione delle visualizzazioni.
- Usare le funzionalità del provider personalizzato di Azure.
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 vengono distribuiti dal pacchetto di funzioni di esempio, ma è possibile modificare questo comportamento 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
}
E l'output in createUiDefinition.json:
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"
L'esempio di createUiDefinition.json completo è disponibile in Informazioni di riferimento: Artefatto degli 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 nome public e 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 ping
e 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 risorse 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 di mainTemplate.json completo è disponibile in Informazioni di 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 tipousers
.
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 della 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 di viewDefinition.json completo è disponibile in Informazioni di riferimento: Artefatto di definizione delle visualizzazioni.
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. Lo script seguente consente di 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 lo script dell'interfaccia della riga di comando di Azure seguente oppure eseguire i passaggi 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 oppure eseguire i passaggi 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 gruppo di risorse applicationGroup
contiene un'istanza dell'applicazione gestita e il gruppo di risorse managedResourceGroup
contiene le risorse per l'applicazione gestita, incluso il provider personalizzato.
È 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 a Overview e selezionare Ping Action:
- Passare a Users e selezionare Add. Specificare gli input per la creazione di una risorsa e inviare il modulo:
- Passare a Users, selezionare una risorsa users e selezionare Custom Context Action:
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 eventuali dubbi sulle applicazioni gestite di Azure, è possibile pubblicare una domanda in Stack Overflow con il tag azure-managed-app
o in Microsoft Q&A con il tag azure-managed-application
.
Passaggi successivi
Per pubblicare l'applicazione gestita in Azure Marketplace, vedere Applicazioni gestite di Azure nel Marketplace.
Altre informazioni sui provider personalizzati di Azure.