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


Работа с контейнерами и Azure Functions

В этой статье демонстрируется, как Azure Functions поддерживает контейнерные приложения-функции, работающие в среде Azure Container Apps. Дополнительные сведения см. в разделе об использовании Azure Functions в Azure Container Apps.

Important

Теперь доступен новый метод размещения для запуска Azure Functions непосредственно в Azure Container Apps. См. раздел Поддержка родных функций Azure в Azure Container Apps. Эта интеграция позволяет использовать все функции и возможности Azure Container Apps. Вы также можете воспользоваться моделью программирования функций и простотой автомасштабирования, предоставляемой Azure Functions.

Мы рекомендуем этот подход для большинства новых рабочих нагрузок. Дополнительные сведения см. в Azure Functions в Azure Container Apps.

В этой статье демонстрируется поддержка Azure Functions для функциональных приложений, которые работают в контейнерах Linux.

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

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

Создайте вашу первую контейнеризированную функцию Azure на Azure Container Apps

Дополнительные сведения о развертывании в Azure Container Apps см. в статье размещение Azure Functions в Azure Container Apps.

Important

В этой статье показано, как подключиться к учетной записи storage по умолчанию с помощью connection string. Для обеспечения оптимальной безопасности вместо этого создайте подключение на основе управляемых удостоверений для Azure Storage с помощью проверки подлинности Microsoft Entra. Дополнительные сведения см. в разделе Соединения.

Создание контейнерных приложений-функций

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

Important

При создании собственных контейнеров необходимо сохранить базовый образ контейнера обновленным до последнего поддерживаемого базового образа. Поддерживаемые базовые образы для Azure Functions зависят от языка. См. репозитории базового образа Azure Functions.

Команда Functions обязуется публиковать ежемесячные обновления для этих базовых изображений. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера. Дополнительные сведения см. в разделе "Обслуживание пользовательских контейнеров".

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

Создайте Dockerfile

Инструменты функций предоставляют параметр Docker, который создает Dockerfile с кодом функций вашего проекта. Этот файл можно использовать с Docker для создания функций в контейнере, наследуемом от правильного базового образа, который включает язык и версию.

Способ создания Dockerfile зависит от того, как вы создаете свой проект.

  • При создании проекта Functions с помощью Azure Functions Core Tools, включите параметр --docker при выполнении команды func init, как показано в следующем примере:

    func init --docker
    
  • Вы также можете добавить Dockerfile в существующий project с помощью параметра --docker-only при выполнении команды func init в существующей папке project, как показано в следующем примере:

    func init --docker-only
    

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

Создайте пользовательский Dockerfile

Вместо использования созданного файла Dockerfile можно вручную создать его, если вам потребуется больше контроля над образом контейнера. Папка пользовательскогоazure-functions-docker контейнера репозитория предоставляет следующие шаблоны, чтобы приступить к работе:

Template Description
template.Dockerfile Руководство с комментариями и пошаговыми инструкциями по созданию пользовательского контейнера. Он содержит инструкции для нескольких языковых сред выполнения (Java, .NET изолированный, Node.js, PowerShell, Python), необязательной установки сертификата ЦС, запуска в качестве пользователя, не являющегося корневым, и включения SSH для отладки Kudu.
sample.Dockerfile Готовый пример использования, созданный на основе шаблона, который создает контейнер функций Azure на основе Java с поддержкой SSH для отладки Kudu.

Создайте ваше функциональное приложение в контейнере

С помощью файла Dockerfile, созданного с использованием функций, в вашем проекте кода можно использовать Docker для создания контейнеризированного приложения-функции на локальном компьютере. Следующая команда docker build создает образ функций контейнера из проекта в локальном каталоге:

docker build --tag <DOCKER_ID>/<IMAGE_NAME>:v1.0.0 .

Пример создания контейнера см. в статье о сборке образа контейнера и локальной проверке.

Обновление образа в реестре

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

az acr build --registry <REGISTRY_NAME> --image <LOGIN_SERVER>/azurefunctionsimage:v1.0.1 .

Замените <REGISTRY_NAME> на экземпляр контейнерного реестра и <LOGIN_SERVER> на имя сервера входа.

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

az functionapp config container set --image <IMAGE_NAME> --registry-password <SECURE_PASSWORD>--registry-username <USER_NAME> --name <APP_NAME> --resource-group <RESOURCE_GROUP>

В этом примере <IMAGE_NAME> является полным именем нового образа, включая версию. Частные реестры требуют предоставления имени пользователя и пароля. Безопасно храните эти учетные данные.

