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

更新 Azure Functions 中的语言堆叠版本

在 Azure Functions 中,对语言堆栈的支持仅限于 特定版本。 随着新版本的推出,你可能希望更新函数应用以利用新功能。 Functions 对旧版本的支持也会结束,通常与社区终止支持的时间表保持一致。 有关详细信息,请参阅语言运行时支持策略。 有关各种语言支持的版本,请参阅运行时版本的语言

为了确保函数应用继续获得支持,请按照本文中的说明将其更新到最新的可用版本。 更新函数应用的方式取决于以下几个因素:

  • 用于开发函数应用的语言。 请确保选择本文顶部的编程语言。
  • 在哪种操作系统上的 Azure 中运行函数应用:Windows 或 Linux。
  • 托管计划

注意

本文介绍如何更新使用独立辅助角色模型的函数应用的 .NET 版本。 如果函数应用在较旧版本的 .NET 上运行并使用进程内模型,请考虑以下选项:

准备函数应用

在 Azure 中更新函数应用的堆栈配置之前,请完成以下部分中的任务。

查看依赖项

在更新语言版本之前,请查看以下潜在依赖项:

  • 扩展捆绑包:验证文件是否 host.json 引用兼容的 扩展捆绑包版本。 对于大多数方案,建议使用版本 4.x 捆绑包。
  • 绑定扩展:更新任何显式绑定扩展引用,以便与您的新语言版本兼容。

  • 包依赖项:查看所有包依赖项并将其更新为支持目标语言版本的版本。

  • 本地工具:确保本地开发工具(如 Azure Functions Core Tools、SDK 和 IDE)支持新的语言版本。

在本地验证函数应用

在新的目标版本本地测试和验证函数应用代码。

使用以下步骤在本地计算机上更新项目:

  1. 确保已安装 .NET SDK 的目标版本

    如果以预览版为目标,请参阅 预览版 .NET 版本的 Functions 指南 ,以确保支持该版本。 使用 .NET 预览版可能需要执行更多步骤。

  2. 更新对 最新版本的 Microsoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.Sdk 的引用。

  3. 将项目的目标框架更新到新版本。 对于 C# 项目,必须更新 <TargetFramework> 文件中的 元素。 有关版本的详细信息,请参阅 目标框架

    更改项目的目标框架可能还需要更改项目代码之外的工具链部分。 例如,在 Visual Studio Code 中,可能需要更新用户设置中的 azureFunctions.deploySubpath 扩展设置或项目的 .vscode/settings.json 文件。 在生成步骤或持续集成和持续交付 (CI/CD) 管道过程中,检查是否存在对框架版本的任何依赖项,这些依赖项存在于项目代码之外。

  4. 对新 .NET 版本所需的项目代码进行任何更新。 查看版本的发行说明以获取详情。 还可以使用 .NET 升级助手 来帮助更新代码,以响应主要版本的更改。

完成这些更改后,请重新生成项目并对其进行测试,以确认函数应用按预期运行。

迁移至最新的 Functions 运行时

请确保函数应用在最新版本的 Functions 运行时(版本 4.x)上运行。 可以在 Azure 门户中或使用 Azure CLI 来确定运行时版本。

使用以下步骤确定 Functions 运行时版本:

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。

  2. 转到“函数运行时设置”选项卡并检查“运行时版本”值。 函数应用应在 Functions 运行时版本 4.x 上运行(~4)。

如果需要将函数应用更新到版本 4.x,请参阅将应用从 Azure Functions 版本 1.x 迁移到版本 4.x将应用从 Azure Functions 版本 3.x 迁移到版本 4.x。 请按照这些文章中的说明进行操作,而不仅仅是更改 FUNCTIONS_EXTENSION_VERSION 设置。

发布函数应用更新

如果更新了函数应用以在新版本上正确运行,请在更新函数应用的堆栈配置之前发布函数应用更新。

提示

为了简化更新过程,尽量减少函数应用的停机时间,并提供一个用于回滚的潜在版本,请将更新的函数应用发布到暂存槽。 有关详细信息,请参阅 Azure Functions 部署槽

将已更新的函数应用发布到过渡槽时,请确保按照本文其余部分中特定于槽的更新说明进行操作。 稍后,将已更新的过渡槽交换到生产环境中。

考虑使用插槽

在更新函数应用的语言版本之前,请创建用于测试和部署的 部署槽 位。 此方法可最大程度地减少停机时间,并在出现问题时提供简单的回滚选项。 本文中的示例使用名为 staging 的暂存槽。

弹性消耗计划:目前不支持插槽。 应首先在非生产函数应用中验证更新的代码。 部署到正在运行的应用时,可以使用滚动更新策略。 有关详细信息,请参阅 Flex Consumption 中的站点更新策略

