Samouczek: tworzenie aplikacji zarządzanej za pomocą akcji niestandardowych i zasobów

W tym samouczku utworzysz własną aplikację zarządzaną przy użyciu akcji niestandardowych i zasobów. Aplikacja zarządzana będzie zawierać akcję niestandardową na Overview stronie, niestandardowy typ zasobu wyświetlany jako oddzielny element menu w Table of Content programie i niestandardową akcję kontekstową na stronie zasobu niestandardowego.

Ten samouczek obejmuje następujące kroki:

  • Tworzenie pliku definicji interfejsu użytkownika do tworzenia wystąpienia aplikacji zarządzanej
  • Tworzenie szablonu wdrożenia przy użyciu niestandardowego dostawcy platformy Azure, konta usługi Azure Storage i funkcji platformy Azure
  • Tworzenie artefaktu definicji widoku z akcjami niestandardowymi i zasobami
  • Wdrażanie definicji aplikacji zarządzanej
  • Wdrażanie wystąpienia aplikacji zarządzanej
  • Wykonywanie akcji niestandardowych i tworzenie zasobów niestandardowych

Wymagania wstępne

Aby ukończyć ten samouczek, musisz wiedzieć:

Definicja interfejsu użytkownika

W tym samouczku utworzysz aplikację zarządzaną, a jej zarządzana grupa zasobów będzie zawierać niestandardowe wystąpienie dostawcy, konto magazynu i funkcję. Funkcja platformy Azure używana w tym przykładzie implementuje interfejs API, który obsługuje operacje niestandardowego dostawcy dla akcji i zasobów. Konto usługi Azure Storage jest używane jako podstawowy magazyn dla zasobów dostawcy niestandardowego.

Definicja interfejsu użytkownika do tworzenia wystąpienia aplikacji zarządzanej obejmuje funcname elementy wejściowe i storagename . Nazwa konta magazynu i nazwa funkcji muszą być globalnie unikatowe. Domyślnie pliki funkcji zostaną wdrożone z przykładowego pakietu funkcji, ale można go zmienić, dodając element wejściowy linku pakietu w pliku 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
}

i dane wyjściowe w pliku createUiDefinition.json:

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

Kompletny przykład createUiDefinition.json można znaleźć w artykule Reference: User interface elements artifacts (Dokumentacja: artefakty elementów interfejsu użytkownika).

Szablon z dostawcą niestandardowym

Aby utworzyć wystąpienie aplikacji zarządzanej za pomocą niestandardowego dostawcy, należy zdefiniować zasób dostawcy niestandardowego o nazwie publicznej i wpisz Microsoft.CustomProviders/resourceProviders w pliku mainTemplate.json. W tym zasobie zdefiniujesz typy zasobów i akcje dla usługi. Aby wdrożyć wystąpienia funkcji platformy Azure i konta usługi Azure Storage, zdefiniuj zasoby typu Microsoft.Web/sites i Microsoft.Storage/storageAccounts odpowiednio.

W tym samouczku utworzysz jeden users typ zasobu, ping akcję niestandardową i users/contextAction akcję niestandardową, która będzie wykonywana w kontekście zasobu niestandardowego users . Dla każdego typu zasobu i akcji podaj punkt końcowy wskazujący funkcję o nazwie podanej w pliku createUiDefinition.json. Określ typ routingu dla Proxy,Cache typów zasobów i Proxy akcji:

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

Kompletny przykład mainTemplate.json można znaleźć w artykule Reference: Deployment template artifact (Dokumentacja: artefakt szablonu wdrożenia).

Wyświetlanie artefaktu definicji

Aby zdefiniować interfejs użytkownika zawierający akcje niestandardowe i zasoby niestandardowe w aplikacji zarządzanej, musisz utworzyć artefakt viewDefinition.json . Aby uzyskać więcej informacji na temat artefaktu definicji widoku, zobacz Wyświetlanie artefaktu definicji w aplikacjach zarządzanych platformy Azure.

W tym samouczku zdefiniujesz następujące elementy:

  • Strona Przegląd z przyciskiem paska narzędzi, który reprezentuje akcję TestAction niestandardową z podstawowymi danymi wejściowymi tekstowymi.
  • Strona Użytkownicy reprezentująca niestandardowy typ userszasobu.
  • Niestandardowa akcja users/contextAction zasobu na stronie Użytkownicy , która będzie wykonywana w kontekście niestandardowego zasobu typu users.