Следует также рассмотреть возможность включения непрерывного развертывания.

Создание контейнерного приложения-функции с помощью Azure portal

При создании функционального приложения в Azure portal вы можете развернуть его из образа контейнера в контейнерном реестре. Сведения о создании контейнерного приложения-функции в реестре контейнеров см. в статье "Создание приложения-функции в контейнере".

Ниже описано, как создать и развернуть существующее контейнерное приложение-функцию из реестра контейнеров.

  1. В меню портала Azure или на странице Home выберите Создать ресурс.

  2. На новой странице выберитевеб-приложение-функцию>.

  3. В разделе "Выбор размещения" выберите "Функции Премиум">Выбрать.

    Это действие создает функциональное приложение, размещенное в службе Azure Functions на плане Premium, который поддерживает динамическое масштабирование. Вы также можете выбрать запуск в плане App Service, но в таком выделенном плане необходимо управлять масштабированием вашего приложения-функции.

  4. На странице Основные сведения используйте параметры приложения-функции как указано в таблице ниже:

    Setting Рекомендуемое значение Description
    Subscription Ваша подписка Подписка, в которой вы создаете функциональное приложение.
    Группа ресурсов myResourceGroup Имя новой группы ресурсов, в которой создается приложение-функция. Необходимо создать группу ресурсов, так как при создании приложений-функций в существующей группе ресурсов существуют известные ограничения.
    Имя приложения-функции Имя приложения Имя, которое идентифицирует ваше новое приложение-функцию. Допустимые символы: a-z (без учета регистра), 0-9 и -.
    Безопасное уникальное имя узла по умолчанию Enabled Включите эту функцию, чтобы вам не нужно беспокоиться о конфликтах доменных имен независимо от имени приложения.
    Вы хотите развернуть код или образ контейнера? Образ контейнера Разверните контейнерное функциональное приложение из реестра. Сведения о создании приложения-функции в реестре см. в статье "Создание приложения-функции" в локальном контейнере Linux.
    Region Предпочтительный регион Выберите регион рядом с вами или рядом с другими службами, к которым могут обращаться ваши функции.
    План Linux Новый план (по умолчанию) Создает новый план Premium для размещения вашего приложения. Вы также можете выбрать существующий план уровня "Премиум".
    Тарифный план Еластик Премиум EP1 EP1 является самым доступным планом. Вы можете выбрать более крупный план, если это необходимо.
    Избыточность между зонами Disabled Эта функция не нужна в непроизводном приложении.
  5. Примите параметры по умолчанию для создания новой учетной записи storage на вкладке Storage и новый экземпляр Application Insights на вкладке Monitoring. Вы также можете использовать существующую учетную запись storage или экземпляр Application Insights.

  6. Выберите Review + create, чтобы просмотреть параметры конфигурации приложения.

  7. На странице "Просмотр и создание" проверьте параметры и выберите Создать, чтобы развернуть функциональное приложение, используя базовый образ по умолчанию.

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

  9. В Центре развертывания вы можете подключить реестр контейнеров в качестве источника образа. Вы также можете включить GitHub Actions или Azure Pipelines для более надежного непрерывного развертывания обновлений в контейнере в реестре.

Создание контейнерного приложения-функции с помощью Azure portal

При создании приложения-функции, размещенного в Container Apps, в портале Azure вы можете выбрать развертывание вашего приложения-функции из образа в реестре контейнеров. Сведения о создании контейнерного приложения-функции в реестре контейнеров см. в статье "Создание приложения-функции в контейнере".

