Udostępnij za pośrednictwem


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 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 lub potrzebujesz odpowiedzi na temat aplikacji zarządzanych platformy Azure, możesz opublikować pytanie w witrynie Stack Overflow za pomocą tagu azure-managed-app lub języka Microsoft Q&A z tagiem azure-managed-application.

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.