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


Запуск приложения в службе приложений Azure непосредственно из ZIP-пакета

Примечание.

Запуск из пакета не поддерживается для приложений Python. При развертывании ZIP-файла кода Python необходимо установить флаг, чтобы включить автоматизацию сборки Azure. Автоматизация сборки создаст виртуальную среду Python для приложения и установит необходимые требования и пакет. Дополнительные сведения см. в статье об автоматизации сборки .

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

Все остальные методы развертывания в Службе приложений имеют общее значение: ваши распакуемые файлы развертываются в D:\home\site\wwwroot в приложении (или /home/site/wwwroot для приложений Linux). Так как в среде выполнения приложение использует тот же каталог, развертывание может завершиться неудачей из-за конфликтов блокировки файлов, и приложение может вести себя непредсказуемо, так как некоторые файлы еще не обновлены. Чтобы включить этот параметр, вам не нужно назначать какое-либо значение переменной WEBSITE_RUN_FROM_PACKAGE или полностью удалять его.

Напротив, при запуске непосредственно из ZIP-пакета файлы в пакете не копируются в каталог wwwroot . Вместо этого сам ZIP-пакет монтируется непосредственно как каталог wwwroot только для чтения. Чтобы включить этот параметр, задайте WEBSITE_RUN_FROM_PACKAGEзначение =1 или укажите URL-адрес ZIP-файла. Существует несколько преимуществ непосредственно запуска из пакета:

  • Устраняет конфликты блокировки файлов между развертыванием и средой выполнения.
  • Гарантирует, что в любое время выполняются только полностью развернутые приложения.
  • Можно выполнить развертывание в рабочее приложение с последующим перезапуском.
  • Повышается производительность развертываний Azure Resource Manager.
  • Может сократиться время "холодного запуска", особенно для функций JavaScript с большими деревьями пакетов npm.

Примечание.

В настоящее время поддерживаются только ZIP-файлы пакета.

Создание ZIP-пакета проекта

Внимание

При создании ZIP-пакета для развертывания не включайте корневой каталог. Включите только файлы и каталоги в корневой каталог. При скачивании репозитория GitHub в виде ZIP-файла нельзя развернуть этот файл как есть в службу приложений. GitHub добавляет вложенные каталоги на верхнем уровне, которые не работают со службой приложений.

В окне терминала на локальном компьютере перейдите к корневому каталогу проекта приложения.

Этот каталог должен содержать файл записи в веб-приложение, например index.html, index.phpи app.js. Он также может содержать такие файлы управления пакетами, как project.json, composer.json, package.jsonи bower.jsonrequirements.txt.

Если вы не хотите, чтобы служба приложений выполняла автоматизацию развертывания, выполните все задачи сборки. Например: npm, , bowergulp, composerи pip. Убедитесь, что у вас есть все файлы, необходимые для запуска приложения. Этот шаг является обязательным, если вы хотите запустить пакет напрямую.

Создайте ZIP-архив всего содержимого проекта. Для проектов dotnet добавьте всё содержимое выходного каталога команды dotnet publish, за исключением самого каталога. Например, введите следующую команду в терминале, чтобы создать ZIP-пакет, содержащий содержимое текущего каталога:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Включение запуска из ZIP-пакета

Параметр WEBSITE_RUN_FROM_PACKAGE приложения включает запуск из ZIP-пакета. Чтобы задать его, запустите следующую команду с помощью Azure CLI.

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"

WEBSITE_RUN_FROM_PACKAGE="1" позволяет запускать ваше приложение из ZIP-пакета, локального для вашего приложения. Можно также запустить из удаленного пакета.

Запуск ZIP-пакета

Самый простой способ запустить ZIP-пакет в службе приложений — с помощью команды Azure CLI az webapp deployment source config-zip . Например:

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <filename>.zip

WEBSITE_RUN_FROM_PACKAGE Так как задан параметр приложения, эта команда не извлекает содержимое ZIP-пакета в каталог D:\home\site\wwwroot приложения. Вместо этого он передает ZIP-файл "как есть" в D:\home\data\SitePackages и создает packagename.txt в том же каталоге, который содержит имя ZIP-пакета для загрузки во время выполнения. При отправке ZIP-пакета другим способом (например, FTP) необходимо создать каталог D:\home\data\SitePackages и файл packagename.txt вручную.

Команда также перезапускает приложение. Так как параметр WEBSITE_RUN_FROM_PACKAGE задан, служба приложений подключает отправленный пакет как каталог wwwroot только для чтения и запускает приложение непосредственно из этого подключенного каталога.

Запустить с внешнего URL-адреса

Вы также можете запустить ZIP-пакет из внешнего URL-адреса, например хранилища BLOB-объектов Azure. Azure Storage Explorer можно использовать для загрузки ZIP-файлов пакетов в учетную запись хранения Blob. Следует использовать контейнер частного хранилища с подписанным URL-адресом (SAS) или управляемое удостоверение, чтобы среда выполнения службы приложений могла безопасно получить доступ к ZIP-пакету.

