Tutorial: Erstellen einer verwalteten Anwendung mit benutzerdefinierten Aktionen und Ressourcen
In diesem Tutorial wird eine verwaltete Anwendung mit benutzerdefinierten Aktionen und Ressourcen erstellt. Die verwaltete Anwendung enthält eine benutzerdefinierte Aktion auf der Seite Overview
, einen benutzerdefinierten Ressourcentyp, der in Table of Content
als separates Menüelement angezeigt wird, und eine benutzerdefinierte Kontextaktion auf der Seite der benutzerdefinierten Ressource.
Das Tutorial umfasst folgende Schritte:
- Erstellen einer Definitionsdatei für die Benutzeroberfläche, um eine verwaltete Anwendungsinstanz zu erstellen
- Erstellen einer Bereitstellungsvorlage mit benutzerdefiniertem Azure-Anbieter, Azure Storage-Konto und Azure-Funktion
- Erstellen eines Artefakts für die Ansichtsdefinition mit benutzerdefinierten Aktionen und Ressourcen
- Bereitstellen einer Definition für die verwaltete Anwendung
- Bereitstellen einer Instanz der verwalteten Anwendung
- Ausführen benutzerdefinierter Aktionen und Erstellen benutzerdefinierter Ressourcen
Voraussetzungen
Für dieses Tutorial müssen Sie mit Folgendem vertraut sein:
- Erstellen und Veröffentlichen einer Definition für die verwaltete Anwendung
- Bereitstellen einer Dienstkatalog-App über das Azure-Portal
- Erstellen einer Benutzeroberfläche im Azure-Portal für die verwaltete Anwendung
- Funktionen des Artefakts für die Ansichtsdefinition
- Funktionen des benutzerdefinierten Azure-Anbieters
Benutzeroberflächendefinition
In diesem Tutorial wird eine verwaltete Anwendung erstellt, deren verwaltete Ressourcengruppe eine Instanz eines benutzerdefinierten Anbieters, ein Speicherkonto und eine Funktion enthält. Die in diesem Beispiel verwendete Azure-Funktion implementiert eine API zur Behandlung der Vorgänge des benutzerdefinierten Anbieters für Aktionen und Ressourcen. Ein Azure Storage-Konto wird als grundlegender Speicher für die Ressourcen Ihres benutzerdefinierten Anbieters verwendet.
Die Benutzeroberflächendefinition für die Erstellung einer verwalteten Anwendungsinstanz enthält die Eingabeelemente funcname
und storagename
. Der Name des Speicherkontos und der Funktion muss global eindeutig sein. Funktionsdateien werden standardmäßig über das Paket mit Beispielfunktionen bereitgestellt. Alternativ können Sie aber auch ein Eingabeelement für einen Paketlink in createUiDefinition.json hinzufügen:
{
"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
}
Und eine Ausgabe in createUiDefinition.json:
"funcname": "[steps('applicationSettings').funcname]",
"storageName": "[steps('applicationSettings').storagename]",
"zipFileBlobUri": "[steps('applicationSettings').zipFileBlobUri]"
Die vollständige Beispieldatei createUiDefinition.json finden Sie unter Reference: User interface elements artifact (Referenz: Artefakt für Benutzeroberflächenelemente).
Vorlage mit benutzerdefiniertem Anbieter
Um eine verwaltete Anwendungsinstanz mit benutzerdefiniertem Anbieter erstellen zu können, muss in der Datei mainTemplate.json eine benutzerdefinierte Anbieterressource mit dem Namen public und dem Typ Microsoft.CustomProviders/resourceProviders
definiert werden. In dieser Ressource werden die Ressourcentypen und Aktionen für Ihren Dienst definiert. Definieren Sie Ressourcen vom Typ Microsoft.Web/sites
und Microsoft.Storage/storageAccounts
, um Instanzen von Azure-Funktionen bzw. Azure Storage-Konten bereitzustellen.
In diesem Tutorial werden der Ressourcentyp users
, die benutzerdefinierte Aktion ping
und die benutzerdefinierte Aktion users/contextAction
erstellt, die im Kontext einer benutzerdefinierten Ressource vom Typ users
ausgeführt wird. Geben Sie für jeden Ressourcentyp und jede Aktion einen Endpunkt an, der auf die Funktion mit dem Namen verweist, der in der Datei createUiDefinition.json angegeben wurde. Geben Sie als Routingtyp (routingType
) Proxy,Cache
für Ressourcentypen bzw. Proxy
für Aktionen an:
{
"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'))]"
]
}
Die vollständige Beispieldatei mainTemplate.json finden Sie unter Reference: Deployment template artifact (Referenz: Artefakt für die Bereitstellungsvorlage).
Anzeigen des Definitionsartefakts
Um eine Benutzeroberfläche mit benutzerdefinierten Aktionen und benutzerdefinierten Ressourcen in der verwalteten Anwendung zu definieren, muss das Artefakt viewDefinition.json erstellt werden. Weitere Informationen zum Artefakt für die Ansichtsdefinition finden Sie unter Ansichtsdefinitionsartefakt in Azure Managed Applications.
In diesem Tutorial wird Folgendes definiert:
- Eine Übersichtsseite (Overview) mit einer Symbolleistenschaltfläche, die eine benutzerdefinierte Aktion (
TestAction
) mit einer einfachen Texteingabe darstellt. - Eine Benutzerseite (Users), die einen benutzerdefinierten Ressourcentyp (
users
) darstellt. - Eine benutzerdefinierte Ressourcenaktion (
users/contextAction
) auf der Seite Users, die im Kontext einer benutzerdefinierten Ressource vom Typusers
ausgeführt wird.
Das folgende Beispiel zeigt die Ansichtskonfiguration für eine Übersichtsseite:
{
"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"
}
]
}
}
Das folgende Beispiel enthält die Konfiguration der Ressourcenseite Users mit einer benutzerdefinierten Ressourcenaktion:
{
"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
}
]
}
}
Die vollständige Beispieldatei viewDefinition.json finden Sie unter Reference: View definition artifact (Referenz: Artefakt für die Ansichtsdefinition).
Definition der verwalteten Anwendung
Verpacken Sie die folgenden Artefakte für die verwaltete Anwendung in einem ZIP-Archiv, und laden Sie es in den Speicher hoch:
- createUiDefinition.json
- mainTemplate.json
- viewDefinition.json
Alle Dateien müssen sich auf der Stammebene befinden. Das Paket mit den Artefakten kann in einem beliebigen Speicher gespeichert werden – also etwa in einem GitHub-Blob oder in einem Azure Storage-Kontoblob. Hier sehen Sie ein Skript zum Hochladen des Anwendungspakets in das Speicherkonto:
$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
Führen Sie das folgende Azure CLI-Skript oder die entsprechenden Schritte im Azure-Portal aus, um eine Definition für verwaltete Dienstkataloganwendungen bereitzustellen:
Installieren Sie zum Ausführen dieses Beispiels die aktuelle Version der Azure-Befehlszeilenschnittstelle. Führen Sie zum Starten az login
aus, um eine Verbindung mit Azure herzustellen.
Beispiele für die Azure-Befehlszeilenschnittstelle sind für die bash
-Shell geschrieben. Wenn Sie dieses Beispiel in Windows PowerShell oder an der Eingabeaufforderung ausführen möchten, müssen Sie unter Umständen Elemente des Skripts ändern.
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"
Instanz der verwalteten Anwendung
Führen Sie nach der Bereitstellung der Definition für verwaltete Anwendungen das folgende Skript oder die entsprechenden Schritte im Azure-Portal aus, um die Instanz Ihrer verwalteten Anwendung mit einem benutzerdefinierten Anbieter bereitzustellen:
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\"}}"
Benutzerdefinierte Aktionen und Ressourcen
Nachdem die Instanz der Dienstkataloganwendung bereitgestellt wurde, verfügen Sie über zwei neue Ressourcengruppen. Die Ressourcengruppe applicationGroup
enthält eine Instanz der verwalteten Anwendung. Die Ressourcengruppe managedResourceGroup
enthält die Ressourcen für die verwaltete Anwendung, einschließlich des benutzerdefinierten Anbieters.
Sie können zu der Instanz der verwalteten Anwendung navigieren und auf der Übersichtsseite eine benutzerdefinierte Aktion ausführen, auf der Benutzerseite die benutzerdefinierte Ressource users (Benutzer) erstellen sowie die benutzerdefinierte Kontextaktion für die benutzerdefinierte Ressource ausführen.
- Wechseln Sie zu Übersicht, und wählen Sie Ping-Aktion aus:
- Navigieren Sie zu Benutzer, und wählen Sie Hinzufügen aus. Geben Sie Werte für die Erstellung einer Ressource an, und übermitteln Sie das Formular:
- Navigieren Sie zur Seite Benutzer, und wählen Sie eine Ressource vom Typ Benutzer und dann Benutzerdefinierte Kontextaktion aus:
Bereinigen von Ressourcen
In den vorherigen Schritten haben Sie Azure-Ressourcen in einer Ressourcengruppe erstellt. Wenn Sie diese Ressourcen in Zukunft nicht mehr benötigen, können Sie sie löschen, indem Sie die Ressourcengruppe löschen.
Wählen Sie im Azure-Portalmenü oder auf der Startseite die Option Ressourcengruppen aus. Wählen Sie auf der Seite Ressourcengruppen die Option myResourceGroup aus.
Stellen Sie auf der Seite myResourceGroup sicher, dass die Ressourcen aufgelistet sind, die Sie löschen möchten.
Wählen Sie die Option Löschen aus, geben Sie zur Bestätigung im Textfeld myResourceGroup ein, und wählen Sie anschließend Löschen aus.
Wenn Hilfe benötigt wird
Wenn Sie Fragen zu Azure Managed Applications haben, können Sie diese auf Stack Overflow mit dem Tag azure-managed-app
oder auf Microsoft Q&A mit dem Tag azure-managed-application
stellen.
Nächste Schritte
Informationen zum Veröffentlichen der verwalteten Anwendung im Azure Marketplace finden Sie unter Verwaltete Azure-Anwendungen im Marketplace.
Informieren Sie sich ausführlicher über benutzerdefinierte Azure-Anbieter.