Compartir a través de

Azure Functions 托管选项

在 Azure 中创建函数应用时,必须为应用选择托管选项。 Azure 为函数代码提供了以下托管选项:

托管选项 服务 可用性 容器支持
Flex 消耗计划 Azure Functions 正式发布 (GA)
高级计划 Azure Functions GA Linux
专用计划 Azure Functions GA Linux
[容器应用] Azure 容器应用 GA Linux
消耗计划 Azure Functions Windows - 正式版
Linux - 已停用

重要

2028 年 9 月 30 日之后,在消耗计划中托管 Linux 上的函数应用的选项将停用。 为了避免中断,请将 Linux 上运行的现有消耗计划应用迁移到该日期之前的 Flex Consumption 计划 。 消耗计划中在 Windows 上运行的应用不受此更改的影响。

Azure Functions 托管选项由 Linux 和 Windows 虚拟机上的 Azure 应用服务基础结构提供支持。 选择的托管选项决定了以下行为:

  • 函数应用的缩放方式。
  • 每个函数应用实例可用的资源。
  • 对 Azure 虚拟网络连接等高级功能的支持。

你选择的计划也会影响运行函数代码的成本。 有关详细信息,请参阅 计费

计划概述

以下是 Azure Functions 托管的各种选项的优点摘要:

选项 好处
Flex 消耗计划 体验快速的水平扩展,具备灵活的计算选项、虚拟网络集成以及无服务器按需付费的计费模式。

在 Flex Consumption 计划中,函数实例会根据配置的每实例并发数、传入事件和每个函数的工作负载进行动态扩展(最多可达 1,000 个实例),以实现最佳的效率。

在以下情况下,请考虑弹性消耗计划:

✔ 您需要一个无服务器的托管环境来运行您的函数代码,只需支付按需执行的费用。
✔ 需要虚拟网络连接才能安全访问 Azure 资源。
✔ 您的工作负载具有可变性,可以从无活动状态迅速进行事件驱动的扩展。
✔ 你想要使用内存大小(512 MB、2,048 MB 或 4,096 MB)自定义计算,并通过一个或多个预预配(始终就绪)实例减少冷启动。
高级计划 使用预热的工作器根据需要自动缩放,这些工作器在空闲后无延迟地运行应用程序,在更强大的实例上运行,并连接到虚拟网络。

请考虑下列情况中的 Azure Functions 高级计划:

✔ 你的函数应用持续地运行,或者近乎持续地运行。
✔ 你希望对实例进行更多控制,并希望使用事件驱动的缩放在同一计划上部署多个函数应用。
✔ 你具有大量的小型执行操作,在消耗计划中的执行费用较高但 GB 秒数较低。
✔ 你需要的 CPU 或内存选项超出消耗计划提供的选项。
✔ 你的代码所需的运行时间超过消耗计划允许的最长执行时间。
✔ 需要虚拟网络连接才能安全访问 Azure 资源。
✔ 你想要提供一个自定义 Linux 映像来运行函数。
专用计划 在应用服务计划中以定期应用服务计划费率运行你的函数。

最适用于不能使用 Durable Functions 的长时间运行的方案。 对于以下情况,可以考虑使用应用服务计划:

✔ 你拥有未充分利用的现有虚拟机,这些虚拟机已经在运行其他应用服务实例。
✔ 你必须具有完全可预测的计费,或者需要手动缩放实例。
✔ 你想要在同一计划中运行多个 Web 应用和函数应用
✔ 你需要访问更大的计算大小选项。
✔ 应用服务环境 (ASE) 提供完全计算隔离和安全网络访问。
✔ 内存使用率非常高且规模大 (ASE)。

本文中的其余表根据各种功能和行为对托管选项进行了比较。

操作系统支持

下表显示操作系统对托管选项的支持。

