Zelfstudie: Beheerde toepassing maken met aangepaste acties en resources

In deze zelfstudie maakt u uw eigen beheerde toepassing met aangepaste acties en resources. De beheerde toepassing bevat een aangepaste actie op de pagina Overview, een aangepast resourcetype dat wordt weer gegeven als een afzonderlijk menu-item in Table of Content en een aangepaste contextactie op de aangepaste resourcepagina.

Deze zelfstudie bevat de volgende stappen:

  • Een definitiebestand ontwerpen van de gebruikersinterface voor het maken van een exemplaar van een beheerde toepassing
  • Een implementatiesjabloon ontwerpen met de aangepaste Azure-provider, het Azure Storage-account en een Azure-functie
  • Het artefact weergavedefinitie ontwerpen met aangepaste acties en resources
  • Een definitie voor een beheerde toepassing implementeren
  • Een exemplaar van een beheerde toepassing implementeren
  • Aangepaste acties uitvoeren en aangepaste resources maken

Vereisten

Voor het voltooien van deze zelfstudie moet u het volgende weten:

Definitie gebruikersinterface

In deze zelfstudie maakt u een beheerde toepassing. De bijbehorende beheerde resourcegroep bevat een aangepast providerexemplaar, een opslagaccount en een functie. Met de Azure-functie die in dit voorbeeld wordt gebruikt, wordt een API geïmplementeerd die voor acties en resources aangepaste providerbewerkingen verwerkt. Het Azure Storage-account wordt gebruikt als basisopslag voor de aangepaste providerresources.

De definitie van de gebruikersinterface voor het maken van een exemplaar van een beheerde toepassing bevat de invoerelementen funcname en storagename. De naam van het opslagaccount en de functienaam moeten globaal uniek zijn. Standaard worden functiebestanden geïmplementeerd op basis van het pakket met voorbeeldfuncties. U kunt dit wijzigen door een invoerelement voor een pakketkoppeling toe te voegen in 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
}

en een uitvoer in createUiDefinition.json:

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

Het volledige createUiDefinition.json-voorbeeld vindt u in Reference: Artefacten van gebruikersinterface-elementen.

Sjabloon met aangepaste provider

Als u een exemplaar van een beheerde toepassing wilt maken met een aangepaste provider, moet u in uw mainTemplate.json een aangepaste providerresource definiëren met de naam public en het type Microsoft.CustomProviders/resourceProviders. In die resource definieert u de resourcetypen en acties voor uw service. Als u exemplaren van de Azure-functie en het Azure Storage-account wilt implementeren, moet u resources van het type Microsoft.Web/sites respectievelijk Microsoft.Storage/storageAccounts definiëren.

In deze zelfstudie maakt u een resourcetype users, een aangepaste actie ping en een aangepaste actie users/contextAction, die worden uitgevoerd in een context van een aangepaste resource users. Voor elk resourcetype en elke actie geeft u een eindpunt op dat verwijst naar de functie met de naam die is opgegeven in createUiDefinition.json. Geef routingType op als Proxy,Cache voor resourcetypen en Proxy voor acties:

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

Het volledige mainTemplate.json-voorbeeld vindt u in Reference: Deployment template artifact.

Definitie-artefact weergeven

Als u een gebruikersinterface wilt definiëren waar in uw beheerde toepassing aangepaste acties en aangepaste resources zijn opgenomen, moet u artefact viewDefinition.json ontwerpen. Zie Artefact weergavedefinitie in Azure Managed Applications voor meer informatie over het artefact weergavedefinitie.

In deze zelfstudie definieert u het volgende:

  • Een pagina Overzicht met een werkbalkknop waarmee de aangepaste actie TestAction wordt aangegeven met de eenvoudige tekstinvoer.
  • Een pagina Gebruikers waarmee een aangepast resourcetype users wordt aangegeven.
  • Een aangepaste resourceactie users/contextAction op de pagina Gebruikers die wordt uitgevoerd in een context van een aangepaste resource van het type users.

