Обзор Функции 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 portal выберите опцию Optimize for Функции Azure during setup. Для получения дополнительной информации смотрите раздел «Развертывание и настройка».

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

Модель размещения контейнерных приложений основана на гибкости контейнеризованных рабочих нагрузок и событийно-ориентированном характере Функции 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 с другими службами, размещенными в контейнерных приложениях.
  • Пользовательские контейнеры: Упакуйте функции с пользовательскими средами выполнения или сайдкарами.
  • Частные приложения: Защита функций, предназначенных исключительно для внутреннего использования, с помощью виртуальной сети и внутреннего доступа.
  • .NET Aspire: Интеграция .NET Aspire с Функции Azure позволяет разрабатывать, отлаживать и оркестрировать проект Функции Azure .NET в составе узла приложения .NET Aspire. Узнайте больше о Функции Azure с помощью .NET Aspire
  • 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-адрес и вставьте его в веб-браузер.

In the Azure portal выберите опцию Optimize for Функции Azure during container app creation, чтобы использовать конфигурацию Функции 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-объектов с помощью подписки на события.
  • Устойчивые функции autoscaling: поддерживает только 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 observability tools для отслеживания производительности и диагностики проблем:

  • 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: подробное представление о триггерах, привязках, поведении среды выполнения и настройке.