Ниже описано, как создать и развернуть существующее контейнерное приложение-функцию из реестра контейнеров.

  1. В меню портала Azure или на странице Home выберите Создать ресурс.

  2. На новой странице выберитевеб-приложение-функцию>.

  3. Щелкните «Выберите вариант размещения», выберите среду для приложений контейнеров>Выбрать.

  4. На странице Основные сведения используйте параметры приложения-функции как указано в таблице ниже:

    Setting Рекомендуемое значение Description
    Subscription Ваша подписка Подписка, в которой вы создаете функциональное приложение.
    Группа ресурсов myResourceGroup Имя новой группы ресурсов, в которой создается приложение-функция. Необходимо создать группу ресурсов, так как при создании приложений-функций в существующей группе ресурсов существуют известные ограничения.
    Имя приложения-функции Уникальное имя* Имя, которое идентифицирует ваше новое приложение-функцию. Допустимые символы: a-z (без учета регистра), 0-9 и -.
    Region Предпочтительный регион Выберите регион рядом с вами или рядом с другими службами, к которым могут обращаться ваши функции.

    *Имя приложения должно быть уникальным в пределах среды Azure Container Apps.

  5. На странице Basics принимайте предложенную новую среду для Azure Container Apps. Чтобы свести к минимуму затраты, новая среда по умолчанию создается в Потребление + Выделенное с профилем рабочей нагрузки по умолчанию и без зональной избыточности. Дополнительные сведения см. в разделе об использовании Azure Functions в Azure Container Apps.

    Вы также можете использовать существующую среду для контейнерных приложений. Чтобы создать настраиваемую среду, выберите "Создать". На странице «Создание среды приложений контейнеров» можно добавить нестандартные профили рабочих нагрузок или включить зональную избыточность. Дополнительные сведения о средах см. в разделе среды Azure Container Apps.

  6. Выберите вкладку Контейнер и снимите флажок Использовать образ для быстрого старта. В противном случае функциональное приложение разворачивается из базового образа для языка функционального приложения.

  7. Выберите тип изображения, общедоступный или закрытый. Выберите Private если вы используете Azure Container Registry или другой частный реестр. Укажите имя образа, включая префикс реестра. Если вы используете частный реестр, укажите учетные данные проверки подлинности реестра образов. Параметр Public поддерживает только изображения, хранящиеся публично в Docker Hub.

  8. В разделе "Выделение ресурсов контейнера" выберите требуемое количество ядер ЦП и доступной памяти. Если в вашей среде добавлены другие профили рабочей нагрузки, можно выбрать профиль рабочей нагрузки, отличный от него. Выбор на этой странице влияет на стоимость размещения приложения. См. страницу цен на Container Apps, чтобы оценить потенциальные затраты.

  9. Выберите Review + create, чтобы просмотреть параметры конфигурации приложения.

  10. На странице "Проверка и создание" просмотрите параметры, а затем выберите "Создать", чтобы подготовить приложение-функцию и развернуть образ контейнера из реестра.

Работа с изображениями в Azure Functions

При развертывании контейнера приложения функций из реестра, служба Azure Functions сохраняет информацию об исходном образе.

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

  • az functionapp config container show: возвращает сведения о образе, используемом для развертывания.

  • az functionapp config container set: измените параметры реестра или обновите образ, используемый для развертывания, как показано в предыдущем примере.

Используйте рабочие профили нагрузки для контейнеризированных приложений

Профили рабочей нагрузки — это функция приложений-контейнеров, которые позволяют лучше управлять ресурсами развертывания. Azure Functions в Azure Container Apps также поддерживает профили рабочей нагрузки. Дополнительные сведения см. в разделе Профили рабочей нагрузки в Azure Container Apps.

Вы также можете задать объем ресурсов ЦП и памяти, выделенных вашему приложению.

Вы можете создавать профили рабочей нагрузки и выделения ресурсов и управлять ими, используя Azure CLI или в Azure portal.

Вы активируете профили рабочей нагрузки при создании среды контейнерного приложения. Пример см. в разделе "Создание приложения контейнера" в профиле.

В среде можно добавлять, изменять и удалять профили. Пример см. в разделе "Добавление профилей".

При создании контейнерного приложения-функции в среде с включенными профилями рабочей нагрузки также следует указать профиль, в котором выполняется выполнение. Укажите профиль с помощью параметра --workload-profile-name команды az functionapp create, как показано в следующем примере:

az functionapp create --name <APP_NAME> --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --resource-group AzureFunctionsContainers-rg --functions-version 4 --runtime <LANGUAGE_STACK> --image <IMAGE_URI> --workload-profile-name <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

В команде az functionapp create параметр --environment указывает среду приложений контейнеров и параметр --image указывает образ, используемый для приложения-функции. В этом примере замените <STORAGE_NAME> именем, используемым в предыдущем разделе для учетной записи storage. Кроме того, замените <APP_NAME> на имя, подходящее для вас и уникальное в данной среде.

Чтобы задать ресурсы, выделенные вашему приложению, замените <CPU_COUNT> требуемым количеством виртуальных CPU — от 0,5 до максимально допустимого значения профиля. Для <MEMORY_SIZE> выберите объём выделенной памяти от 1 ГБ до максимального, допустимого согласно профилю.

Вы можете использовать команду az functionapp container set для управления выделенными ресурсами и профилем рабочей нагрузки, используемым приложением.

az functionapp container set --name <APP_NAME> --resource-group AzureFunctionsContainers-rg --workload-profile-name  <PROFILE_NAME> --cpu <CPU_COUNT> --memory <MEMORY_SIZE> 

