Обзор Функции Azure в Контейнеры приложений Azure

Функции Azure on Контейнеры приложений Azure предоставляет полностью управляемую безсерверную хостинговую среду, сочетающую события-ориентированные возможности Функции Azure с функциями Container Apps. Эти возможности включают оркестрацию на базе Kubernetes, встроенное автомасштабирование на базе Kubernetes Event-driven Autoscaling (KEDA), интеграцию с DAPR, поддержку нагрузки на GPU, поддержку sidecar, подключение к виртуальной сети (VNet) и управление версиями.

Этот подход полезен, когда вы хотите, чтобы ваши функции работали наряду с другими контейнерными приложениями, такими как микросервисы, API или веб-сайты. Контейнеризация приложений-функций также может быть полезна, когда вам нужны пользовательские зависимости или вы хотите масштабировать приложение до нуля, чтобы снизить затраты. Для задач с высокой нагрузкой на вычисления, таких как инференция с помощью ИИ, Container Apps поддерживает хостинг на базе GPU через бессерверные GPU и профили выделенной рабочей нагрузки.

В качестве встроенной возможности Контейнеры приложений Azure вы можете развертывать образы контейнеров Функции Azure напрямую в Контейнеры приложений Azure с помощью поставщика ресурсов Microsoft.App, задав kind=functionapp при вызове az containerapp create. Приложения, созданные таким образом, имеют доступ ко всем Контейнеры приложений Azure функциям. Во время настройки в портале Azure выберите параметр Optimize for Функции Azure. Для получения дополнительной информации смотрите раздел «Развертывание и настройка».

Ключевые преимущества

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

Следующая таблица помогает сравнить функции Functions on Container Apps с планом Flex Consumption.

Функция Приложения в контейнерах План гибкого потребления
Сведение к нулю ✅ Да (через KEDA) ✅ Да
Максимальное масштабирование 1000 (по умолчанию 10, настраиваемый) 1 000
Экземпляры Always-on (постоянно включенные) ✅ Да (через minReplicas) ✅ Да (с помощью всегда готовых экземпляров)
Интеграция с виртуальной сетью ✅ Да ✅ Да
Поддержка пользовательских контейнеров ✅ Да (принести собственный образ) ❌ Ограничено (не предусмотрена возможность использования собственного контейнера)
Поддержка GPU ✅ Да (с помощью безсерверного профиля выделенной рабочей нагрузки GPU) ❌ Нет
Встроенные функции Поддержка функций контейнерных приложений. Например, KEDA, Dapr, многоразовые ревизии, mTLS, боковые процессы, управление входом и многое другое Особенности только для функций
Модель выставления счетов Цены на контейнерные приложения: план потребления (vCPU, память, запросы) и выделенный план (на основе профиля рабочей нагрузки) Время выполнения и всегда готовые экземпляры

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

Сценарии

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

  • API для бизнес-приложений: Интеграция настраиваемых библиотек, пакетов и API с Функции Azure для бизнес-приложений.
  • Миграция и модернизация: Миграция локальных устаревших и/или монолитных приложений в облачные микросервисы на контейнерах.
  • Обработка, управляемая событиями: Обрабатывайте события из Event Grid, служебная шина, Event Hubs и других источников событий, используя модель программирования Функции Azure.
  • Нагрузки на ИИ и GPU: Обрабатывайте видео, изображения, транскрипты и другие вычислительные нагрузки, требующие ресурсов GPU. Дополнительные сведения см. в разделе Использование серверных GPU в Контейнеры приложений Azure.
  • Микросервисы: Интеграция Функции Azure с другими службами, размещенными в контейнерных приложениях.
  • Пользовательские контейнеры: Упакуйте функции с пользовательскими средами выполнения или сайдкарами.
  • Частные приложения: Защита функций, предназначенных исключительно для внутреннего использования, с помощью виртуальной сети и внутреннего доступа.
  • Aspire: Интеграция Aspire с Функции Azure позволяет разрабатывать, отлаживать и оркестрировать проект Функции Azure в рамках Aspire AppHost. Для получения дополнительной информации см. Функции Azure with Aspire и Set up Функции Azure in the AppHost.
  • General Functions: Запуск всех поддерживаемых стандартных сценариев Функции Azure (например, таймеров, обработки файлов, триггеров базы данных).

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

Чтобы развернуть Функции Azure на Контейнеры приложений Azure, упаковайте ваше функциональное приложение как кастомный образ контейнера и разверните его как любое другое контейнерное приложение с одним ключевым отличием. Задайте это kind=functionapp свойство при использовании шаблонов Azure CLI, Azure Resource Manager или Bicep. Для подробных шагов и примеров см. Создание функционального приложения.

