Развертывание Функций Azure из ZIP-файла

В этой статье описывается развертывание файлов проекта приложения-функции Azure из (сжатого) ZIP-файла. Вы узнаете, как принудительно начать развертывание, как с помощью интерфейса командной строки Azure, так и с помощью REST API. В основных инструментах Функций Azure также используются эти API развертывания при публикации локального проекта в Azure.

Развертывание из ZIP-файла также является простым способом запуска функций из пакета развертывания. Дополнительные сведения см. в Запуск функций из файла пакета в Azure.

Служба приложений Azure предоставляет широкий спектр параметров для непрерывной интеграции и развертывания Функций Azure. Дополнительные сведения см. в статье Непрерывное развертывание для функций Azure.

Чтобы ускорить разработку, можно упростить развертывание файлов проекта приложения-функции непосредственно из файла .zip. API развертывания ZIP-файла извлекает содержимое ZIP-файла в папку wwwroot приложения-функции. Это развертывание ZIP-файла осуществляется с помощью той же службы Kudu, которая обеспечивает непрерывное развертывание на основе интеграции, включая:

  • удаление файлов, оставшихся после предыдущих развертываний;
  • настройку развертывания, в том числе выполнение скриптов развертывания;
  • журналы развертывания.
  • синхронизацию триггеров функций в приложении-функции План потребления.

Дополнительные сведения см. в справочнике по развертыванию из ZIP-файлов.

Требования к развертыванию из ZIP-файла

Используемый для принудительного развертывания ZIP-файл должен содержать все файлы, необходимые для выполнения функции.

Внимание

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

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

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

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

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

Развертывание с помощью интерфейса командной строки Azure

Azure CLI можно использовать для активации принудительного развертывания. Активируйте принудительное развертывание ZIP-файла в свое приложение-функцию с помощью команды az functionapp deployment source config-zip. Чтобы использовать эту команду, необходимо использовать Azure CLI версии 2.0.21 или более поздней версии. Чтобы просмотреть версию Azure CLI, воспользуйтесь командой az --version.

В следующей команде вместо заполнителя <zip_file_path> укажите путь к расположению ZIP-файла. Кроме того, замените <app_name> уникальным именем приложения функции и замените <resource_group> именем группы ресурсов.

az functionapp deployment source config-zip -g <resource_group> -n \
<app_name> --src <zip_file_path>

Эта команда выполняет развертывание файлов проекта из загруженного ZIP-файла для приложения-функции в Azure. Затем приложение перезапускается. Чтобы просмотреть список развертываний для этого приложения-функции, необходимо использовать REST API.

Если вы используете Azure CLI на локальном компьютере, <zip_file_path> — это путь к ZIP-файлу на компьютере. Можно также запустить Azure CLI в Azure Cloud Shell. При использовании Cloud Shell необходимо сначала отправить ZIP-файл развертывания в учетную запись Файлы Azure, связанную с Cloud Shell. В этом случае <zip_file_path> — это место хранения, используемое в учетной записи Cloud Shell. Дополнительные сведения см. в статье Сохранение файлов в Azure Cloud Shell.

Развертывание ZIP-файла с помощью с REST API

Вы можете использовать REST API службы развертывания, чтобы развернуть ZIP-файл в приложении в Azure. Чтобы развернуть, отправьте запрос https://<app_name>.scm.azurewebsites.net/api/zipdeployPOST в . В тексте сообщения запроса POST должен содержаться ZIP-файл. Учетные данные развертывания для приложения указываются в запросе с использованием обычной проверки подлинности HTTP. Дополнительные сведения см. в справочнике по принудительному развертыванию из ZIP-файлов.

Для обычной аутентификации HTTP требуются учетные данные развертывания службы приложений. См. дополнительные сведения об установке и сбросе учетных данных на уровне пользователя.

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

В примере ниже для развертывания ZIP-файла используется средство cURL. Замените заполнители <deployment_user>, <zip_file_path> и <app_name>. Когда в cURL появится запрос, введите пароль.

curl -X POST -u <deployment_user> --data-binary "@<zip_file_path>" https://<app_name>.scm.azurewebsites.net/api/zipdeploy

Этот запрос позволяет активировать принудительное развертывание из отправленного ZIP-файла. Вы можете просмотреть текущие и предыдущие развертывания, используя конечную точку https://<app_name>.scm.azurewebsites.net/api/deployments, как показано в примере cURL ниже. Точно так же замените <app_name> именем приложения и <deployment_user> — именем пользователя из учетных данных развертывания.

curl -u <deployment_user> https://<app_name>.scm.azurewebsites.net/api/deployments

Асинхронное развертывание из ZIP-файла

