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

Azure Functions 的 Azure 容器应用托管

Azure Functions 提供集成的支持用于在 Azure 容器应用上开发、部署和管理容器化函数应用。 需要在与其他微服务、API、网站、工作流或任何容器托管程序相同的环境中运行 Azure 中事件驱动的函数时,可以使用 Azure 容器应用托管函数应用容器。 使用容器应用托管,可以在为开源监视、mTLS、Dapr 和 KEDA 提供内置支持的基于 Kubernetes 的环境中运行函数。

重要

在 Azure 容器应用上托管函数应用的支持目前以预览版提供。

借助与容器应用的集成,可以使用现有的函数编程模型,以 Azure Functions 支持的首选编程语言或框架编写函数代码。 仍可以通过事件驱动缩放获得 Functions 触发器和绑定。 容器应用使用基础 Azure Kubernetes 服务 (AKS) 的强大功能,同时,用户无需使用 Kubernetes API,因而消除了由此带来的复杂性。

这种集成还意味着可以使用现有的 Functions 客户端工具和 Azure 门户来创建容器、将函数应用容器部署到容器应用,以及配置持续部署。 网络和可观测性配置在容器应用环境级别定义,应用于在容器应用环境中运行的所有微服务,包括函数应用。 你还可以获得容器应用的其他云原生功能,包括 KEDA、Dapr、Envoy。 仍可以使用 Application Insights 来监视函数执行。

托管和工作负载配置文件

容器应用有两个主要托管计划,一个无服务器 消耗计划和一个专用计划,专用计划使用工作负载配置文件更好地控制部署资源。 工作负载配置文件确定部署在环境中的容器应用可用的计算和内存资源量。 对这些配置文件进行配置以符合应用程序的不同需求。 消耗工作负载配置文件是添加到每个工作负载配置文件环境类型的默认配置文件。 可以在创建环境时或创建环境后添加专用工作负载配置文件到环境中。 若要了解有关工作负载配置文件的详细信息,请参阅 Azure 容器应用中的工作负载配置文件

容器化函数应用的容器应用托管在支持容器应用的所有区域中都受支持。

如果应用没有特定的硬件要求,则即可在消耗计划中运行环境,也可使用默认消耗工作负载配置文件在专用计划中运行环境。 在容器应用上运行函数时,只需支付容器应用的使用费。 有关详细信息,请参阅 Azure 容器应用定价页

Azure 容器应用中的 Azure Functions 在使用工作负载配置文件的专用计划中支持启用 GPU 的托管。

若要了解如何在默认的消耗计划中创建函数应用容器并将其部署到容器应用,请参阅在 Azure 容器应用上创建第一个容器化函数

若要了解如何使用工作负载配置文件创建容器应用环境并将函数应用容器部署到特定工作负载,请参阅容器应用工作负载配置文件

容器中的 Functions

若要使用容器应用托管,Functions 代码必须在你创建和维护的 Linux 容器中运行。 Functions 维护一组特定语言的基础映像,你可以使用这些映像生成容器化函数应用。

当你使用 Azure Functions Core Tools 创建 Functions 项目并提供 --docker 选项时,Core Tools 会生成带有正确基础映像的 Dockerfile,你可以使用该文件开始创建容器。

重要

创建自己的容器时,需要将容器的基础映像更新为受支持的最新基础映像。 Azure Functions 支持的基映像特定于语言,可在 Azure Functions 基础映像存储库中找到。

Functions 团队致力于发布这些基础映像的每月更新。 定期更新包括 Functions 运行时和语言的最新次要版本更新和安全修补程序。 应定期通过最新基础映像更新容器,并重新部署容器的更新版本。

对函数代码进行更改时,必须重新生成并重新发布容器映像。 有关详细信息,请参阅更新注册表中的映像

部署选项

Azure Functions 目前支持使用以下方法将容器化函数应用部署到 Azure 容器应用:

配置缩放规则

容器应用上的 Azure Functions 旨在根据事件目标配置缩放参数和规则。 你无需考虑如何配置 KEDA 缩放对象。 创建或修改函数应用时,你仍可以设置最小和最大副本计数。 在容器应用环境中从 Azure 容器注册表创建新的函数应用时,以下 Azure CLI 命令将设置最小和最大副本计数:

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 Function 在专门的受管理资源组中运行函数化容器资源,这有助于防止用户、组或服务主体意外或未经授权的修改或删除受管理组中的资源,从而保护应用的一致性。 首次在容器应用环境中创建函数应用资源时,会创建此受管理资源组。 容器化函数应用所需的容器应用资源在此受管理资源组中运行,而在同一环境中创建的任何其他函数应用都使用这一现有组。 从环境中删除所有函数应用容器资源后,将自动删除受管理资源组。 当受管理资源组可见时,任何修改或删除受管理资源组的尝试都会导致错误。 若要从环境中删除受管理资源组,请删除所有函数应用容器资源,随后便会为你删除该资源组。 如果在使用这些受管理资源组时遇到任何问题,应联系支持人员。

容器应用托管的注意事项

将函数应用容器部署到容器应用时,请记住以下注意事项:

  • 虽然可以使用所有触发器,但只有以下触发器可以在容器应用上运行时动态缩放(从零个实例开始):
    • HTTP
    • Azure 队列存储
    • Azure 服务总线
    • Azure 事件中心
    • Kafka*
    • 计时器
      *托管在容器应用上时,不支持 ssl 协议值。 使用其他协议值
  • 对于内置容器应用策略定义,目前只有环境级策略会应用于 Azure Functions 容器。
  • 当前无法在资源组或订阅之间移动容器应用托管的函数应用部署。 相反,必须在新的资源组、订阅或区域中重新创建现有的容器化应用部署。
  • 使用容器应用时,无法直接访问较低级别的 Kubernetes API。
  • containerapp 扩展与 Azure CLI 中的 appservice-kube 扩展相冲突。 如果之前已将应用发布到 Azure Arc,请运行 az extension list 并确保未安装 appservice-kube。 如果已安装,可以运行 az extension remove -n appservice-kube 将其删除。
  • Functions DAPR 扩展也以预览版提供,存储库中提供了帮助。

后续步骤