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


Запуск функций из файла пакета в 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) приложения-функции. Это параметр по умолчанию при использовании Функции Azure Core Tools.
<URL> Задает URL-адрес, который является удаленным расположением определенного файла пакета, который требуется запустить. Требуется для функций приложений, работающих в Linux в тарифе потребления.

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

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

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

  • Не добавляйте WEBSITE_RUN_FROM_PACKAGE параметр приложения в приложения на плане Flex Consumption.
  • Файл пакета должен быть отформатирован .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, как описано в 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, ZIP API-интерфейсы развертывания скопируют ваш пакет в папку c:\home\data\SitePackages (Windows) или /home/data/SitePackages (Linux) вместо извлечения файлов в папку c:\home\site\wwwroot (Windows) или /home/site/wwwroot (Linux). Он также создает файл packagename.txt . После автоматического перезапуска приложения-функции пакет подключается к wwwroot файловой системе только для чтения. Дополнительные сведения о развертывании ZIP см. в статье Zip deployment for Функции Azure.

Замечание

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

Использование WEBSITE_RUN_FROM_PACKAGE = <URL-адрес>

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

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

  • Не устанавливайте WEBSITE_RUN_FROM_PACKAGE = <URL> в приложениях на плане потребления Flex. Этот параметр не поддерживается.
  • Приложения-функции, работающие на Windows, испытывают небольшое увеличение времени холодного запуска при развертывании пакета приложения в конечной точке URL-адреса, используя WEBSITE_RUN_FROM_PACKAGE = <URL>.
  • При указании URL-адреса необходимо также вручную синхронизировать триггеры после публикации обновленного пакета.
  • Среда выполнения Функций должна иметь разрешения на доступ к URL-адресу пакета.
  • Не добавляйте ваш пакет в Хранилище BLOB-объектов Azure как публичный блоб. Вместо этого используйте частный контейнер с подписанной строкой доступа (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 для Name и вставьте URL-адрес пакета в Хранилище BLOB-объектов для Value.

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

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

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

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

  • непрерывное развертывание для Функции Azure