Краткое руководство. Создание и публикация определения управляемого приложения Azure
Это краткое руководство содержит общие сведения о работе со службой "Управляемые приложения Azure". Вы создаете и публикуете определение управляемого приложения, которое хранится в каталоге служб и предназначено для членов вашей организации.
Ниже представлен порядок публикации управляемого приложения в каталоге услуг.
- Создайте шаблон Azure Resource Manager (шаблон ARM), определяющий ресурсы, развертываемые с помощью управляемого приложения.
- Определите элементы пользовательского интерфейса для портала при развертывании управляемого приложения.
- Создайте пакет .zip, содержащий необходимые JSON-файлы. Размер ZIP-файла пакета для определения управляемого приложения каталога услуг не должен превышать 120 МБ.
- Опубликуйте определение управляемого приложения, чтобы оно было доступно в каталоге служб.
Если определение управляемого приложения превышает 120 МБ или вы хотите использовать собственную учетную запись хранения по соображениям соответствия вашей организации, перейдите к краткому руководству. Создание и публикация определения управляемого приложения Azure.
Вы можете использовать Bicep для разработки определения управляемого приложения, но его необходимо преобразовать в json шаблона ARM, прежде чем опубликовать определение в Azure. Дополнительные сведения см. в кратком руководстве. Использование Bicep для создания и публикации определения управляемого приложения Azure.
Вы также можете использовать Bicep для развертывания определения управляемого приложения из каталога служб. Дополнительные сведения см. в кратком руководстве. Использование Bicep для развертывания определения управляемого приложения Azure.
Необходимые компоненты
Для работы с этим кратким руководством вам потребуется следующее:
- Учетная запись Azure с активной подпиской и разрешениями для ресурсов Microsoft Entra, таких как пользователи, группы или субъекты-службы. Если у вас нет учетной записи, создайте бесплатную учетную запись, прежде чем начинать работу.
- Visual Studio Code с последней версией расширения средств Resource Manager. Для файлов Bicep установите расширение Bicep для Visual Studio Code.
- Установите последнюю версию Azure PowerShell или Azure CLI.
Создание шаблона ARM
В каждом определении управляемого приложения указан файл с именем mainTemplate.json. Шаблон определяет ресурсы Azure для развертывания и не отличается от обычного шаблона ARM.
Откройте Visual Studio Code, создайте файл с именем mainTemplate.json (с учетом регистра) и сохраните его.
Добавьте следующие данные JSON и сохраните файл. Он определяет ресурсы для развертывания Служба приложений и плана Служба приложений. Шаблон использует Служба приложений базовый план (B1), который имеет затраты по мере использования. Дополнительные сведения см. в разделе о ценах на службу приложение Azure в Linux.
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]"
},
"appServicePlanName": {
"type": "string",
"maxLength": 40,
"metadata": {
"description": "App Service plan name."
}
},
"appServiceNamePrefix": {
"type": "string",
"maxLength": 47,
"metadata": {
"description": "App Service name prefix."
}
}
},
"variables": {
"appServicePlanSku": "B1",
"appServicePlanCapacity": 1,
"appServiceName": "[format('{0}{1}', parameters('appServiceNamePrefix'), uniqueString(resourceGroup().id))]",
"linuxFxVersion": "DOTNETCORE|8.0"
},
"resources": [
{
"type": "Microsoft.Web/serverfarms",
"apiVersion": "2023-01-01",
"name": "[parameters('appServicePlanName')]",
"location": "[parameters('location')]",
"sku": {
"name": "[variables('appServicePlanSku')]",
"capacity": "[variables('appServicePlanCapacity')]"
},
"kind": "linux",
"properties": {
"zoneRedundant": false,
"reserved": true
}
},
{
"type": "Microsoft.Web/sites",
"apiVersion": "2023-01-01",
"name": "[variables('appServiceName')]",
"location": "[parameters('location')]",
"properties": {
"serverFarmId": "[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]",
"httpsOnly": true,
"redundancyMode": "None",
"siteConfig": {
"linuxFxVersion": "[variables('linuxFxVersion')]",
"minTlsVersion": "1.2",
"ftpsState": "Disabled"
}
},
"dependsOn": [
"[resourceId('Microsoft.Web/serverfarms', parameters('appServicePlanName'))]"
]
}
],
"outputs": {
"appServicePlan": {
"type": "string",
"value": "[parameters('appServicePlanName')]"
},
"appServiceApp": {
"type": "string",
"value": "[reference(resourceId('Microsoft.Web/sites', variables('appServiceName')), '2023-01-01').defaultHostName]"
}
}
}
Определение интерфейса портала
В качестве издателя вы определяете интерфейс портала для создания управляемого приложения. Файл createUiDefinition.json создает пользовательский интерфейс портала. Вы определяете, как пользователи предоставляют входные данные для каждого параметра с помощью элементов управления, таких как раскрывающийся список и текстовые поля.
В этом примере пользовательский интерфейс запрашивает ввод префикса имени Служба приложений и имени плана Служба приложений. Во время развертывания mainTemplate.json appServiceName
переменные используют uniqueString
функцию для добавления 13-символьной строки к префиксу имени, чтобы имя было глобально уникальным в Azure.
Откройте Visual Studio Code, создайте файл с именем createUiDefinition.json (с учетом регистра) и сохраните его.
Добавьте следующий код JSON в файл и сохраните его.
{
"$schema": "https://schema.management.azure.com/schemas/0.1.2-preview/CreateUIDefinition.MultiVm.json#",
"handler": "Microsoft.Azure.CreateUIDef",
"version": "0.1.2-preview",
"parameters": {
"basics": [
{}
],
"steps": [
{
"name": "webAppSettings",
"label": "Web App settings",
"subLabel": {
"preValidation": "Configure the web app settings",
"postValidation": "Completed"
},
"elements": [
{
"name": "appServicePlanName",
"type": "Microsoft.Common.TextBox",
"label": "App Service plan name",
"placeholder": "App Service plan name",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with a maximum of 40 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{1,40}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a maximum of 40 characters."
},
"visible": true
},
{
"name": "appServiceName",
"type": "Microsoft.Common.TextBox",
"label": "App Service name prefix",
"placeholder": "App Service name prefix",
"defaultValue": "",
"toolTip": "Use alphanumeric characters or hyphens with minimum of 2 characters and maximum of 47 characters.",
"constraints": {
"required": true,
"regex": "^[a-z0-9A-Z-]{2,47}$",
"validationMessage": "Only alphanumeric characters or hyphens are allowed, with a minimum of 2 characters and maximum of 47 characters."
},
"visible": true
}
]
}
],
"outputs": {
"location": "[location()]",
"appServicePlanName": "[steps('webAppSettings').appServicePlanName]",
"appServiceNamePrefix": "[steps('webAppSettings').appServiceName]"
}
}
}
Дополнительные сведения см. в статье CreateUiDefitinion.json for Azure managed application's create experience (Файл CreateUiDefitinion.json для создания интерфейсов управляемых приложений Azure).
Упаковка файлов
Добавьте два файла в файл пакета с именем app.zip. Приведенные выше два файла должны быть расположены на корневом уровне ZIP-файла. Если файлы находятся в папке, при создании определения управляемого приложения вы получите сообщение об ошибке, которое указывает, что необходимые файлы отсутствуют.
Отправьте app.zip в учетную запись хранения Azure, чтобы ее можно было использовать при развертывании определения управляемого приложения. Имя учетной записи хранения должно быть глобально уникальным в Azure, а его длина должна составлять 3–24 символа (допускаются только строчные буквы и цифры). В команде замените заполнитель <pkgstorageaccountname>
, включая угловые скобки (<>
), на имя уникальной учетной записи хранения.
В Visual Studio Code откройте новый терминал PowerShell и войдите в подписку Azure.
Connect-AzAccount
Команда открывает браузер по умолчанию и запрашивает вход в Azure. Дополнительные сведения см. в разделе "Вход с помощью Azure PowerShell".
New-AzResourceGroup -Name packageStorageGroup -Location westus
$pkgstorageparms = @{
ResourceGroupName = "packageStorageGroup"
Name = "<pkgstorageaccountname>"
Location = "westus"
SkuName = "Standard_LRS"
Kind = "StorageV2"
MinimumTlsVersion = "TLS1_2"
AllowBlobPublicAccess = $true
AllowSharedKeyAccess = $false
}
$pkgstorageaccount = New-AzStorageAccount @pkgstorageparms
Переменная $pkgstorageparms
использует splatting PowerShell для улучшения удобочитаемости значений параметров, используемых в команде для создания новой учетной записи хранения. Splatting используется в других командах PowerShell, использующих несколько значений параметров.
После создания учетной записи хранения добавьте участника данных BLOB-объектов хранилища ролей в область учетной записи хранения. Назначьте доступ к учетной записи пользователя Microsoft Entra. В зависимости от уровня доступа в Azure может потребоваться другие разрешения, назначенные администратором. Дополнительные сведения см. в статье "Назначение роли Azure для доступа к данным BLOB-объектов" и назначение ролей Azure с помощью портал Azure.
После добавления роли в учетную запись хранения потребуется несколько минут, чтобы стать активным в Azure. Затем можно создать контекст, необходимый для создания контейнера и отправки файла.
$pkgstoragecontext = New-AzStorageContext -StorageAccountName $pkgstorageaccount.StorageAccountName -UseConnectedAccount
New-AzStorageContainer -Name appcontainer -Context $pkgstoragecontext -Permission blob
$blobparms = @{
File = "app.zip"
Container = "appcontainer"
Blob = "app.zip"
Context = $pkgstoragecontext
}
Set-AzStorageBlobContent @blobparms
Создание определения управляемого приложения
В этом разделе вы получите сведения об удостоверениях из идентификатора Microsoft Entra ID, создайте группу ресурсов и разверните определение управляемого приложения.
Получение идентификатора группы и идентификатора определения роли
Следующим шагом является выбор пользователя, группы безопасности или приложения для управления ресурсами для клиента. Это удостоверение имеет разрешения для управляемой группы ресурсов в соответствии с назначенной ролью. Это может быть любая встроенная роль Azure, например "Владелец" или "Участник".
В этом примере используется группа безопасности, а учетная запись Microsoft Entra должна быть членом группы. Чтобы получить идентификатор объекта группы, замените заполнитель <managedAppDemo>
, включая угловые скобки (<>
), именем группы. Значение этой переменной используется при развертывании определения управляемого приложения.
Чтобы создать новую группу Microsoft Entra, перейдите к разделу "Управление группами Microsoft Entra" и членством в группах.
$principalid=(Get-AzADGroup -DisplayName <managedAppDemo>).Id
Затем получите идентификатор определения роли встроенной роли Azure, которую вы хотите предоставить пользователю, группе или приложению. Значение этой переменной используется при развертывании определения управляемого приложения.
$roleid=(Get-AzRoleDefinition -Name Owner).Id
Публикация определения управляемого приложения
Создайте группу ресурсов для определения управляемого приложения.
New-AzResourceGroup -Name appDefinitionGroup -Location westus
Команда blob
создает переменную для хранения URL-адреса для файла пакета .zip . Эта переменная используется в команде, которая создает определение управляемого приложения.
$blob = Get-AzStorageBlob -Container appcontainer -Blob app.zip -Context $pkgstoragecontext
$publishparms = @{
Name = "sampleManagedApplication"
Location = "westus"
ResourceGroupName = "appDefinitionGroup"
LockLevel = "ReadOnly"
DisplayName = "Sample managed application"
Description = "Sample managed application that deploys web resources"
Authorization = "${principalid}:$roleid"
PackageFileUri = $blob.ICloudBlob.StorageUri.PrimaryUri.AbsoluteUri
}
New-AzManagedApplicationDefinition @publishparms
После выполнения команды в вашей группе ресурсов будет определение управляемого приложения.
Далее приведены некоторые параметры, которые использовались в предыдущем примере:
ResourceGroupName
: имя группы ресурсов, в которой создается определение управляемого приложения.LockLevel
: вlockLevel
управляемой группе ресурсов клиент не может выполнять нежелательные операции с этой группой ресурсов. В настоящее время поддерживается только тип блокировкиReadOnly
.ReadOnly
указывает, что клиент может только считывать ресурсы, присутствующих в управляемой группе ресурсов. Удостоверения издателя, которым предоставлен доступ к управляемой группе ресурсов, освобождаются от уровня блокировки.Authorization
: описывает идентификатор субъекта и идентификатор определения роли, которые используются для предоставления разрешения управляемой группе ресурсов."${principalid}:$roleid"
или вы можете использовать фигурные скобки для каждой переменной"${principalid}:${roleid}"
.- Разделяйте значения запятыми:
"${principalid1}:$roleid1", "${principalid2}:$roleid2"
.
PackageFileUri
: расположение файла пакета .zip , содержащего необходимые файлы.
Убедитесь, что пользователи могут видеть ваше определение.
У вас есть доступ к определению управляемого приложения, но вы хотите, чтобы другие пользователи в вашей организации могли получить к нему доступ. Предоставьте им роль читателя в определении. Они могли наследовать этот уровень доступа из подписки или группы ресурсов. Сведения о том, как проверить, кто имеет доступ к определению, и добавить пользователей или группы, см. в статье Назначение ролей Azure с помощью портала Azure.
Очистка ресурсов
Если вы собираетесь развернуть определение, перейдите к разделу "Дальнейшие действия ", который ссылается на статью для развертывания определения.
Если вы завершите работу с определением управляемого приложения, можно удалить группы ресурсов, созданные с именем packageStorageGroup и appDefinitionGroup.
В командной строке вы убедитесь, что вы хотите удалить группу ресурсов.
Remove-AzResourceGroup -Name packageStorageGroup
Remove-AzResourceGroup -Name appDefinitionGroup
Следующие шаги
Вы опубликовали определение управляемого приложения. Следующий шаг — узнать, как развернуть экземпляр этого определения.