При синхронном развертывании могут возникать ошибки, связанные с истечением времени ожидания подключения. Добавьте ?isAsync=true в URL-адрес для асинхронного развертывания. Вы получите ответ сразу после отправки ZIP-файла с заголовком Location, указывающим на URL-адрес состояния развертывания для опроса. При опросе URL-адреса, указанного в заголовке Location, вы получите ответ HTTP 202 ("принято"), пока процесс продолжается, и ответ HTTP 200 ("ОК"), когда архив будет расширен и развертывание будет успешно завершено.

Проверка подлинности Microsoft Entra

Альтернативой использованию проверки подлинности HTTP BASIC для развертывания ZIP является использование удостоверения Microsoft Entra. Удостоверение Microsoft Entra может потребоваться, если для сайта SCM отключена проверка подлинности HTTP BASIC.

Потребуется действительный маркер доступа Microsoft Entra для пользователя или субъекта-службы, выполняющего развертывание. Маркер доступа можно получить с помощью команды Azure CLI az account get-access-token. Маркер доступа будет использоваться в заголовке проверки подлинности HTTP-запроса POST.

curl -X POST \
    --data-binary "@<zip_file_path>" \
    -H "Authorization: Bearer <access_token>" \
    "https://<app_name>.scm.azurewebsites.net/api/zipdeploy"

С помощью PowerShell

В следующем примере ZIP-файл загружается с помощью Publish-AzWebapp. Замените заполнители <group-name>, <app-name> и <zip-file-path>.

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

Этот запрос позволяет активировать принудительное развертывание из отправленного ZIP-файла.

Чтобы просмотреть текущие и прошлые развертывания, выполните следующие команды. Снова замените заполнители <deployment-user>, <deployment-password> и <app-name>.

$username = "<deployment-user>"
$password = "<deployment-password>"
$apiUrl = "https://<app-name>.scm.azurewebsites.net/api/deployments"
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username, $password)))
$userAgent = "powershell/1.0"
Invoke-RestMethod -Uri $apiUrl -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -UserAgent $userAgent -Method GET

Развертывание с помощью шаблона ARM

Расширение шаблона ARM ZipDeploy можно использовать для отправки файла .zip в приложение-функцию.

Пример шаблона ARM ZipDeploy

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

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "appServiceName": {
      "type": "string"
    },
    "deployToProduction": {
      "type": "bool",
      "defaultValue": false
    },
    "slot": {
      "type": "string",
      "defaultValue": "staging"
    },
    "packageUri": {
      "type": "secureString"
    }
  },
  "resources": [
    {
      "condition": "[parameters('deployToProduction')]",
      "type": "Microsoft.Web/sites/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/ZipDeploy', parameters('appServiceName'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    },
    {
      "condition": "[not(parameters('deployToProduction'))]",
      "type": "Microsoft.Web/sites/slots/extensions",
      "apiVersion": "2021-02-01",
      "name": "[format('{0}/{1}/ZipDeploy', parameters('appServiceName'), parameters('slot'))]",
      "properties": {
        "packageUri": "[parameters('packageUri')]",
        "appOffline": true
      }
    }
  ]
}

Для первоначального развертывания вы будете развертывать непосредственно в рабочем слоте. Дополнительные сведения см. в разделе "Развертывания слотов".

Выполнение функций из пакета развертывания

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

Развертывание из ZIP-файла интегрируется с этой возможностью. Ее можно включить, задав для параметра приложения-функции WEBSITE_RUN_FROM_PACKAGE значение 1. Дополнительные сведения см. в разделе Run your Azure Functions from a package file (Запуск Функций Azure из файла пакета).

Настройка развертывания

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

SCM_DO_BUILD_DURING_DEPLOYMENT=true

При развертывании из отправленного ZIP-файла для этого параметра по умолчанию установлено значение false. Для развертываний с непрерывной интеграцией значение по умолчанию — true. Если установлено значение true, при развертывании используются связанные с ним параметры, которые вы задали. Эти параметры можно настроить как параметры приложения, или указать в файле конфигурации .deployment, который находится в корневом каталоге ZIP-файла. Дополнительные сведения см. в разделе о параметрах, связанных с репозиторием и развертыванием, справочника по развертыванию.

Загрузка файлов приложения-функции

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

  • Портал Azure

    1. Войдите на портал Azure и перейдите к своему приложению-функции.

    2. На вкладке Обзор выберите Загрузить содержимое приложения. Выберите параметры скачивания, а затем выберите команду Загрузить.

      Загрузка проекта приложения-функции

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

  • REST API

    Чтобы загрузить файлы из проекта <function_app>, выполните следующий вызов GET в API развертывания:

    https://<function_app>.scm.azurewebsites.net/api/zip/site/wwwroot/
    

    Добавление части /site/wwwroot/ гарантирует, что ZIP-файл содержит только файлы проекта приложения-функции, а не всего сайта. Если вы еще не вошли в Azure, появится соответствующий запрос.

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

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