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

В рамках этого учебника вы создадите собственное управляемое приложение с настраиваемыми действиями и ресурсами. Управляемое приложение будет содержать настраиваемое действие на странице 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 можно найти в справочнике по артефактам элементов пользовательского интерфейса.

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

Для создания экземпляра управляемого приложения с настраиваемым поставщиком вам потребуется определить в файле mainTemplate.json ресурс настраиваемого поставщика с именем public и типом Microsoft.CustomProviders/resourceProviders. В этом ресурсе определяются типы ресурсов и действия для службы. Чтобы развернуть экземпляры функции 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 содержит ресурсы для управляемого приложения, включая настраиваемого поставщика.

Application resource groups

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

  • Перейдите на страницу обзора и нажмите кнопку Ping Action (Действие Ping):

Perform custom action

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

Screenshot shows the Add button selected from Users.

  • Перейдите на страницу "Пользователи", выберите ресурс users и щелкните Custom Context Action (Настраиваемое действие контекста):

Screenshot shows Custom Context Action selected.

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

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

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

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

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

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

Если у вас возникли вопросы об Управляемых приложениях Azure, вы можете задать их на сайте Stack Overflow с тегом azure-managed-app или Microsoft Q&A с тегом azure-managed-application. Подобный вопрос, возможно, уже был задан, поэтому перед его публикацией сначала проверьте наличие ответа. Чтобы быстрее получить ответ, используйте соответствующие теги.

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

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

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