重要

滚动更新策略目前为预览版,不建议用于生产应用。 在任何生产应用中启用此策略之前,请查看当前的 限制和注意事项

更新堆栈配置

更新堆栈配置的方式取决于是在 Windows 还是 Linux 中的 Azure 运行。

使用过渡槽时,请确保将更新定向到正确的槽。

按照以下步骤更新 Java 版本:

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。 如果有暂存槽,请选择具体槽位。

  2. 在“常规设置”选项卡中,将“Java 版本”更新到所需版本

  3. 选择“保存”。 收到重启通知后,请选择“继续”。

使用以下步骤更新 .NET 版本:

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。 如果有暂存槽,请选择具体槽位。

  2. 在“常规设置”选项卡中,将“.NET 版本”更新到所需版本

  3. 选择“保存”。 收到重启通知后,请选择“继续”。

使用以下步骤更新 Node.js 版本:

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。 如果有暂存槽,请选择具体槽位。

  2. 在“常规设置”选项卡中,将“Node.js 版本”更新到所需版本

  3. 选择“保存”。 收到重启通知后,请选择“继续”。 此更改将更新 WEBSITE_NODE_DEFAULT_VERSION 应用程序设置。

使用以下步骤更新 PowerShell 版本:

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。 如果有暂存槽,请选择具体槽位。

  2. 在“常规设置”选项卡中,将“PowerShell Core 版本”更新到所需版本

  3. 选择“保存”。 收到重启通知后,请选择“继续”。

门户不支持 Windows 上的 Python 应用。 请改为转到“Linux”选项卡

更新版本后,函数应用将重启。

注意

在重启期间,函数应用在短时间内不可用,通常为 30-60 秒。 如果直接更新生产函数应用程序(不使用暂存槽),请在维护时段内计划停机。 重启将终止任何正在进行的请求,新请求在应用成功重启之前会失败。

验证更新

函数应用重启后,验证语言版本更新是否成功。

  1. Azure 门户中,找到并选择函数应用。 在侧边菜单中,选择“设置”>“配置”。

  2. “常规设置 ”选项卡上,验证语言版本是否显示所选的新版本。

  3. 在侧菜单上选择 “概述 ”,确认 状态 显示为 “正在运行”。

验证版本后,还要验证函数是否按预期工作。

交换槽

如果使用过渡槽部署代码项目并更新设置,请将过渡槽交换到生产环境。 有关详细信息,请参阅交换槽

Troubleshooting

如果在更新语言版本后遇到问题,请使用以下指南解决常见问题:

函数应用未启动

症状: 函数应用状态显示为 “已停止 ”或“持续重启”。

解决方案:

  1. 在 Azure 门户中检查应用程序日志:

    • 导航到函数应用并选择“ 监视>日志流”。
    • 查找与运行时或语言版本不匹配相关的错误消息。
  2. 验证所有依赖项是否与新的语言版本兼容:

    • 对于 .NET,请确保 NuGet 包支持目标框架。
    • 对于 Python,请检查包 requirements.txt 版本是否兼容。
    • 对于 Node.js,请验证 package.json 依赖项是否支持新的 Node 版本。
  3. 检查host.json文件中的扩展捆绑包版本。 较旧的捆绑包可能不支持较新的语言版本。

函数失败并出现运行时错误

症状: 触发时,单个函数会失败,日志中出现错误。

解决方案:

  1. 请查看您的语言版本中的重大变更:

  2. 将绑定扩展更新为与新语言版本兼容的版本。

  3. 在重新部署之前,使用新语言版本在本地测试函数。

扩展版本冲突

症状: 提及“扩展”或“绑定”版本不兼容的错误。

解决方案:

  1. 扩展捆绑包 版本 host.json 更新到版本 4.x 或更高版本。

    {
      "version": "2.0",
      "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.*, 5.0.0)"
      }
    }
    
  2. 对于使用显式扩展引用的 .NET 项目,请将所有 Microsoft.Azure.WebJobs.Extensions.* 包更新为其最新版本。

回滚更新

如果需要还原到以前的语言版本:

  1. 如果使用了过渡槽:

    • 将测试槽切换回生产环境。
    • 将暂存槽恢复到之前的版本,以便后续尝试。
  2. 如果直接更新生产环境:

    • 请按照本文中的相同更新步骤进行操作,但请指定您之前的语言版本。
    • 重新部署以前的代码版本。
  3. 监视你的函数应用,确保其恢复正常运作。

提示

为了避免问题,在将语言版本更新应用到生产环境之前,请始终在过渡槽中测试语言版本更新。 在进行更改之前,请创建函数应用配置的备份。