Udostępnij za pomocą


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 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ą i jej zarządzaną grupę zasobów 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 są wdrażane z przykładowego pakietu funkcji, ale można je zmienić, dodając element wejściowy linku pakietu w 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
}

Dane wyjściowe w 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 z dostawcą niestandardowym, należy zdefiniować zasób dostawcy niestandardowego o nazwie publicznej i wpisać Microsoft.CustomProviders/resourceProviders w 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ą wykonywaną w kontekście zasobu niestandardowego users . Dla każdego typu zasobu i akcji podaj punkt końcowy wskazujący funkcję o nazwie podanej w createUiDefinition.json. Określ wartości routingType dla Proxy,Cache typów zasobów i Proxy dla 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 Zasoby 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 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 następujący skrypt interfejsu wiersza polecenia platformy Azure lub wykonaj kroki opisane w witrynie Azure Portal, aby wdrożyć definicję aplikacji zarządzanej 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 następujący 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. Grupa applicationGroup zasobów zawiera wystąpienie aplikacji zarządzanej, a grupa managedResourceGroup zasobów przechowuje zasoby dla aplikacji zarządzanej, w tym dostawcę niestandardowego.

Grupy zasobów aplikacji

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 pozycji Przegląd i wybierz pozycję Akcja ping:

Wykonywanie akcji niestandardowej

  • Przejdź do pozycji Użytkownicy i wybierz pozycję Dodaj. Podaj dane wejściowe do utworzenia zasobu i prześlij formularz:

Zrzut ekranu przedstawia przycisk Dodaj wybrany z pozycji Użytkownicy.

  • Przejdź do pozycji Użytkownicy i wybierz zasób użytkowników, a następnie wybierz pozycję Niestandardowa akcja kontekstu:

Zrzut ekranu przedstawiający wybraną akcję kontekstu niestandardowego.

Czyszczenie zasobów

W poprzednich krokach utworzono zasoby platformy Azure w grupie zasobów. Jeśli nie oczekujesz, że te zasoby będą potrzebne w przyszłości, możesz je usunąć, usuwając grupę zasobów:

  1. W menu witryny Azure Portal lub stronie głównej wybierz pozycję Grupy> zasobówmyResourceGroup.

  2. W okienku myResourceGroup upewnij się, że wymienione zasoby są tymi, które chcesz usunąć.

  3. 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 lub potrzebujesz odpowiedzi na temat aplikacji zarządzanych platformy Azure, możesz opublikować pytanie w witrynie Stack Overflow

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.