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


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

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

  1. В меню портала Azure или домашней странице выберите группы ресурсов>myResourceGroup.

  2. На панели myResourceGroup убедитесь, что перечисленные ресурсы являются теми, которые требуется удалить.

  3. Выберите команду Удалить группу ресурсов. Введите myResourceGroup в текстовом поле, чтобы подтвердить, а затем нажмите кнопку "Удалить".

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

Если у вас есть вопросы или вам нужен ответ об управляемых приложениях Azure, вы можете опубликовать вопрос в Stack Overflow

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

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

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