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

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

Important

Вы можете размещать Функции Azure напрямую в Контейнеры приложений Azure, используя Microsoft.App провайдер ресурсов. Используя эту интеграцию, вы сможете использовать все функции и возможности Контейнеры приложений Azure и воспользоваться моделью программирования Functions и автомасштабированием, управляемым событиями.

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

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

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

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

Important

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

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

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

Important

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

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

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

Создайте Dockerfile

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

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

  • При создании проекта Functions с помощью Функции Azure 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 на плане 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Tip

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

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

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

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

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

Important

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

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

Вы можете включить Функции 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> на имя приложения-функции.

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

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

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

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

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

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

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

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

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

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

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

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