az containerapp create \
  --resource-group $RESOURCE_GROUP_NAME \
  --name $CONTAINER_APP_NAME \
  --environment $ENVIRONMENT_NAME \
  --image mcr.microsoft.com/k8se/quickstart-functions:latest \
  --ingress external \
  --target-port 80 \
  --kind functionapp \
  --query properties.outputs.fqdn

Эта команда возвращает URL вашего функционального приложения. Скопируйте этот URL-адрес и вставьте его в веб-браузер.

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

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

Поддерживаются все стандартные методы развертывания, включая:

  • Azure CLI;
  • портал Azure
  • Шаблоны ARM / Bicep
  • Конвейеры CI/CD (например, GitHub Actions, Azure Pipelines)

Подробные инструкции и примеры см. в официальной документации по началу работы.

Цены и выставление счетов

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

  • План потребления. Этот бессерверный вариант вычислений выставляет счета только за ресурсы, которые используются в приложениях во время их работы.
  • Выделенный план. Этот параметр предоставляет настраиваемые вычислительные ресурсы, выставление счетов за экземпляры, выделенные для каждого профиля рабочей нагрузки.

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

Детали выставления счетов:

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

Масштабирование, управляемое событиями

Функции Azure on Container Apps поддерживает все основные среды выполнения языков, доступные в Функции Azure, включая C#, JavaScript / TypeScript (Node.js), Python, Java, PowerShell и пользовательские контейнеры (с собственным образом).

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

Если вам нужно предоставить собственные правила масштабирования, вы можете отказаться от правил, созданных платформой, с помощью allowScalingRuleOverride. Дополнительные сведения см. в разделе Переопределение автоматически созданных правил масштабирования KEDA для Функции Azure в Azure Container Apps.

Платформа автоматически преобразует параметры триггеров Functions (из конфигурации или атрибутов триггера) в соответствующие параметры масштабировщика KEDA. Подробные сведения о сопоставлении конфигураций триггеров Functions с параметрами масштабирования KEDA см. в документе сопоставления масштабирования Функции Azure KEDA.

Поддерживаются все стандартные триггеры и привязки Функции Azure в приложениях контейнеров со следующими исключениями:

  • Автоматическое масштабирование триггера хранилища Blob: работает только при использовании Event Grid в качестве источника. Узнайте больше о вызове Функции Azure для контейнеров BLOB-объектов с помощью подписки на события.
  • Автомасштабирование Устойчивые функции: поддерживает только поставщиков хранилища Microsoft SQL Server и Durable Task Scheduler. Для получения дополнительной информации см. раздел Deploy Устойчивые функции with SQL Server.
  • Автомасштабирование не поддерживается для:
    • Кэш Azure для Redis
    • Azure SQL

Управляемые удостоверения поддерживаются для триггеров и привязок, где это возможно. Они также доступны для:

Для неподдерживаемых триггеров используйте фиксированные счетчики реплик (то есть задайте minReplicas > 0) в Функции Azure на Контейнеры приложений Azure. Дополнительные сведения см. в руководстве разработчика функций.

Масштабирование и производительность

Функции Azure в приложениях контейнеров автоматически масштабируются на основе событий с помощью KEDA по умолчанию. Вы все еще можете задать минимальное/максимальное число реплик для управления поведением масштабирования. Можно также использовать allowScalingRuleOverride для предоставления пользовательских правил масштабирования.

  • масштабирование, обусловленное событиями: автоматически масштабируется на основе триггеров, таких как Event Grid, служебная шина или HTTP.
  • Масштабирование до нуля: неактивные приложения масштабируются до нуля, чтобы снизить затраты.
  • Cold start control: вы можете узнать о сокращении времени холодного старта на Контейнеры приложений Azure.
  • Параллелизм. Каждый экземпляр может обрабатывать несколько событий параллельно.
  • Высокий масштаб: горизонтальное масштабирование до 1000 экземпляров для каждого приложения (по умолчанию — 10).
  • Поддержка GPU: выполнение вычислительных рабочих нагрузок, таких как вывод искусственного интеллекта с помощью узлов с поддержкой GPU.

Это делает контейнерные приложения идеальными для рабочих нагрузок со скачкообразными и стационарными состояниями. Дополнительные сведения см. в статье Set scaling rules in Контейнеры приложений Azure

Сетевые подключения и безопасность

Функции Azure on Container Apps использует сетевые возможности и функции безопасности Container Apps:

  • Интеграция виртуальной сети: обеспечение безопасного доступа к частным ресурсам через внутренние конечные точки и частные базы данных.
  • Управляемая идентичность: Аутентификация с помощью сервисов Azure с использованием системных или пользовательских идентификаторов. Вам не нужно управлять секретами или строками соединения.
  • Поддержка Dapr: включение вызова pub/sub, управления состоянием и безопасного вызова службы через боковики Dapr. Дополнительные сведения см. в разделе API микросервисов, работающих под управлением Dapr.
  • Ingress и TLS: обеспечение безопасного доступа к HTTP-эндпоинтам через TLS/mTLS, пользовательские домены или оставляя их внутренними.
  • Изоляция среды: функции разделяют границы среды контейнерных приложений для безопасной и ограниченной коммуникации.