Использование параметров приложения

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

Tip

По умолчанию контейнерное приложение-функция отслеживает порт 80 для входящих запросов. Если приложение должно использовать другой порт, используйте WEBSITES_PORT параметр приложения для изменения этого порта.

Включение непрерывного развертывания для Azure

При размещении контейнерного приложения-функции в Azure Container Apps существует два способа настройки непрерывного развертывания из репозитория исходного кода:

В настоящее время вы не можете непрерывно развертывать контейнеры на основе изменений образа в реестре контейнеров. Вместо этого необходимо использовать эти конвейеры непрерывного развертывания, основанные на исходном коде.

Включение непрерывного развертывания для Azure

Important

Развертывание на основе веб-перехватчика в настоящее время не поддерживается при запуске контейнера в «плане Elastic Premium». Если необходимо использовать метод непрерывного развертывания, описанный в этом разделе, вместо этого разверните контейнер в плане App Service. При запуске в плане Elastic Premium необходимо вручную перезапустить приложение при каждом обновлении контейнера в репозитории.

Вы также можете настроить непрерывное развертывание из репозитория исходного кода с помощью Azure Pipelines или GitHub Actions.

Вы можете включить Azure Functions автоматическое обновление развертывания образа при каждом обновлении образа в реестре.

  1. Используйте следующую команду, чтобы включить непрерывное развертывание и получить URL-адрес веб-перехватчика:
az functionapp deployment container config --enable-cd --query CI_CD_URL --output tsv --name <APP_NAME> --resource-group AzureFunctionsContainers-rg

Команда az functionapp deployment container config включает непрерывное развертывание и возвращает URL-адрес веб-перехватчика развертывания. Этот URL-адрес можно получить в любое время с помощью команды az functionapp deployment container show-cd-url.

Как и ранее, необходимо заменить <APP_NAME> на имя приложения-функции.

  1. Скопируйте URL-адрес развертывания веб-перехватчика в буфер обмена.

  2. Откройте Docker Hub, войдите и выберите Repositories на панели навигации. Найдите и выберите изображение, перейдите на вкладку "Веб-перехватчики ", укажите имя веб-перехватчика, вставьте URL-адрес в URL-адрес веб-перехватчика и нажмите кнопку "Создать".

    Снимок экрана, показывающий, как добавить веб-перехватчик в окно Docker Hub.

  3. При установке веб-хука Azure Functions повторно развертывает образ каждый раз, когда вы обновляете его в Docker Hub.

Включение SSH-подключений

SSH обеспечивает безопасный обмен данными между клиентом и контейнером. При включенной поддержке SSH, вы можете подключиться к контейнеру с помощью расширенных средств App Service (Kudu). Для простого подключения к контейнеру с помощью SSH служба Azure Functions предоставляет базовый образ, в котором SSH уже активирован. Измените файл Dockerfile, затем перестройте и снова разверните образ. Затем вы можете подключиться к контейнеру с помощью Дополнительных инструментов (Kudu).

  1. В Dockerfile добавьте строку -appservice к базовому изображению в FROM инструкции, как показано в следующем примере:

    FROM mcr.microsoft.com/azure-functions/node:4-node18-appservice
    

    В этом примере используется версия базового образа Node.js версии 18, с поддержкой SSH. Посетите репозитории базовых образов Azure Functions, чтобы убедиться, что вы используете новейшую версию базового образа с поддержкой SSH.

  2. Перестройте образ с помощью команды docker build, заменив <DOCKER_ID> на идентификатор вашей учетной записи Docker Hub, как показано в следующем примере.

    docker build --tag <DOCKER_ID>/azurefunctionsimage:v1.0.0 .
    
  3. Отправьте обновленное изображение в Docker Hub, что должно занять значительно меньше времени, чем первая отправка. Только обновлённые сегменты изображения должны быть загружены сейчас.

    docker push <DOCKER_ID>/azurefunctionsimage:v1.0.0
    
  4. Azure Functions автоматически повторно развертывает образ в функциональном приложении. Процесс выполняется менее чем за минуту.

  5. Найдите приложение-функцию в Azure portal. В меню слева выберите Средства разработки>SSH. Нажмите кнопку "Перейти". Подключение может занять несколько минут, если Azure по-прежнему обновляет образ контейнера.

  6. После установки подключения к контейнеру выполните команду top, чтобы просмотреть выполняющиеся в данный момент процессы.

    Снимок экрана: основная команда Linux, выполняемая в рамках сеанса SSH.

В следующих статьях содержатся дополнительные сведения о развертывании контейнеров и управлении ими.