Hosting Linux1 部署 Windows2 部署
Flex 消耗计划 ✅ 仅限代码
❌ 容器(不支持)
❌ 不支持
高级计划 ✅ 仅限代码
✅ 容器
✅ 仅限代码
专用计划 ✅ 仅限代码
✅ 容器
✅ 仅限代码
[容器应用] ✅ 仅限容器 ❌ 不支持
消耗计划3 ✅ 仅代码 (已停用)
❌ 容器(不支持)
✅ 仅限代码
  1. Linux 是 Python 运行时堆栈唯一支持的作系统。
  2. Windows 部署仅限代码。 Functions 目前不支持 Windows 容器。
  3. 计划于 2028 年 9 月 30 日停用在 Linux 上运行应用的功能。 有关详细信息,请参阅 消耗计划

函数应用超时持续时间

函数应用中函数的超时时间通过 functionTimeout 项目文件中的 属性进行定义。 此属性专门应用于函数执行。 触发器启动函数执行后,函数需要在超时持续时间内返回/响应。 为了避免超时,必须 编写可靠的函数。 有关详细信息,请参阅 改进 Azure Functions 性能和可靠性

下表显示特定计划的默认值和最大值(以分钟为单位):

计划 默认 最大1
Flex 消耗计划 30 无限制2
高级计划 304 无限制2
专用计划 304 无界限3
消耗计划 5 10
  1. 无论函数应用的超时设置如何,HTTP 触发的函数响应请求的最长时间均为 230 秒。 这起因于 Azure 负载均衡器的默认空闲超时。 对于较长的处理时间,请考虑使用 延迟实际工作并返回即时响应
  2. 不会强制实施最大执行超时持续时间。 不过,对于弹性消耗和高级计划,在横向缩减期间,函数执行的宽限期为 60 分钟,在平台更新期间则为 10 分钟。
  3. 要求将应用服务计划设置为 Always On。 在平台更新期间提供 10 分钟的宽限期。
  4. 1.x 版 Functions 主机运行时的默认超时为“无限制”。
  5. 最小副本数设置为零时,默认超时取决于应用中使用的特定触发器。

此表中的值假定 Azure Functions 主机进程已启动并正常运行。 特定语言工作进程启动同样允许最长 60 秒的超时时间。 工作进程启动超时当前不可配置。

语言支持

有关 Functions 中当前本机语言堆栈支持的详细信息,请参阅 Azure Functions 中支持的语言

缩放

下表对各种托管计划的缩放行为进行了比较。
除非另有说明,否则最大实例数根据函数应用(消耗)或计划(高级/专用)给出。

计划 向外扩展 最大实例数
Flex 消耗计划 快速事件驱动的缩放决策是按函数计算的,称为 按函数缩放,这提供了一种更确定性的方式来缩放应用中的函数。 除了 HTTP、Blob 存储(事件网格)和 Durable Functions 之外,应用中的所有其他函数触发器类型都可在独立的实例上缩放。 应用中的所有 HTTP 触发器都在同一实例上作为一个组进行缩放,所有 Blob 存储(事件网格)触发器也是如此。 所有 Durable Functions 触发器也共享实例并一起缩放。 10001
高级计划 事件驱动型。 即使是在负载较高期间也可自动扩展。 Azure Functions 基础结构可根据触发函数的事件数添加更多的 Functions 主机实例,因此可以缩放 CPU 和内存资源。 Windows:1006
Linux: 20-1002,6
专用计划 手动/自动缩放 10-303
100 (ASE)

