你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 容器应用上的 Azure Functions 概述

Azure Functions 为在 Azure 容器应用中开发、部署和管理容器化 Functions 应用提供集成支持。 如果需要与其他微服务、API、网站、工作流或任何容器托管程序在同一环境中运行,请使用 Functions 应用的 Azure 容器应用。

容器应用托管支持您在完全受支持且托管的基于容器的环境中运行函数,内置支持开源监控、mTLS、Dapr,以及 Kubernetes 事件驱动自动扩展(KEDA)。

通过在调用 Microsoft.App 时设置 kind=functionapp,您可以使用 az containerapp create 资源提供程序,直接将 Azure Functions 映像部署到 Azure 容器应用中,这是 Azure 容器应用上的一个集成功能。 以这种方式创建的应用可以访问所有 Azure 容器应用功能。

本文介绍如何创建和部署在 Azure 容器应用中运行的 Azure Functions 应用。 你将学会如何:

  • 使用预配置的自动缩放规则设置容器化 Functions 应用
  • 使用 Azure 门户或 Azure CLI 部署应用程序
  • 使用 HTTP 触发器验证已部署的函数

通过在容器应用中运行 Functions,可以从自动缩放、轻松配置和完全托管的容器环境中受益,而无需自行管理底层基础结构。

主要优势

容器应用托管模型基于容器化工作负载的灵活性和 Azure Functions 的事件驱动性质而构建。 它提供了以下主要优势:

下表可帮助你将容器应用中的 Functions 功能与 Flex 消耗计划进行比较。

