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


Запуск функций из файла пакета в Azure

В Azure функции можно запускать непосредственно из файла пакета развертывания в приложении-функции. Другим вариантом является развертывание ваших файлов в директории c:\home\site\wwwroot (Windows) или /home/site/wwwroot (Linux) вашего приложения функций.

В этой статье описываются преимущества запуска функций из пакета. В нем также показано, как включить эту функцию в приложении-функции.

Преимущества запуска из файла пакета

Существует несколько преимуществ выполнения функций из файла пакета:

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

Дополнительные сведения см. в этом объявлении.

Включение функций для запуска из пакета

Приложения-функции в плане размещения Flex Consumption выполняются из пакета по умолчанию. Не требуется выполнять специальную конфигурацию.

Чтобы ваше приложение-функция запускалось из пакета в планах размещения "Потребление", "Эластичная премиум" и "Служба приложений (выделенная)", добавьте WEBSITE_RUN_FROM_PACKAGE параметр приложения в ваше приложение-функцию. Параметр WEBSITE_RUN_FROM_PACKAGE приложения может иметь одно из следующих значений:

Ценность Описание
1 Указывает, что приложение-функция запускается из локального файла пакета, развернутого в c:\home\data\SitePackages папке (Windows) или /home/data/SitePackages (Linux) приложения-функции.
<URL> Задает URL-адрес, который является удаленным расположением определенного файла пакета, который требуется запустить. Требуется для функций приложений, работающих в Linux в тарифе потребления.

В следующей таблице указаны рекомендуемые WEBSITE_RUN_FROM_PACKAGE значения для развертывания в определенной операционной системе и плане размещения:

План размещения Виндоус Линукс
Потребление 1 настоятельно рекомендуется. Поддерживается только <URL>.
Премиум 1 рекомендуется. 1 рекомендуется.
Преданный 1 рекомендуется. 1 рекомендуется.

Общие рекомендации

  • Не добавляйте WEBSITE_RUN_FROM_PACKAGE параметр приложения в приложения на плане Плата за использование Flex.
  • Файл пакета должен быть отформатирован .zip. Форматы Tar и gzip не поддерживаются.
  • Развертывание ZIP рекомендуется.
  • При развертывании функционального приложения в Windows следует установить WEBSITE_RUN_FROM_PACKAGE1 и опубликовать с помощью zip-развертывания.
  • При запуске из пакета папка wwwroot доступна только для чтения, и если попытаться записать файлы в эту папку, возникает ошибка. Файлы также доступны только для чтения на портале Azure.
  • Максимальный размер файла пакета развертывания составляет 1 ГБ.
  • При запуске из пакета развертывания нельзя использовать локальный кэш.
  • Если проект должен использовать удаленную сборку, не используйте WEBSITE_RUN_FROM_PACKAGE параметр приложения. Вместо этого добавьте SCM_DO_BUILD_DURING_DEPLOYMENT=true параметр приложения настройки развертывания. Для Linux также добавьте этот параметр ENABLE_ORYX_BUILD=true. Дополнительные сведения см. в разделе "Удаленная сборка".

Замечание

Параметр WEBSITE_RUN_FROM_PACKAGE приложения не работает с MSDeploy, как описано в MSDeploy VS. ZipDeploy. Во время развертывания вы получите ошибку, например ARM-MSDeploy Deploy Failed. Чтобы устранить эту ошибку, перейдите /MSDeploy на /ZipDeploy.

Добавьте параметр WEBSITE_RUN_FROM_PACKAGE

Существует несколько способов для добавления, обновления и удаления параметров приложения-функции.

Изменения в параметрах функционального приложения требуют его перезапуска.

Создание ZIP-архива

Развернутый ZIP-архив должен содержать все файлы, необходимые для запуска функционального приложения. Вы можете вручную создать ZIP-архив из содержимого папки проекта "Функции" с помощью встроенных функций сжатия .zip или средств, отличных от Майкрософт.

Архив должен содержать файлhost.json в корне извлеченной папки. Выбранный стек языков для приложения-функции создает другие требования:

Это важно

Для языков, создающих скомпилированные выходные данные для развертывания, обязательно сжимайте содержимое выходной папки, которую планируется опубликовать, а не всю папку проекта. Когда Функции извлекают содержимое ZIP-архива, host.json файл должен существовать в корне пакета.

Установите WEBSITE_RUN_FROM_PACKAGE = 1

В этом разделе содержатся сведения о том, как запустить приложение-функцию из локального файла пакета.

Рекомендации по развертыванию из пакета на сайте

  • Использование пакета на сайте является рекомендуемым вариантом запуска из пакета развертывания, за исключением случаев, когда выполняется на Linux, размещенной в плане потребления.
  • Zip-развертывание — это рекомендуемый способ загрузки пакета развертывания на ваш сайт.
  • Если вы не используете zip-развертывание, убедитесь, что c:\home\data\SitePackages папка (Windows) или /home/data/SitePackages (Linux) содержит файл с именем packagename.txt. Этот файл содержит только имя файла пакета без пробелов, который находится в этой папке и в данный момент запущен.