| 消耗计划 | 事件驱动。 根据事件来源自动缩放。 Functions 基础设施通过根据传入触发事件的数量添加更多函数宿主实例来扩展资源。 | Windows: 200
Linux: 1005 |

  1. Flex 消耗计划具有区域订阅配额,限制了给定区域中所有实例的总内存使用量。 有关详细信息,请参阅区域订阅内存配额。 当前,灵活消费计划仅支持 Linux。
  2. 在某些区域中,高级计划中的 Linux 应用可以缩放到 100 个实例。 有关详细信息,请参阅 高级计划文章
  3. 有关各种应用服务计划选项的特定限制,请参阅 应用服务计划限制
  4. 在容器应用中,默认值为 10 个实例,但可以设置 最大副本数,总共最多 1000 个。 只要有足够多的可用核心配额,就会遵守此设置。 有关详细信息,请参阅 Azure 容器应用的配额。 从 Azure 门户创建函数应用时,实例数量限制为 300 个。
  5. 在横向扩展期间,目前对于消耗计划中的 Linux 应用,每个订阅每小时最多 500 个实例。
  6. 对于专用终结点限制的 http 触发器,横向扩展最多仅限于 20 个实例。

冷启动行为

计划 详细信息
Flex 消耗计划 即使在缩放到零的情况下,冷启动性能也得到了改进。 支持 始终就绪的实例 ,以进一步减少预配新实例时的延迟。
高级计划 通过允许维护一个或多个永久暖机实例,支持始终就绪实例以避免冷启动。
专用计划 在专用计划中运行时,Functions 主机可以在规定数量的实例上连续运行,这意味着冷启动实际上不是问题。
[容器应用] 取决于 副本的最小数量
• 设置为零时:应用在空闲时可以缩减为零,某些请求在启动时可能会出现更大的延迟。
• 设置为 1 或更大时:主机进程将持续运行,这意味着冷启动不会导致问题。
消耗计划 当空闲时,应用数可能会缩减为零,这意味着某些请求在启动时可能会产生更多延迟。 消耗计划有一些可缩短冷启动时间的优化措施,包括从已经运行主机和语言进程的预热占位符函数中进行拉取。

服务限制

资源 灵活消费计划 高级计划 专用计划/ASE 消耗计划
默认 超时时长(分钟) 30 30 301 5
最大 超时持续时间 (分钟) unbounded9 unbounded9 无限2 10
最大出站连接数(每个实例) 无限制 无限制 无限制 600 个处于活动状态(总共 1200 个)
最大请求大小 (MB)3 210 210 210 210
最大查询字符串长度3 4096 4096 4096 4096
最大请求 URL 长度3 8192 8192 8192 8192
每个实例的 ACU 210-840 100-840/210-25010 varies varies
最大内存(每个实例的 GB 数) 414 3.5-14 1.75-256/8-256 1.5
最大实例计数 (Windows |Linux)15 n/a |1000 20-100 10-30 (100 ASE)11 200 |100
每个计划的函数应用数13 1 100 无限4 100
应用服务计划 不适用 每个资源组 100 个 每个资源组 100 个 每个区域 100 个
每个应用有12部署槽位 不适用 3 1-2011 2
存储(临时)5 0.8 GB 21-140 GB 11-140 GB(千兆字节) 0.5 GB
存储(持久化) 0 GB 7 250 GB 10-1000 GB11 1 GB6,7
每个应用的自定义域数 258 500 500 5008
自定义域 TSL/SSL 支持 包含无限制的 SNI SSL 和一个 IP SSL 连接 包含无限制的 SNI SSL 和一个 IP SSL 连接 包含无限制的 SNI SSL 和一个 IP SSL 连接 包含无限制的 SNI SSL 连接