功能 / 特点 容器应用 弹性消耗计划
缩放到零 ✅ 是(通过 KEDA) ✅ 是
最大横向扩展 1,000 (默认值 10,可配置) 1,000
Always on 实例 ✅ 是(通过 minReplicas ✅ 是(通过始终就绪的实例)
VNet 集成 ✅ 是 ✅ 是
自定义容器支持 ✅ 是的(自带图像) ❌ 有限(没有自带容器)
GPU 支持 ✅ 是(通过无服务器 GPU 专用工作负载配置文件) ❌ 否
内置功能 容器应用功能支持。 例如,KEDA、Dapr、多修订、mTLS、sidecar、入口控制等 仅限函数的功能
计费模式 容器应用定价:消耗计划(vCPU、内存、请求)和专用计划(基于工作负载配置文件) 执行时间 + 始终就绪实例

有关容器应用上的 Functions 与 Flex 消耗计划以及所有其他计划和托管类型的完整比较,请参阅 Functions 缩放和托管选项

方案

Azure 容器应用中的 Azure Functions 提供多才多艺的服务组合,以满足应用程序的需求。 以下场景代表了将 Azure 容器应用与 Azure Functions 结合,以获得所需的控制和扩展功能的情况类型。

  • 业务线 API:将自定义库、包和 API 打包以与 Functions 一起用于业务线应用程序。

  • 迁移支持:将本地旧版和/或整体应用程序迁移到容器上的云本机微服务。

  • 事件驱动体系结构:支持针对已在 Azure 容器应用上运行的工作负荷的事件驱动应用程序。

  • 无服务器工作负荷:无服务器工作负荷处理视频、图像、脚本或任何其他需要 GPU 计算资源的密集型任务。

  • 常见的 Azure Functions 方案:所有常见的 Azure Functions 方案,例如处理文件上传、运行计划任务、响应数据库更改、机器学习/AI 和其他 Azure Functions 方案中详述的其他方案。

定价和计费

Azure 容器应用上的 Azure Functions 遵循与 Azure 容器应用相同的定价模型。 计费基于您为环境选择的计划类型,可以是按需型或专属型。

  • 消耗计划:此无服务器计算选项仅为应用在运行时使用的资源计费。
  • 专用计划:此选项提供定制计算资源,并根据分配给每个工作负载配置文件的实例进行计费。

你选择的计划决定了计费计算的方式。 环境中的不同应用程序可以使用不同的计划。

需要注意的要点:

  • 在容器应用中使用 Azure Functions 编程模型无需额外付费。
  • Durable Functions 和其他高级模式在同一容器应用定价模型中受支持和计费。 有关详细的计费机制和示例,请参阅 Azure 容器应用中的计费 文档。

事件驱动的扩展

在您的容器化 Functions 应用中,所有 Functions 触发器均可用。 但是,在容器应用环境中运行时,只有以下触发器可以根据收到的事件动态缩放(从零实例):

  • Azure 事件网格
  • Azure 事件中心
  • Azure Blob 存储(基于事件网格)
  • Azure 队列存储
  • Azure 服务总线
  • Durable Functions (MSSQL 存储提供程序)
  • Durable Functions (DTS 存储提供程序)
  • HTTP
  • Kafka
  • 定时器
  • Azure Cosmos DB

Azure 容器应用中的 Azure Functions 旨在根据事件目标配置缩放参数和规则。 你无需考虑如何配置 KEDA 缩放对象。 创建或修改 Functions 应用时,仍可以设置最小和最大副本计数。

可以使用 Azure Functions 支持的任何语言堆栈 编写 Functions 代码。 可以将相同的 Functions 触发器和绑定与事件驱动的缩放配合使用。

托管标识授权

若要遵循安全最佳做法,请使用 Microsoft Entra 身份验证和托管标识授权连接到远程服务。

托管标识可用于以下连接:

  • 默认存储帐户 (AzureWebJobsStorage)
  • Azure 容器注册表:在容器应用中运行时,可以对支持托管标识的所有绑定扩展结合使用 Microsoft Entra ID 和托管标识。 目前,在使用托管标识身份验证时,只有这些绑定扩展支持事件驱动的缩放:
  • Azure 事件中心
  • Azure 队列存储
  • Azure 服务总线

对于其他绑定,在使用托管标识身份验证时,请使用固定副本。 有关详细信息,请参阅 Functions 开发人员指南

可扩展性和性能

容器应用上的 Azure Functions 会根据使用 KEDA 的事件自动缩放,无需手动配置缩放规则。 你仍然可以设置最小/最大副本数来控制扩展行为。

  • 事件驱动的缩放:根据事件网格、服务总线或 HTTP 等触发器自动缩放。
  • 缩放到零:空闲应用缩放到零,以节省成本。
  • 冷启动控制:通过设置 minReplicas ≥ 1 来避免冷启动。
  • 并发:每个实例可以并行处理多个事件。
  • 大规模:每个应用横向扩展到 1,000 个实例(默认值为 10)。
  • GPU 支持:使用 GPU 支持的节点运行计算密集型工作负荷,例如 AI 推理。

这使得容器应用非常适合突发和稳定状态工作负荷。 若要了解详细信息,请参阅 在 Azure 容器应用中设置缩放规则

网络和安全性

容器应用上的 Azure Functions 受益于容器应用的可靠 网络安全功能,以实现安全、可缩放的部署。

  • VNet 集成:通过内部终结点和专用数据库安全地访问专用资源。
  • 托管标识:使用系统/用户分配的标识(无需机密或连接字符串)通过 Azure 服务进行身份验证。
  • Dapr 支持:通过 Dapr sidecar 启用发布/订阅、状态管理和保护服务调用。 有关详细信息,请参阅 Dapr 提供支持的微服务 API
  • 入口和 TLS:使用 TLS/mTLS、自定义域公开安全 HTTP 终结点,或将其保留在内部。
  • 环境隔离:函数共享容器应用的环境限制,以进行安全的范围内通信。

这些功能使容器应用程序托管的函数成为面向企业级、安全的无服务器应用程序的理想选择。

应用程序日志记录

可以使用 Azure Monitor Application Insights 监视容器应用中托管的容器化函数应用,方法与监视 Azure Functions 托管的应用相同。 有关详细信息,请参阅监视 Azure Functions

对于支持事件驱动的缩放的绑定,缩放事件在 Log Analytics 工作区中记录为 FunctionsScalerInfoFunctionsScalerError 事件。 有关详细信息,请参阅 Azure 容器应用中的 Application Logging

提交反馈

Azure 容器应用 GitHub 存储库提交问题或功能请求。

后续步骤