W poniższym przykładzie przedstawiono konfigurację widoku dla strony "Przegląd":

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

Poniższy przykład obejmuje konfigurację strony zasobów "Użytkownicy" z niestandardową akcją zasobu:

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

Kompletny przykład viewDefinition.json można znaleźć w artykule Reference: View definition artifact (Dokumentacja: wyświetlanie artefaktu definicji).

Definicja aplikacji zarządzanej

Spakuj następujące artefakty aplikacji zarządzanej, aby spakować archiwum i przekazać je do magazynu:

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

Wszystkie pliki muszą być na poziomie głównym. Pakiet z artefaktami można przechowywać w dowolnym magazynie, na przykład w obiekcie blob usługi GitHub lub obiekcie blob konta usługi Azure Storage. Oto skrypt umożliwiający przekazanie pakietu aplikacji na konto magazynu:

$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

Uruchom poniższy skrypt interfejsu wiersza polecenia platformy Azure lub wykonaj kroki opisane w witrynie Azure Portal, aby wdrożyć definicję aplikacji zarządzanej w katalogu usług:

Aby uruchomić ten przykład, zainstaluj najnowszą wersję interfejsu wiersza polecenia platformy Azure. Aby rozpocząć, uruchom polecenie az login w celu nawiązania połączenia z platformą Azure.

Przykłady dla interfejsu wiersza polecenia platformy Azure są napisane dla powłoki bash . Aby uruchomić ten przykład w programie Windows PowerShell lub wierszu polecenia, może być konieczne zmianę elementów skryptu.

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"

Wystąpienie aplikacji zarządzanej

Po wdrożeniu definicji aplikacji zarządzanej uruchom poniższy skrypt lub wykonaj kroki opisane w witrynie Azure Portal, aby wdrożyć wystąpienie aplikacji zarządzanej za pomocą dostawcy niestandardowego:

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

Akcje niestandardowe i zasoby

Po wdrożeniu wystąpienia aplikacji katalogu usług masz dwie nowe grupy zasobów. Pierwsza grupa zasobów zawiera wystąpienie aplikacji zarządzanej, druga grupa applicationGroupmanagedResourceGroup zasobów przechowuje zasoby dla aplikacji zarządzanej, w tym dostawcę niestandardowego.

Application resource groups

Możesz przejść do wystąpienia aplikacji zarządzanej i wykonać akcję niestandardową na stronie "Przegląd", utworzyć zasób niestandardowy użytkowników na stronie "Użytkownicy" i uruchomić niestandardową akcję kontekstu dla zasobu niestandardowego.

  • Przejdź do strony "Przegląd" i kliknij przycisk "Wyślij akcję ping":

Perform custom action

  • Przejdź do strony "Użytkownicy" i kliknij przycisk "Dodaj". Podaj dane wejściowe do utworzenia zasobu i prześlij formularz:

Screenshot shows the Add button selected from Users.

  • Przejdź do strony "Użytkownicy", wybierz zasób "użytkownicy", a następnie kliknij pozycję "Niestandardowa akcja kontekstu":

Screenshot shows Custom Context Action selected.

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli nie będziesz już potrzebować tych zasobów w przyszłości, możesz je usunąć przez usunięcie grupy zasobów.

W menu witryny Azure Portal lub na stronie głównej wybierz pozycję Grupy zasobów. Następnie na stronie Grupy zasobów wybierz pozycję myResourceGroup.

Na stronie myResourceGroup upewnij się, że wymienione zasoby są tymi, które chcesz usunąć.

Wybierz pozycję Usuń grupę zasobów, wpisz myResourceGroup w polu tekstowym, aby potwierdzić, a następnie wybierz pozycję Usuń.

Szukasz pomocy

Jeśli masz pytania dotyczące aplikacji zarządzanych platformy Azure, możesz spróbować zadać pytanie w witrynie Stack Overflow z tagiem azure-managed-app lub Microsoft Q&A z tagiem azure-managed-application. Podobne pytanie mogło już zostać zadane i udzielono odpowiedzi, więc sprawdź najpierw przed opublikowaniem. Użyj odpowiednich tagów, aby szybciej odpowiedź.

Następne kroki

Aby opublikować aplikację zarządzaną w witrynie Azure Marketplace, zobacz Aplikacje zarządzane platformy Azure w witrynie Marketplace.

Dowiedz się więcej o dostawcach niestandardowych platformy Azure.