Dela via


Självstudie: Skapa ett hanterat program med anpassade åtgärder och resurser

I den här självstudien skapar du ett eget hanterat program med anpassade åtgärder och resurser. Det hanterade programmet innehåller en anpassad åtgärd på Overview sidan, en anpassad resurstyp som visas som ett separat menyalternativ i Table of Content och en anpassad kontextåtgärd på den anpassade resurssidan.

Den här självstudien innehåller följande steg:

  • Skapa en definitionsfil för användargränssnittet för att skapa en hanterad programinstans
  • Skapa distributionsmall med Anpassad Azure-provider, Azure Storage-konto och Azure-funktion
  • Artefakt för redigeringsvydefinition med anpassade åtgärder och resurser
  • Distribuera en definition för ett hanterat program
  • Distribuera en instans av ett hanterat program
  • Utföra anpassade åtgärder och skapa anpassade resurser

Förutsättningar

För att slutföra den här självstudien behöver du veta:

Definition av användargränssnitt

I den här självstudien skapar du ett hanterat program och dess hanterade resursgrupp innehåller anpassad providerinstans, lagringskonto och funktion. Azure-funktionen som används i det här exemplet implementerar ett API som hanterar anpassade provideråtgärder för åtgärder och resurser. Azure Storage-kontot används som grundläggande lagring för dina anpassade providerresurser.

Användargränssnittsdefinitionen för att skapa en hanterad programinstans innehåller funcname och storagename indataelement. Lagringskontots namn och funktionsnamn måste vara globalt unika. Som standard distribueras funktionsfiler från exempelfunktionspaketet, men du kan ändra det genom att lägga till ett indataelement för en paketlänk i 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
}

Och utdata i createUiDefinition.json:

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

Det fullständiga createUiDefinition.json exempel finns i Referens: Elementartefakter för användargränssnitt.

Mall med anpassad provider

Om du vill skapa en hanterad programinstans med en anpassad provider måste du definiera en anpassad providerresurs med namnet offentligt och skriva Microsoft.CustomProviders/resourceProviders in din mainTemplate.json. I den resursen definierar du resurstyperna och åtgärderna för din tjänst. Om du vill distribuera Azure Function- och Azure Storage-kontoinstanser definierar du resurser av typen Microsoft.Web/sites respektive Microsoft.Storage/storageAccounts .

I den här självstudien skapar du en users resurstyp, ping anpassad åtgärd och users/contextAction anpassad åtgärd som utförs i en kontext av en users anpassad resurs. För varje resurstyp och åtgärd anger du en slutpunkt som pekar på funktionen med namnet i createUiDefinition.json. Ange som routingType Proxy,Cache för resurstyper och Proxy för åtgärder:

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

Det fullständiga mainTemplate.json exemplet finns i Artefakten Referens: Distributionsmall.

Visa definitionsartefakt

Om du vill definiera användargränssnitt som innehåller anpassade åtgärder och anpassade resurser i ditt hanterade program måste du skapa viewDefinition.json artefakt. Mer information om artefakt för vydefinition finns i Visa definitionsartefakt i Azure Managed Applications.

I den här självstudien definierar du:

  • En översiktssida med knapp i verktygsfältet som representerar en anpassad åtgärd TestAction med grundläggande textinmatning.
  • Sidan Användare som representerar en anpassad resurstyp users.
  • En anpassad resursåtgärd users/contextActionsidan Användare som ska utföras i en kontext av anpassad resurs av typen users.

I följande exempel visas visningskonfigurationen för en översiktssida:

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

I följande exempel ingår sidkonfiguration för användares resurser med anpassad resursåtgärd:

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

Det fullständiga viewDefinition.json exemplet finns i Referens: Visa definitionsartefakt.

Definition av hanterat program

Paketera följande hanterade programartefakter för att zip-arkivera och ladda upp det till lagring:

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

Alla filer måste vara på rotnivå. Paketet med artefakter kan lagras i valfri lagring, till exempel GitHub-blob eller Azure Storage-kontoblob. Här är ett skript för att ladda upp programpaketet till lagringskontot:

$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

Kör följande Azure CLI-skript eller följ stegen i Azure-portalen för att distribuera en definition av ett hanterat tjänstkatalogprogram:

Om du vill köra det här exemplet installerar du den senaste versionen av Azure CLI. Börja genom att köra az login för att upprätta en anslutning med Azure.

Exempel för Azure CLI skrivs för bash gränssnittet. Om du vill köra det här exemplet i Windows PowerShell eller kommandotolken kan du behöva ändra element i skriptet.

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"

Hanterad programinstans

När definitionen av hanterade program distribueras kör du följande skript eller följer stegen i Azure-portalen för att distribuera din hanterade programinstans med en anpassad 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\"}}"

Anpassade åtgärder och resurser

När programinstansen för tjänstkatalogen har distribuerats har du två nya resursgrupper. Resursgruppen applicationGroup innehåller en instans av det hanterade programmet och resursgruppen managedResourceGroup innehåller resurserna för det hanterade programmet, inklusive anpassad provider.

Programresursgrupper

Du kan gå till den hanterade programinstansen och utföra anpassad åtgärd på sidan Översikt, skapa anpassade användare på sidan Användare och köra anpassad kontextåtgärd på anpassad resurs.

  • Gå till Översikt och välj Pinga åtgärd:

Utföra anpassad åtgärd

  • Gå till Användare och välj Lägg till. Ange indata för att skapa en resurs och skicka formuläret:

Skärmbild som visar knappen Lägg till markerad från Användare.

  • Gå till Användare och välj en användarresurs och välj Anpassad kontextåtgärd:

Skärmbild som visar anpassad kontextåtgärd markerad.

Rensa resurser

I de föregående stegen skapade du Azure-resurser i en resursgrupp. Om du inte tror att du behöver dessa resurser i framtiden, kan du ta bort dem genom att ta bort resursgruppen.

På menyn eller startsidan i Azure-portalen väljer du Resursgrupper. Välj sedan myResourceGroupsidan Resursgrupper.

På sidan myResourceGroup kontrollerar du att resurserna i listan är de som du vill ta bort.

Välj Ta bort resursgrupp, skriv myResourceGroup i textrutan för att bekräfta och välj sedan Ta bort.

Söker hjälp

Om du har frågor eller behöver ett svar om Azure Managed Applications kan du skicka en fråga på Stack Overflow med taggen azure-managed-app eller Microsoft Q&A med taggen azure-managed-application.

Nästa steg

Information om hur du publicerar ditt hanterade program till Azure Marketplace finns i Azure-hanterade program på Marketplace.

Läs mer om anpassade Azure-leverantörer.