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

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

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

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

Запуск функции из файла пакета обеспечивает несколько преимуществ:

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

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

Настройка запуска функций из пакета

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

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

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

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

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

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

Примечание.

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

Добавление параметра WEBSITE_RUN_FROM_PACKAGE

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

После изменения параметров приложения-функции нужно перезапустить приложение-функцию.

Использование WEBSITE_RUN_FROM_PACKAGE = 1

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

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

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

Интеграция с помощью развертывания из ZIP-файла

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

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

Примечание.

Когда происходит развертывание, выполняется перезапуск приложения-функции. Выполнение текущих функций во время развертывания прекращается. Ознакомьтесь с разделом Повышение производительности и надежности Функций Azure, чтобы узнать, как создавать защищенные функции и функции без отслеживания состояния.

Использование WEBSITE_RUN_FROM_PACKAGE

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

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

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

Отправка пакета вручную в хранилище BLOB-объектов

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

  1. Создайте пакет .zip для проекта с помощью программы, которую предпочитаете.

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

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

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

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

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

  7. После завершения загрузки выберите отправленный большой двоичный объект и скопируйте URL-адрес. Возможно, потребуется создать URL-адрес SAS, если вы не используете удостоверение

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

  9. Для приложения-функции выберите Конфигурация в разделе Параметры.

  10. На вкладке Параметры приложения выберите Новый параметр приложения.

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

  12. Нажмите ОК. Затем нажмите кнопку Сохранить>Продолжить, чтобы сохранить параметр и перезапустить приложение.

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

Далее показано приложение-функция, настроенное для запуска из ZIP-файла, размещенного в хранилище BLOB-объектов Azure:

WEBSITE_RUN_FROM_ZIP app setting

Получение пакета из Хранилища BLOB-объектов Azure с помощью управляемого удостоверения

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

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

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

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

  3. Задайте параметр приложения WEBSITE_RUN_FROM_PACKAGE для URL-адреса большого двоичного объекта пакета. Этот URL-адрес будет представлен в формате: https://{имя_учетной_записи_хранения}.blob.core.windows.net/{имя_контейнера}/{путь_к_пакету} (или подобном).

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