有关服务限制的说明:

  1. 默认情况下,应用服务计划中的 Functions 1.x 运行时的超时无限制。
  2. 要求将应用服务计划设置为 Always On。 按标准 费率付费。 在平台更新期间为 HTTP 触发的函数提供 10 分钟的宽限期,但不适用于其他触发器。
  3. 这些限制在主机中设置
  4. 可以托管的函数应用的实际数目取决于应用的活动、计算机实例的大小和相应的资源利用率。
  5. 存储限制是同一应用服务计划中所有应用的临时存储中的总内容大小。 对于 Linux 上的消耗计划,存储目前为 1.5 GB。
  6. 消耗计划使用 Azure 文件存储共享进行持久存储。 提供自己的 Azure 文件共享时,特定的共享大小限制取决于为 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING设置的存储帐户。
  7. 在 Linux 上,必须显式装载自己的 Azure 文件存储共享
  8. 当函数应用托管在消耗计划中时,仅支持 CNAME 选项。 对于 高级计划应用服务计划中的功能应用,可以使用 CNAME 或 A 记录映射自定义域。
  9. 不强制实施最大执行超时期限。 不过,为函数执行提供的宽限期在横向缩减期间为 60 分钟,在平台更新期间为 10 分钟。
  10. 辅助角色是托管客户应用的角色。 工作器有 3 种固定大小:一个 vCPU/3.5 GB RAM;两个 vCPU/7 GB RAM;四个 vCPU/14 GB RAM。
  11. 有关详细信息,请参阅应用服务限制
  12. 包括生产槽。
  13. 给定订阅中当前有 5,000 个函数应用的限制。
  14. 弹性消耗计划实例大小当前定义为 512 MB、2,048 MB 或 4,096 MB。 有关详细信息,请参阅 实例内存
  15. 有关详细信息,请参阅托管比较文章中的 缩放
  16. 最小副本数设置为零时,默认超时取决于应用中使用的特定触发器。
  17. 最小副本数设置为一个或多个时。

网络功能

功能 灵活消费计划 消耗计划 高级计划 专用计划/ASE
入站 IP 限制
入站专用终结点
虚拟网络集成 2 3
出站 IP 限制
  1. 有关详细信息,请参阅 Azure 容器应用环境中的网络
  2. 使用虚拟网络触发器时,有一些特殊注意事项。
  3. 只有专用/ASE 计划支持网关所需的虚拟网络集成。

计费

计划 详细信息
Flex 消耗计划 计费基于执行次数、实例在主动执行函数时内存以及任何 始终就绪实例的成本。 有关详细信息,请参阅 弹性消耗计划计费
高级计划 高级计划基于在必需实例和预热实例中使用的核心秒数和内存。 每个计划必须至少有一个实例始终处于预热状态。 此计划提供了最可预测的定价。
专用计划 应用服务计划中函数应用的费用与其他应用服务资源(例如 Web 应用)的费用相同。

对于 ASE,每月会产生统一的基础结构使用费,该费率不会随环境大小的变化而改变。 每个应用服务计划 vCPU 也会产生费用。 ASE 中托管的所有应用都在“隔离”定价 SKU 中。 有关详细信息,请参阅 ASE 概述文章
消耗计划 只需为函数运行时间付费。 账单将基于执行数量、执行时间和所用内存。

有关动态托管计划(消耗型、弹性消耗型和高级型)之间的直接成本比较,请查看 Azure Functions 定价页。 有关各种专用计划选项的定价,请参阅 应用服务定价页

在现有资源组中创建新函数应用的限制

在某些情况下,当尝试在现有资源组中为函数应用创建新的托管计划时,可能会收到以下错误之一:

  • 此资源组中不允许定价层
  • <SKU_name> 辅助角色在资源组 <resource_group_name> 中不可用

在以下条件成立时可能出现此情况:

  • 在包含另一个函数应用或 Web 应用的现有资源组中创建函数应用。 例如,Linux 消耗计划应用在 Linux 专用或 Linux 高级计划所在的资源组中不受支持。
  • 新函数应用在先前的应用所在的区域中创建。
  • 先前的应用在某些方面与新应用不兼容。 这可能发生在 SKU、操作系统之间,也可能由于其他平台级功能(如可用性区域支持)而发生这种情况。

发生这种情况的原因是在创建函数应用和 Web 应用计划时映射到不同的资源池的方式不同。 不同的 SKU 需要一组不同的基础结构功能。 在资源组中创建应用时,资源组会被映射并分配到指定资源池。 如果尝试在该资源组中创建另一个计划,而映射的池没有所需的资源,就会出现该错误。

发生此错误时,请改为在新资源组中创建函数应用和托管计划。

后续步骤