Мониторинг и ведение журнала

Функции Azure on Container Apps интегрируется со средствами мониторинга и наблюдаемости Azure для мониторинга производительности и диагностики проблем:

  • Application Insights: Предоставляет телеметрию для запросов, зависимостей, исключений и пользовательских трассировок. Дополнительные сведения см. в разделе Monitor Функции Azure.
  • Log Analytics: фиксирует жизненный цикл контейнера и события масштабирования, такие как FunctionsScalerInfo записи. Для получения дополнительной информации см. Логирование приложений в Контейнеры приложений Azure.
  • Настраиваемое ведение журнала: Поддерживает стандартные платформы, такие как ILogger и ведение журнала консоли для структурированных выходных данных.
  • Централизованный мониторинг: Среда контейнерных приложений предлагает унифицированные панели мониторинга и оповещения во всех приложениях.

Переменные среды

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

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

Соображения

При использовании Функции Azure на Контейнеры приложений Azure следует учитывать следующие рекомендации.

  • Требование входа для автомасштабирования: Чтобы включить автоматическое масштабирование на основе событий, включите входящий режим — как публично, так и внутри внутренней среды Container Apps.
  • Обязательный аккаунт хранения: Каждое функциональное приложение, развернутое в Container Apps, должно быть связано с аккаунтом хранения. Эта учетная запись хранилища управляет триггерами, журналами и состоянием. Ознакомьтесь с руководством по лучшим практикам для учетной записи для хранения данных.
  • Хранилище с несколькими редакциями. При развертывании с несколькими активными редакциями назначьте выделенную учетную запись хранения каждой редакции. Использование выделенной учетной записи хранения помогает предотвратить конфликты и обеспечить правильную изоляцию. Кроме того, если не требуется одновременная редакция, рассмотрите возможность использования режима единой редакции по умолчанию для упрощенного управления.
  • Триггеры с несколькими ревизиями: если вы используете режим с несколькими ревизиями и триггер с выборкой, используйте другой источник событий для каждой ревизии, чтобы избежать конфликтов, связанных с конкурирующими потребителями. Функции, использующие триггеры Хранилище очередей Azure, Центры событий Azure, Служебная шина Azure или Устойчивые функции, являются примерами триггеров на основе извлечения.
  • Задержка холодного запуска: когда приложение-контейнер масштабируется до нуля во время простоя, первый запрос после неактивности инициирует холодный запуск. Узнайте больше о снижении времени холодного запуска.
  • Интеграция Application Insights: Для мониторинга и диагностики вашего функционального приложения подключите его к Application Insights. Для получения дополнительной информации см. раздел Application Insights integration with Functions.
  • Прокси-серверы функций: не поддерживается. Для сценариев шлюза API вместо этого интегрируются с Azure API Management.
  • Слоты развертывания: тестовые и продакшн слоты недоступны. Используйте стратегии развертывания сине-зеленого цвета для выпусков нулевого простоя .
  • Ключи доступа к функциям: использование портала для создания ключей доступа к функциям не поддерживается. Рекомендуется использовать Azure Key Vault для хранения ключей. Вы также можете использовать следующие параметры для защиты конечных точек HTTP в рабочей среде:
  • Квоты и ограничения ресурсов: Среды приложений контейнеров имеют ограничения по умолчанию для памяти, ЦП и количества экземпляров в каждом регионе. Дополнительные сведения см. в разделе об ограничениях среды и квотах по умолчанию. Если для рабочей нагрузки требуется больше ресурсов, можно запросить увеличение квоты.
  • Настройка правил масштабирования вручную: кнопка "Добавить правила масштабирования" на портале Azure отключена для Функции Azure, размещённых в контейнерных приложениях, так как правила масштабирования автоматически настраиваются на основе источника событий. Определения правил KEDA вручную не требуются в этой настройке.

Отправка отзывов

Отправьте запрос на проблему или функцию в репозиторий Контейнеры приложений Azure GitHub.

Дальнейшие действия / дополнительные ресурсы

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

  • Getting started: пошаговое руководство по развертыванию и настройке Функции Azure в Контейнеры приложений Azure.
  • документация Контейнеры приложений Azure. Полный справочник по функциям контейнерных приложений, включая масштабирование, сеть, Dapr и профили рабочей нагрузки.
  • Цены на Контейнеры приложений Azure: сведения о выставлении счетов на основе потребления и затратах на выделенный план.
  • Варианты хостинга Функции Azure: Сравнение планов хостинга, включая Контейнерные Приложения, Flex Consumption, Premium и Выделенные.
  • руководство разработчика Функции Azure: подробное представление о триггерах, привязках, поведении среды выполнения и настройке.