Работа с контейнерами и Функции Azure

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

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

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

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

Создание первого контейнерного Функции Azure в приложениях контейнеров Azure

Дополнительные сведения о развертывании в приложениях контейнеров Azure см. в статье "Приложения контейнеров Azure" для размещения Функции Azure.

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

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

Внимание

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

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

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

Создание Файла Dockerfile

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

Способ создания Файла Dockerfile зависит от способа создания проекта.

  • При создании проекта "Функции" с помощью Функции Azure Основных инструментов включите --docker параметр при выполнении func init команды, как показано в следующем примере:

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

    func init --docker-only
    

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

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

С помощью файла 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> именем сервера входа.

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

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 создавать с помощью контейнеров

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

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

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

  2. На странице Создать щелкните Вычислительные ресурсы>Приложение-функция.

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

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

*Имя приложения должно быть глобально уникальным среди всех Функции Azure размещенных приложений.

  1. В параметрах размещения и планах выберите "Функции премиум".

    Screenshot of the Basics tab in the Azure portal when creating a function app for hosting a container in a Functions Premium plan.

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

*Имя приложения должно быть уникальным в среде приложений контейнеров Azure. Не все регионы поддерживаются в предварительной версии. Дополнительные сведения см. в разделе "Рекомендации по размещению приложений контейнеров".

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

    Portal create Basics tab for a containerized function app hosted in Azure Container Apps.

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

    По умолчанию среда создается в плане потребления без избыточности зоны, чтобы свести к минимуму затраты. Вы также можете выбрать существующую среду приложений контейнеров. Дополнительные сведения о средах см . в средах azure Container Apps.

  1. Примите параметры по умолчанию для создания новой учетной записи хранения на вкладке служба хранилища и нового экземпляра Application Insights на вкладке "Мониторинг". Вы также можете использовать существующую учетную запись хранения или экземпляр приложения Аналитика.
  1. Выберите вкладку "Развертывание" и снимите флажок "Использовать образ быстрого запуска". Если этого не сделать, приложение-функция развертывается из базового образа для языка приложения-функции.

  2. Выберите тип изображения, общедоступный или закрытый. Выберите private, если вы используете Реестр контейнеров Azure или другой частный реестр. Укажите имя образа, включая префикс реестра. Если вы используете частный реестр, укажите учетные данные проверки подлинности реестра образов.

  3. Выберите Просмотр и создание , чтобы просмотреть выбранные параметры конфигурации приложения.

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

  1. Выберите Просмотр и создание , чтобы просмотреть выбранные параметры конфигурации приложения.

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

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

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

Работа с изображениями в Функции Azure

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

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

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

Профили рабочей нагрузки приложений контейнеров

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

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

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

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

При создании контейнерного приложения-функции в среде с включенными профилями рабочей нагрузки также следует указать профиль, в котором выполняется выполнение. Это можно сделать с помощью --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> именем, использованным в предыдущем разделе для учетной записи хранения. Кроме того, замените <APP_NAME> глобально уникальное имя, соответствующее вам.

Кроме того, замените <CPU_COUNT> требуемым количеством виртуальных ЦП не менее 0,5 до максимального допустимого профиля. Для <MEMORY_SIZE>этого выберите объем выделенной памяти от 1 ГБ до максимального допустимого профиля.

Параметры приложения

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

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

Внимание

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

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

  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> на имя приложения-функции.

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

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

    Screenshot showing how to add the webhook in your Docker Hub window.

  4. С помощью набора веб-перехватчика служба Функции Azure повторно развертывает образ при каждом обновлении в Docker Hub.

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

SSH обеспечивает безопасный обмен данными между клиентом и контейнером. При включенном протоколе SSH вы можете подключиться к контейнеру с помощью расширенных инструментов Службы приложений (KUDU). Чтобы упростить подключение к контейнеру по SSH, служба "Функции Azure" предоставляет базовый образ, в котором уже включен протокол SSH. Вам необходимо только изменить Dockerfile, а затем перестроить и повторно развернуть образ. Затем вы можете подключиться к контейнеру с помощью Дополнительных инструментов (Kudu).

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

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

    В этом примере используется версия SSH базового образа Node.js версии 18. Посетите репозиторий базовых образов Функции Azure, чтобы убедиться, что вы используете последнюю версию базового образа с поддержкой 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 автоматически повторно развертывает образ в приложении-функции; процесс выполняется менее чем за минуту.

  5. В браузере откройте https://<app_name>.scm.azurewebsites.net/, заменив <app_name> уникальным именем. Это URL-адрес конечной точки Дополнительных инструментов (Kudu) для контейнера приложения-функции.

  6. Войдите в свою учетную запись Azure, а затем выберите вкладку SSH, чтобы создать подключение к контейнеру. Если Azure все еще обновляет образ контейнера, подключение может занять некоторое время.

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

    Screenshot that shows Linux top command running in an SSH session.

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

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