Интеграция с zip-развертыванием

Развертывание Zip — это функция Службы приложений Azure, которая позволяет развернуть проект приложения-функции в каталоге wwwroot . Проект упаковается в виде файла развертывания .zip. Те же API можно использовать для развертывания пакета в папке c:\home\data\SitePackages (Windows) или /home/data/SitePackages (Linux).

При задании WEBSITE_RUN_FROM_PACKAGE значения 1параметра приложения API-интерфейсы zip-развертывания копируют пакет в c:\home\data\SitePackages папку (Windows) или /home/data/SitePackages (Linux) вместо извлечения файлов в c:\home\site\wwwroot (Windows) или /home/site/wwwroot (Linux). Он также создает packagename.txt файл. После автоматического перезапуска приложения-функции пакет подключается к wwwroot файловой системе только для чтения. Дополнительные сведения о развертывании ZIP см. в статье о развертывании ZIP для Функций Azure.

Замечание

При развертывании активируется перезапуск приложения-функции. Выполнение функций, выполняемых в настоящее время во время развертывания, завершается. Чтобы узнать, как писать функции без состояния и оборонительные функции, смотрите Писать функции без состояния.

Используйте WEBSITE_RUN_FROM_PACKAGE = URL

В этом разделе содержатся сведения о том, как запустить приложение-функцию из пакета, развернутого в конечной точке URL-адреса. Этот параметр является единственным, поддерживаемым для запуска из размещенного в Linux пакета с планом потребления. В плане Flex Consumption этот параметр не поддерживается.

Рекомендации по развертыванию из URL-адреса

  • Не устанавливайте WEBSITE_RUN_FROM_PACKAGE = <URL> в приложениях при использовании плана Flex Consumption. Этот параметр не поддерживается.
  • Приложения-функции, работающие на Windows, испытывают небольшое увеличение времени холодного запуска при развертывании пакета приложения на URL-адресе через WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • При указании URL-адреса необходимо также вручную синхронизировать триггеры после публикации обновленного пакета.
  • Среда выполнения Функций должна иметь разрешения на доступ к URL-адресу пакета.
  • Не развертывайте пакет в хранилище BLOB-объектов Azure в качестве общедоступного BLOB-объекта. Вместо этого используйте частный контейнер с подписанной строкой доступа (SAS) или управляемое удостоверение, чтобы среда выполнения Функций могла получить доступ к пакету.
  • Необходимо поддерживать все URL-адреса SAS, используемые для развертывания. По истечении срока действия SAS пакет больше не может быть развернут. В этом случае необходимо создать новый SAS и обновить параметр в приложении-функции. Это бремя управления можно устранить с помощью управляемого удостоверения.
  • При выполнении плана "Премиум" не забудьте исключить холодные запуски.
  • При использовании выделенного плана убедитесь, что вы включите Always On.
  • Вы можете использовать Обозреватель хранения Azure для загрузки файлов пакетов данных в контейнеры BLOB в вашей учетной записи хранения.

Ручная загрузка пакета в хранилище BLOB-объектов

Чтобы развернуть пакет в формате ZIP при использовании параметра URL-адреса, необходимо создать сжатый пакет развертывания .zip и загрузить его в пункт назначения. Следующая процедура развертывается в контейнере в хранилище BLOB-объектов:

  1. Создайте пакет .zip для проекта с помощью выбранной программы.

  2. На портале Azure найдите имя учетной записи хранения или найдите ее в списке учетных записей хранения.

  3. В учетной записи хранения выберите контейнеры в разделе хранилище данных.

  4. Выберите +Контейнер, чтобы создать новый контейнер Blob-хранилища в вашей учетной записи.

  5. На странице "Создать контейнер " укажите имя (например, развертывания), убедитесь, что уровень анонимного доступа является закрытым, а затем нажмите кнопку "Создать".

  6. Выберите созданный контейнер, нажмите кнопку "Отправить", перейдите к расположению файла .zip, созданного в проекте, и нажмите кнопку "Отправить".

  7. После завершения загрузки выберите загруженный файл типа blob и скопируйте URL-адрес. Если вы не используете управляемое удостоверение, возможно, потребуется создать URL-адрес SAS (Shared Access Signature).

  8. Найдите приложение-функцию или просмотрите его на странице Приложение-функция.

  9. В приложении-функции разверните узел "Параметры" и выберите переменные среды.

  10. На вкладке "Параметры приложения " нажмите кнопку "+ Добавить".

  11. Введите значение WEBSITE_RUN_FROM_PACKAGE для Имя и вставьте URL-адрес вашего пакета в хранилище BLOB-объектов для Значение.

  12. Выберите "Применить", а затем нажмите кнопку "Применить " и " Подтвердить ", чтобы сохранить параметр и перезапустить приложение-функцию.

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

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

Вы можете настроить Хранилище 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. Идентификатор ресурса управляемого удостоверения, назначаемого пользователем, можно получить в разделе "Параметры ->Свойства ->Идентификатор назначенного пользователем управляемого удостоверения.