In het volgende voorbeeld ziet u de weergaveconfiguratie voor een pagina Overzicht:

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

Het onderstaande voorbeeld bevat de configuratie van de resourcespagina Gebruikers met de aangepaste resourceactie:

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

Het volledige viewDefinition.json-voorbeeld vindt u in Reference: View definition artifact.

Definitie van beheerde toepassingen

Verpak de volgende beheerde-toepassingsartefacten in een zip-archief en upload het naar opslag:

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

Alle bestanden moeten op hoofdniveau zijn. Het pakket met artefacten kan in elke opslagruimte worden opgeslagen, bijvoorbeeld in GitHub-blob of Azure Storage-accountblob. Hier volgt een script voor het uploaden van het toepassingspakket naar het opslagaccount:

$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

Voer het Azure CLI-script hieronder uit of volg de stappen in Azure Portal om een definitie van een door een servicecatalogus beheerde toepassing te implementeren:

Als u dit voorbeeld wilt uitvoeren, installeert u de nieuwste versie van de Azure CLI. Voer eerst az login uit om een verbinding op te zetten met Azure.

Voorbeelden voor de Azure CLI zijn geschreven voor de bash-shell. Als u dit voorbeeld wilt uitvoeren in Windows PowerShell of opdrachtprompt, moet u mogelijk elementen van het script wijzigen.

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"

Exemplaar van beheerde toepassing

Wanneer de definitie van de beheerde toepassing is geïmplementeerd, voert u het onderstaande script uit of volgt u de stappen in Azure Portal om uw exemplaar van de beheerde toepassing te implementeren met een aangepaste provider:

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

Aangepaste acties en resources

Nadat het exemplaar van de servicecatalogustoepassing is geïmplementeerd, hebt u twee nieuwe resourcegroepen. De eerste de resource groep, applicationGroup, bevat een exemplaar van de beheerde toepassing, de tweede resourcegroep, managedResourceGroup, bevat de resources voor de beheerde toepassing, inclusief de aangepaste provider.

Application resource groups

U kunt naar het exemplaar van de beheerde toepassing gaan en een aangepaste actie uitvoeren op de pagina Overview, de aangepaste resource users maken op de pagina Users en de aangepaste contextactie uitvoeren voor de aangepaste resource.

  • Ga naar de pagina Overview en klik op de knop Ping Action:

Perform custom action

  • Ga naar de pagina Users en klik op de knop Add. Geef invoer voor het maken van een resource op en verzend het formulier:

Screenshot shows the Add button selected from Users.

  • Ga naar de pagina Users, selecteer een resource voor users en klik op Custom Context Action:

Screenshot shows Custom Context Action selected.

Resources opschonen

In de voorgaande stappen hebt u Azure-resources in een resourcegroep gemaakt. Als u deze resources in de toekomst waarschijnlijk niet nodig hebt, kunt u ze verwijderen door de resourcegroep te verwijderen.

Selecteer Resourcegroepen in het menu of op de beginpagina van de Azure-portal. Selecteer myResourceGroup op de pagina Resourcegroepen.

Controleer op de pagina myResourceGroup of de weergegeven resources de resources zijn die u wilt verwijderen.

Selecteer Resourcegroep verwijderen, typ myResourceGroup in het tekstvak om dit te bevestigen en selecteer Verwijderen.

Hulp nodig?

Als u vragen hebt over Azure Managed Applications, kunt u het stellen op Stack Overflow met tag azure-beheerde app of Microsoft Q&A met tag azure-beheerde toepassing. Misschien is er een soortgelijke vraag gesteld en beantwoord, dus controleer dit eerst vóór u een vraag stelt. Gebruik de respectieve tags voor een snellere reactie.

Volgende stappen

Zie Door Azure beheerde toepassingen in Marketplace voor het in Azure Marketplace publiceren van uw beheerde toepassing.

Meer informatie over aangepaste Azure-providers.