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:

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 den Routingtyp (routingType) als Proxy,Cache (für Ressourcentypen) bzw. als 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 Typ users 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 eine verwaltete Dienstkataloganwendung 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 die verwaltete Anwendung 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 erste Ressourcengruppe (applicationGroup) enthält eine Instanz der verwalteten Anwendung. Die zweite Ressourcengruppe (managedResourceGroup) enthält die Ressourcen für die verwaltete Anwendung, einschließlich des benutzerdefinierten Anbieters.

Application resource groups

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.

  • Navigieren Sie zur Seite „Overview“ (Übersicht), und klicken Sie auf die Schaltfläche „Ping Action“ (Ping-Aktion):

Perform custom action

  • Navigieren Sie zur Seite „Users“ (Benutzer), und klicken Sie auf die Schaltfläche „Add“ (Hinzufügen). Geben Sie Werte für die Erstellung einer Ressource an, und übermitteln Sie das Formular:

Screenshot shows the Add button selected from Users.

  • Navigieren Sie zur Seite „Users“ (Benutzer), und klicken Sie auf „Custom Context Action“ (Benutzerdefinierte Kontextaktion):

Screenshot shows Custom Context Action selected.

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. Eine ähnliche Frage wurde möglicherweise bereits gestellt und beantwortet, weshalb Sie dies zunächst prüfen sollten, bevor Sie etwas posten. Verwenden Sie die entsprechenden Tags, um schneller eine Antwort zu erhalten.

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.