Примечание.

В настоящее время существующий ресурс службы приложений, на котором выполняется локальный ZIP-пакет, нельзя перенести для запуска из удаленного ZIP-пакета. Вам потребуется создать новый ресурс Служба приложений, настроенный для запуска из внешнего URL-адреса.

Когда вы загрузите файл в хранилище Blob и получите для него URL-адрес SAS, установите параметр приложения WEBSITE_RUN_FROM_PACKAGE на этот URL-адрес. Убедитесь, что URL-адрес заканчивается .zip. В приведенном ниже примере показано, как сделать это с помощью Azure CLI.

az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings WEBSITE_RUN_FROM_PACKAGE="https://myblobstorage.blob.core.windows.net/content/SampleCoreMVCApp.zip?st=2018-02-13T09%3A48%3A00Z&se=2044-06-14T09%3A48%3A00Z&sp=rl&sv=2017-04-17&sr=b&sig=bNrVrEFzRHQB17GFJ7boEanetyJ9DGwBSV8OM3Mdh%2FM%3D"

При публикации обновленного пакета с тем же именем в хранилище BLOB-объектов необходимо перезапустить приложение, чтобы обновленный пакет загружался в службу приложений.

Получение доступа к пакету в Azure Blob Storage с помощью управляемого удостоверения.

Вы можете настроить Хранилище BLOB-объектов Azure для авторизации запросов с помощью Microsoft Entra ID. Эта конфигурация означает, что вместо создания ключа SAS с истечением срока действия можно использовать управляемое удостоверение приложения. По умолчанию используется назначаемое системой удостоверение приложения. Если вы хотите указать пользовательское удостоверение, можно указать ИД ресурса этого удостоверения в параметре приложения WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID. Параметр также может принимать SystemAssigned в качестве значения, что эквивалентно опущению параметра.

Чтобы разрешить получение пакета с помощью удостоверения, выполните следующие действия:

  1. Убедитесь, что большой двоичный объект настроен для частного доступа.

  2. Предоставьте удостоверению роль Читатель данных больших двоичных объектов хранилища с областью действия для большого двоичного объекта пакета. Для получения подробной информации о назначении роли см. статью Назначение роли Azure для доступа к данным BLOB-объектов.

  3. Задайте параметр приложения WEBSITE_RUN_FROM_PACKAGE для URL-адреса большого двоичного объекта пакета. Этот URL-адрес обычно является формой https://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package} или аналогичным.

  4. Если вы хотите указать пользовательское удостоверение, можно указать ИД ресурса этого удостоверения в параметре приложения WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID. Параметр также может принимать "SystemAssigned" в качестве значения, хотя это то же самое, что и полное его отсутствие. Идентификатор ресурса — это стандартное представление ресурса в Azure. Для управляемого удостоверения, назначаемого пользователем, это будет /subscriptions/subid/resourcegroups/rg-name/providers/Microsoft.ManagedIdentity/userAssignedIdentities/identity-name. Идентификатор ресурса управляемого удостоверения, назначаемого пользователем, можно получить в разделе "Параметры ->Свойства ->Идентификатор назначенного пользователем управляемого удостоверения.

Развертывание файлов веб-заданий при запуске из пакета

При включении запуска приложения из пакета есть два способа развертывания файлов веб-заданий:

  • Разверните в том же ZIP-пакете, что и ваше приложение: включите их так, как вы обычно это делаете в <project-root>\app_data\jobs\... (что соответствует пути развертывания \site\wwwroot\app_data\jobs\..., указанному в руководстве по веб-заданиям).
  • Развертывание отдельно от ZIP-пакета приложения: так как обычный путь \site\wwwroot\app_data\jobs\... развертывания теперь доступен только для чтения, вы не можете развернуть файлы веб-заданий там. Вместо этого разверните файлы веб-заданий в \site\jobs\..., в котором не только чтение. Веб-задания, развернутые в \site\wwwroot\app_data\jobs\... и \site\jobs\... в обоих запусках.

Примечание.

Когда \site\wwwroot становится доступным только для чтения, операции, такие как создание disable.job, завершаются сбоем.

Устранение неполадок

  • Выполнение непосредственно из пакета делает его wwwroot доступным только для чтения. При попытке записи файлов в этот каталог приложение получит сообщение об ошибке.
  • Форматы TAR и GZIP не поддерживаются.
  • ZIP-файл может содержать не более 1 ГБ
  • Эта функция несовместима с локальным кэшем.
  • Для повышения производительности холодного запуска используйте параметр local ZIP (WEBSITE_RUN_FROM_PACKAGE = 1).

Дополнительные ресурсы