Запуск приложения в службе приложений Azure непосредственно из ZIP-пакета
Примечание.
Запуск из пакета не поддерживается для приложений Python. При развертывании ZIP-файла кода Python необходимо установить флаг, чтобы включить автоматизацию сборки Azure. Автоматизация сборки создаст виртуальную среду Python для приложения и установит необходимые требования и пакет. Дополнительные сведения см. в статье об автоматизации сборки .
В службе приложений Azureприложения можно запускать непосредственно из файла пакета развертывания ZIP. Здесь также показано, как включить эту функцию в приложении-функции.
Все остальные методы развертывания в службе приложений имеют что-то общее: файлы развертываются в D:\home\site\wwwroot в приложении (или /home/site/wwwroot для приложений Linux). Так как в среде выполнения приложение использует тот же каталог, развертывание может завершиться неудачей из-за конфликтов блокировки файлов, и приложение может вести себя непредсказуемо, так как некоторые файлы еще не обновлены.
В отличие от этого, при запуске непосредственно из пакета файлы в пакете не копируются в каталог wwwroot. Вместо этого сам ZIP-пакет монтируется непосредственно в каталог wwwroot только для чтения. Существует несколько преимуществ, выполняемых непосредственно из пакета:
- Устраняет конфликты блокировки файлов между развертыванием и средой выполнения.
- Гарантирует, что в любое время выполняются только полностью развернутые приложения.
- Можно выполнить развертывание в рабочее приложение (с помощью перезапуска).
- Повышается производительность развертываний Azure Resource Manager.
- Может сократиться время "холодного запуска", особенно для функций JavaScript с большими деревьями пакетов npm.
Примечание.
В настоящее время поддерживаются только ZIP-файлы пакета.
Создание ZIP-пакета проекта
Внимание
При создании ZIP-пакета для развертывания не включайте корневой каталог, а только файлы и каталоги. При скачивании репозитория GitHub в виде ZIP-файла невозможно развернуть этот файл как есть в Служба приложений. GitHub добавляет дополнительные вложенные каталоги на верхнем уровне, которые не работают с Служба приложений.
В окне терминала на локальном компьютере перейдите к корневому каталогу проекта приложения.
Этот каталог должен содержать файл записи веб-приложения, например index.html, index.php и app.js. Кроме того, в нем могут содержаться файлы управления пакетами, например project.json, composer.json, package.json, bower.json и requirements.txt.
Если вы не хотите, чтобы Служба приложений выполняла автоматизацию развертывания, выполните все задачи сборки (например npm
, bower
, gulp
, composer
и pip
) и убедитесь, что у вас есть все файлы, необходимые для запуска приложения. Этот шаг является обязательным, если вы хотите запустить пакет напрямую.
Создайте ZIP-архив всего содержимого проекта. Для dotnet
проектов это все в выходном каталоге dotnet publish
команды (за исключением самого выходного каталога). Например, следующая команда в терминале для создания ZIP-пакета содержимого текущего каталога:
# Bash
zip -r <file-name>.zip .
# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip
Включить запуск из пакета
Параметр приложения WEBSITE_RUN_FROM_PACKAGE
включает запуск из пакета. Чтобы задать его, запустите следующую команду с помощью Azure CLI в Linux.
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings WEBSITE_RUN_FROM_PACKAGE="1"
WEBSITE_RUN_FROM_PACKAGE="1"
позволяет запускать приложение из пакета, который является локальным для приложения. Можно также запустить из удаленного пакета.
Запуск пакета
Проще всего запустить пакет в службе приложений с помощью команды 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
параметр приложения задан, эта команда не извлекает содержимое пакета в каталог 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-адреса
Вы также можете запустить пакет с внешнего URL-адреса, например Хранилища BLOB-объектов Azure. Можно использовать Обозреватель службы хранилища Azure для передачи файлов пакета в учетную запись хранения больших двоичных объектов. Следует использовать закрытый контейнер хранилища с подписанным URL-адресом (SAS) или использовать управляемое удостоверение, чтобы настроить безопасный доступ к пакету в среде Службы приложений.
Примечание.
В настоящее время существующий Служба приложений ресурс, который запускает локальный пакет, нельзя перенести для запуска из удаленного пакета. Вам потребуется создать новый ресурс Служба приложений, настроенный для запуска из внешнего URL-адреса.
Когда вы отправите файл в хранилище BLOB-объектов и получите для него URL для SAS, задайте WEBSITE_RUN_FROM_PACKAGE
для параметра приложения URL-адрес. В приведенном ниже примере показано, как сделать это с помощью 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-объектов необходимо перезапустить приложение, чтобы обновленный пакет загружался в службу приложений.
Доступ к пакету в Хранилище BLOB-объектов Azure с помощью управляемого удостоверения
Вы можете настроить Хранилище BLOB-объектов Azure для авторизации запросов с помощью идентификатора Microsoft Entra. Эта конфигурация означает, что вместо создания ключа SAS с истечением срока действия можно использовать управляемое удостоверение приложения. По умолчанию используется назначаемое системой удостоверение приложения. Если вы хотите указать назначаемое пользователем удостоверение, можно задать параметр приложения WEBSITE_RUN_FROM_PACKAGE_BLOB_MI_RESOURCE_ID
для ИД ресурса этого удостоверения. Параметр также может принимать SystemAssigned
в качестве значения, что эквивалентно опущению параметра.
Чтобы разрешить получение пакета с помощью удостоверения, выполните следующие действия:
Убедитесь, что большой двоичный объект настроен для частного доступа.
Предоставьте удостоверению роль Читатель данных больших двоичных объектов хранилища с областью действия для большого двоичного объекта пакета. Дополнительные сведения о создании назначения ролей см. в статье Назначение роли Azure для доступа к данным BLOB-объектов.
Задайте параметр приложения
WEBSITE_RUN_FROM_PACKAGE
для URL-адреса большого двоичного объекта пакета. Этот URL-адрес обычно является формойhttps://{storage-account-name}.blob.core.windows.net/{container-name}/{path-to-package}
или аналогичным.
Развертывание файлов веб-заданий при запуске из пакета
При включении запуска приложения из пакета можно развернуть два способа развертывания файлов веб-заданий:
- Разверните в том же ZIP-пакете, что и приложение: включите их, как правило, (которое сопоставляется с путем
\site\wwwroot\app_data\jobs\...
развертывания, как указано в<project-root>\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).