Размещение Функции Azure приложений контейнеров Azure
Функции Azure обеспечивает интегрированную поддержку для разработки, развертывания и управления контейнерными приложениями-функциями Приложения контейнеров Azure. Используйте службы "Приложения контейнеров Azure" для размещения контейнеров приложений-функций, если необходимо запустить функции на основе событий в Azure в той же среде, что и другие микрослужбы, API, веб-сайты, рабочие процессы или любые размещенные в контейнере программы. Размещение контейнерных приложений позволяет выполнять функции в полностью управляемой среде на основе Kubernetes с встроенной поддержкой мониторинга с открытым кодом, mTLS, Dapr и Kubernetes На основе событий (KEDA).
Код функции можно написать в любом стеке языков, поддерживаемых функциями. Вы можете использовать те же триггеры и привязки функций с масштабированием на основе событий. Можно также использовать существующие клиентские средства функций и портал Azure для создания контейнеров, развертывания контейнеров приложений-функций в приложениях-контейнерах и настройки непрерывного развертывания.
Интеграция контейнерных приложений также означает, что конфигурации сети и наблюдаемости, определенные на уровне среды приложения-контейнера, применяются к приложению-функции по мере их применения ко всем микрослужбам, работающим в среде "Приложения контейнеров". Вы также получаете другие облачные возможности контейнерных приложений, включая KEDA, Dapr, Envoy. Вы по-прежнему можете использовать Application Insights для мониторинга выполнения функций, а приложение-функция может получить доступ к тем же ресурсам виртуальной сети, предоставляемым средой.
Общие сведения о вариантах размещения контейнеров для Функции Azure см. в Функции Azure поддержке контейнеров Linux.
Профили размещения и рабочей нагрузки
Существует два основных плана размещения для контейнерных приложений, бессерверный план потребления и выделенный план, который использует профили рабочей нагрузки для более эффективного управления ресурсами развертывания. Профиль рабочей нагрузки определяет объем вычислительных ресурсов и памяти, доступных для приложений-контейнеров, развернутых в среде. Эти профили настроены в соответствии с различными потребностями приложений.
Профиль рабочей нагрузки потребления — это профиль по умолчанию, добавленный к каждому типу среды профилей рабочей нагрузки. Вы можете добавить в среду профили выделенной рабочей нагрузки при создании среды или после ее создания. Дополнительные сведения о профилях рабочей нагрузки см. в разделе "Профили рабочей нагрузки" в приложениях контейнеров Azure.
Размещение контейнерных приложений-функций поддерживается во всех регионах, поддерживающих контейнерные приложения.
Если у приложения нет конкретных требований к оборудованию, вы можете запустить среду в плане потребления или в выделенном плане с помощью профиля рабочей нагрузки потребления по умолчанию. При выполнении функций в контейнерных приложениях плата взимается только за использование контейнерных приложений. Дополнительные сведения см. на странице цен на приложения контейнеров Azure.
Функции Azure в приложениях контейнеров Azure поддерживает размещение gpu в выделенном плане с профилями рабочей нагрузки.
Сведения о создании и развертывании контейнера приложения-функции в контейнерных приложениях в плане потребления по умолчанию см. в статье "Создание первых контейнерных функций в приложениях контейнеров Azure".
Сведения о создании среды "Приложения-контейнеры" с профилями рабочей нагрузки и развертывании контейнера приложения-функции в определенной рабочей нагрузке см. в профилях рабочих нагрузок контейнеров.
Функции в контейнерах
Чтобы использовать размещение контейнерных приложений, код должен выполняться в приложении-функции в контейнере Linux, который вы создаете и обслуживаете. Функции поддерживают набор базовых образов для конкретного языка, которые можно использовать для создания контейнерных приложений-функций.
При создании проекта кода с помощью Функции Azure Core Tools и включения --docker
параметра Core Tools создает Dockerfile с правильным базовым изображением, которое можно использовать в качестве отправной точки при создании контейнера.
Внимание
При создании собственных контейнеров необходимо сохранить базовый образ контейнера обновленным до последнего поддерживаемого базового образа. Поддерживаемые базовые образы для Функции Azure относятся к языку и находятся в репозитории базовых образов Функции Azure.
Команда функций привержена публикации ежемесячных обновлений для этих базовых образов. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера.
При внесении изменений в код функций необходимо перестроить и повторно опубликовать образ контейнера. Дополнительные сведения см. в разделе "Обновление образа в реестре".
Параметры развертывания
Функции Azure в настоящее время поддерживает следующие методы развертывания контейнерного приложения-функции в приложениях контейнеров Azure:
- Apache Maven
- Шаблоны ARM
- Azure CLI
- Azure Developer CLI (azd)
- Azure Functions Core Tools
- Задачи Azure Pipeline
- Портал Azure
- Файлы Bicep
- GitHub Actions
- Visual Studio Code
Вы можете непрерывно развертывать контейнерные приложения из исходного кода с помощью Azure Pipelines или GitHub Actions. Функция непрерывного развертывания функций в настоящее время не поддерживается при развертывании в контейнерных приложениях.
Авторизация управляемого удостоверения
Для обеспечения оптимальной безопасности необходимо подключиться к удаленным службам с помощью проверки подлинности Microsoft Entra и авторизации управляемого удостоверения. Управляемые удостоверения можно использовать для этих подключений:
При запуске в контейнерных приложениях можно использовать идентификатор Microsoft Entra с управляемыми удостоверениями для всех расширений привязки, поддерживающих управляемые удостоверения. В настоящее время только эти расширения привязки поддерживают масштабирование на основе событий при использовании проверки подлинности управляемого удостоверения:
- Центры событий Azure
- Хранилище очередей Azure
- Служебная шина Azure
Для других привязок используйте фиксированные реплики при использовании проверки подлинности управляемого удостоверения. Дополнительные сведения см. в руководстве разработчика функций.
Интеграция виртуальной сети
При размещении приложений-функций в среде контейнерных приложений ваши функции могут воспользоваться преимуществами как внутренних, так и внешних виртуальных сетей. Дополнительные сведения о сетях среды см. в статье "Сети" в среде "Приложения контейнеров Azure".
Масштабирование при определенном событии
Все триггеры функций можно использовать в контейнерном приложении-функции. Однако только эти триггеры могут динамически масштабироваться (от нуля экземпляров) на основе полученных событий при выполнении в среде приложений контейнеров:
- Сетку событий Azure
- Центры событий Azure
- Хранилище BLOB-объектов Azure (на основе событий)
- Хранилище очередей Azure
- Служебная шина Azure
- Устойчивые функции (поставщик хранилища MSSQL)
- HTTP
- Kafka
- Таймер
Функции Azure в приложениях контейнеров предназначено для настройки параметров и правил масштабирования в зависимости от целевого объекта события. Вам не нужно беспокоиться о настройке масштабируемых объектов KEDA. При создании или изменении приложения-функции можно задать минимальное и максимальное число реплик. Следующая команда Azure CLI задает минимальное и максимальное число реплик при создании нового приложения-функции в среде приложений контейнеров из Реестр контейнеров Azure:
az functionapp create --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1 --storage-account <STORAGE_NAME> --environment MyContainerappEnvironment --image <LOGIN_SERVER>/azurefunctionsimage:v1 --registry-username <USERNAME> --registry-password <SECURE_PASSWORD> --registry-server <LOGIN_SERVER>
Следующая команда задает одинаковое минимальное и максимальное количество реплик в существующем приложении-функции:
az functionapp config container set --name <APP_NAME> --resource-group <MY_RESOURCE_GROUP> --max-replicas 15 --min-replicas 1
Управляемые группы ресурсов
Функции Azure в контейнерных приложениях выполняет ресурсы приложения-функции контейнера в специально управляемых группах ресурсов. Эти управляемые группы ресурсов помогают защитить согласованность приложений, предотвращая непреднамеренное или несанкционированное изменение или удаление ресурсов в управляемой группе даже субъектами-службами.
Управляемая группа ресурсов создается при первом создании ресурсов приложения-функции в среде контейнеров. Ресурсы контейнерных приложений, необходимые приложению-контейнерной функции, запускаются в этой управляемой группе ресурсов. Все другие приложения-функции, создаваемые в той же среде, используют эту существующую группу.
Управляемая группа ресурсов автоматически удаляется после удаления всех ресурсов контейнера приложения-функции из среды. Хотя управляемая группа ресурсов видна, любые попытки изменить или удалить управляемую группу ресурсов приводят к ошибке. Чтобы удалить управляемую группу ресурсов из среды, удалите все ресурсы контейнера приложения-функции и удаляется для вас.
Если у вас возникли проблемы с этими группами управляемых ресурсов, обратитесь в службу поддержки.
Ведение журнала приложения
Вы можете отслеживать контейнерное приложение-функцию, размещенное в контейнерных приложениях, с помощью Azure Monitor Application Insights таким же образом, как и приложения, размещенные в Функции Azure. Дополнительные сведения см. в разделе Мониторинг функций Azure.
Для привязок, поддерживающих масштабирование на основе событий, масштабируемые события регистрируются как FunctionsScalerInfo
и FunctionsScalerError
события в рабочей области Log Analytics. Дополнительные сведения см. в разделе "Ведение журнала приложений" в приложениях контейнеров Azure.
Рекомендации по размещению контейнерных приложений
Имейте в виду следующие рекомендации при развертывании контейнеров приложений-функций в контейнерных приложениях:
- Эти ограничения применяются к триггерам Kafka:
- Значение
ssl
протокола не поддерживается при размещении в приложениях контейнеров. Используйте другое значение протокола. - Чтобы триггер Kafka динамически масштабировался при подключении к Центрам событий,
username
свойство должно разрешаться в параметр приложения, содержащий фактическое значение имени пользователя. Если используется значение по умолчанию, триггер Kafka не может привести к динамическому масштабированию$ConnectionString
приложения.
- Значение
- Для встроенных определений политик контейнерных приложений в настоящее время применяются только политики уровня среды к Функции Azure контейнерам.
- Управляемые удостоверения можно использовать для этих подключений:
- По умолчанию контейнерное приложение-функция отслеживает порт 80 для входящих запросов. Если приложение должно использовать другой порт, используйте
WEBSITES_PORT
параметр приложения для изменения этого порта по умолчанию. - В настоящее время вы не можете использовать встроенные функции непрерывного развертывания при размещении в контейнерных приложениях. Вместо этого необходимо развернуть из исходного кода с помощью Azure Pipelines или GitHub Actions.
- В настоящее время невозможно переместить развертывание приложения-функции, размещенного в контейнерных приложениях, между группами ресурсов или между подписками. Вместо этого необходимо повторно создать существующее контейнерное развертывание приложения в новой группе ресурсов, подписке или регионе.
- При использовании контейнерных приложений у вас нет прямого доступа к API Kubernetes нижнего уровня.
- Расширение
containerapp
конфликтует с расширениемappservice-kube
в Azure CLI. Если вы ранее опубликовали приложения в Azure Arc, запуститеaz extension list
и убедитесь, чтоappservice-kube
они не установлены. Если это так, его можно удалить, выполнив командуaz extension remove -n appservice-kube
.