Поделиться через


Руководство по созданию управляемого приложения с настраиваемыми действиями и ресурсами

В рамках этого учебника вы создадите собственное управляемое приложение с настраиваемыми действиями и ресурсами. Управляемое приложение содержит настраиваемое действие на Overview странице, настраиваемый тип ресурса, отображаемый как отдельный элемент меню и Table of Content настраиваемое действие контекста на пользовательской странице ресурса.

В этом учебнике описаны следующие шаги:

  • Создание файла определения пользовательского интерфейса для создания экземпляра управляемого приложения.
  • Создание шаблона развертывания с настраиваемым поставщиком Azure, учетной записью хранения Azure и функцией Azure
  • Создание артефакта определения представления с настраиваемыми действиями и ресурсами.
  • Развертывание определения управляемого приложения.
  • Развертывание экземпляра управляемого приложения.
  • Выполнение настраиваемых действий и создание настраиваемых ресурсов.

Необходимые компоненты

Для работы с этим учебником вам необходимо ознакомиться со следующими статьями:

Определение пользовательского интерфейса

В этом руководстве вы создадите управляемое приложение и ее управляемую группу ресурсов, содержащую экземпляр пользовательского поставщика, учетную запись хранения и функцию. Используемая в этом примере функция Azure реализует API, который обрабатывает операции настраиваемого поставщика для действий и ресурсов. Учетная запись хранения Azure используется в качестве основного хранилища для ресурсов настраиваемого поставщика.

Определение пользовательского интерфейса для создания экземпляра управляемого приложения включает следующие входные элементы: funcname и storagename. Имена учетной записи хранения и функции должны быть глобально уникальными. По умолчанию файлы функций развертываются из примера пакета функций, но его можно изменить, добавив входной элемент для ссылки пакета в 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
}

И выходные данные в createUiDefinition.json:

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

Полный пример файла createUIDefinition.json можно найти в справочнике по артефактам элементов пользовательского интерфейса.

Шаблон с настраиваемым поставщиком

Чтобы создать управляемый экземпляр приложения с настраиваемым поставщиком, необходимо определить ресурс настраиваемого поставщика с именем общедоступного и типом Microsoft.CustomProviders/resourceProviders в mainTemplate.json. В этом ресурсе определяются типы ресурсов и действия для службы. Чтобы развернуть экземпляры функции Azure и учетной записи хранения Azure, определите ресурсы типа Microsoft.Web/sites и Microsoft.Storage/storageAccounts соответственно.

В этом руководстве вы создадите один users тип ресурса, ping настраиваемое действие и users/contextAction настраиваемое действие, которое выполняется в контексте пользовательского users ресурса. Для каждого типа ресурса и действия укажите конечную точку, указывающую на функцию с именем, указанным в createUiDefinition.json. Укажите тип routingType Proxy,Cache ресурсов и Proxy действия:

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

Полный пример файла mainTemplate.json можно найти в справочнике по артефактам шаблона развертывания.

Просмотр артефакта определения

Чтобы определить пользовательский интерфейс, который содержит настраиваемые действия и ресурсы в управляемом приложении, необходимо создать артефакт viewDefinition.json. Дополнительные сведения об артефакте определения представления см. в этой статье.

В рамках этого учебника вы определите:

  • Страницу Обзор с кнопкой панели инструментов, которая представляет настраиваемое действие TestAction с основным текстовым вводом.
  • Страницу Пользователи, представляющую тип настраиваемого ресурса users.
  • Действие настраиваемого ресурса users/contextAction на странице Пользователи, которое будет выполняться в контексте настраиваемого ресурса типа users.

В следующем примере показана конфигурация представления для страницы обзора:

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

В следующем примере приведена конфигурация страницы ресурсов "Пользователи" с пользовательским действием ресурса:

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

Полный пример файла viewDefinition.json можно найти в справочнике по артефактам определения представления.

Определение управляемого приложения

Упакуйте следующие артефакты управляемого приложения в ZIP-архив и отправьте его в хранилище:

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

Все файлы должны находиться на корневом уровне. Пакет с артефактами можно хранить в любом хранилище, например в хранилище BLOB-объектов на сайте GitHub или учетной записи хранилища BLOB-объектов Azure. Ниже приведен скрипт для отправки пакета приложения в учетную запись хранения:

$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

Выполните следующий скрипт Azure CLI или выполните действия, описанные в портал Azure для развертывания определения управляемого приложения каталога служб:

Чтобы выполнить этот пример, установите последнюю версию Azure CLI. Перед началом выполните команду az login, чтобы создать подключение к Azure.

Примеры для Azure CLI написаны для оболочки bash. Чтобы запустить этот пример в Windows PowerShell или командной строке, может потребоваться изменить элементы скрипта.

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"

Экземпляр управляемого приложения

При развертывании определения управляемого приложения выполните следующий сценарий или выполните действия, описанные в портал Azure для развертывания управляемого экземпляра приложения с помощью пользовательского поставщика:

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

Настраиваемые действия и ресурсы

После развертывания экземпляра приложения каталога служб у вас есть две новые группы ресурсов. Группа applicationGroup ресурсов содержит экземпляр управляемого приложения и группы managedResourceGroup ресурсов содержит ресурсы для управляемого приложения, включая пользовательского поставщика.

Группы ресурсов приложения

Вы можете перейти к экземпляру управляемого приложения и выполнить настраиваемое действие на странице обзора, создать настраиваемый ресурс users на странице "Пользователи" и запустить настраиваемое действие контекста в настраиваемом ресурсе.

  • Перейдите к обзору и выберите действие Ping:

Выполнение настраиваемого действия

  • Перейдите к пользователям и нажмите кнопку "Добавить". Укажите входные данные для создания ресурса и отправьте форму:

Снимок экрана: выбранная кнопка “Добавить” на странице “Пользователи”.

  • Перейдите к пользователям и выберите ресурс пользователей и выберите действие пользовательского контекста:

Снимок экрана: выбранное настраиваемое действие контекста.

Очистка ресурсов

На предыдущем шаге вы создали ресурсы Azure в группе ресурсов. Если вы считаете, что в будущем эти ресурсы вам не понадобятся, их можно удалить, удалив группу ресурсов.

В меню или на странице Главная портала Azure выберите Группы ресурсов. Затем на странице Группы ресурсов выберите myResourceGroup.

На странице myResourceGroup убедитесь, что перечислены те ресурсы, которые нужно удалить.

Выберите Удалить группу ресурсов, введите myResourceGroup в текстовое поле для подтверждения и щелкните Удалить.

Требуется помощь?

Если у вас есть вопросы или вам нужен ответ об управляемых приложениях Azure, вы можете опубликовать вопрос в Stack Overflow с тегом azure-managed-app или Microsoft Q&A с тегомazure-managed-application.

Следующие шаги

Сведения о том, как опубликовать управляемое приложение в Azure Marketplace, см. в статье Управляемые приложения Azure в Marketplace.

Дополнительные сведения о Настраиваемых поставщиках Azure.