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:
- Så här skapar och publicerar du en definition för ett hanterat program.
- Så här distribuerar du tjänstkatalogappen via Azure-portalen.
- Så här skapar du användargränssnittet för Azure-portalen för ditt hanterade program.
- Visa definitionsartefaktfunktioner .
- Azure Custom Provider-funktioner .
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/contextAction
på sidan Användare som ska utföras i en kontext av anpassad resurs av typenusers
.
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.
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:
- Gå till Användare och välj Lägg till. Ange indata för att skapa en resurs och skicka formuläret:
- Gå till Användare och välj en användarresurs och välj Anpassad kontextåtgärd:
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 myResourceGroup på sidan 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.