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

如何面向 Azure Functions 运行时版本

函数应用在特定版本的 Azure Functions 运行时上运行。 默认情况下,在 Functions 运行时的最新 4.x 版本中创建函数应用。 函数应用只有在受支持的主要版本上运行时才会受支持。 本文介绍了如何在 Azure 中配置函数应用,以便在需要时将其指向或锁定到特定版本的 Functions 运行时。

注意事项

针对特定运行时版本时,请记住以下注意事项:

  • Flex Consumption 计划仅在运行时版本 4.x 上运行。 由于 Flex Consumption 计划不支持 FUNCTIONS_EXTENSION_VERSION 应用设置,因此应用在此计划中运行时不能面向特定的运行时版本。
  • 指定特定版本的方式取决于运行的是 Windows 还是 Linux。
  • 本文特定于 Windows 或 Linux。 在文章顶部选择操作系统。
  • 如果可能,请始终在最新支持的运行时版本上运行应用。 仅当由于最新版本的问题而指示你这样做时,才将应用固定到特定版本。 函数可以正常运行后,始终立即更新到最新的运行时版本。
  • 在本地开发期间,已安装的 Azure Functions Core Tools 版本必须与 Azure 中的函数应用使用的主要运行时版本匹配。 有关详细信息,请参阅 Core Tools 版本

更新运行时版本

如果可能,请始终在最新支持的 Azure Functions 运行时版本上运行函数应用。 如果函数应用当前在较旧版本的运行时上运行,请将应用迁移到版本 4.x。

如果应用包含现有函数,则必须先采取预防措施,然后再迁移到更高的主要运行时版本。 以下文章详细介绍了主要版本之间的中断性变更,包括特定于语言的中断性变更。 它们还提供了成功迁移现有函数应用的分步说明。

若要确定当前运行时版本,请参阅查看当前运行时版本

查看当前运行时版本

可以通过以下方法之一查看函数应用的当前运行时版本:

若要查看并更新函数应用当前使用的运行时版本,请按照以下步骤进行操作:

  1. Azure 门户中,浏览到你的函数应用。

  2. 展开“设置”,然后选择“配置”

  3. 在“函数运行时设置”选项卡中,记下“运行时版本”。 在此示例中,版本设置为 ~4

    显示如何查看运行时版本的屏幕截图。

固定到特定版本

使用 Azure Functions,可以通过 FUNCTIONS_EXTENSION_VERSION 应用程序设置来指定给定函数应用使用的运行时版本。 如果仅指定主要版本(~4),则函数应用会在运行时可用时自动更新到新的次要版本。 次要版本更新是自动的,因为新的次要版本不太可能引入破坏函数的更改。

Linux 应用使用 linuxFxVersion 站点设置FUNCTIONS_EXTENSION_VERSION 来确定运行函数的正确 Linux 基础映像。 在 Linux 上创建新的函数应用时,运行时会根据语言堆栈的运行时版本自动选择正确的基础映像。

锁定到特定运行时版本会重新启动您的函数应用。

当您在4.0.12345中指定特定次要版本(例如FUNCTIONS_EXTENSION_VERSION)时,您的函数应用会被锁定到该特定版本的运行时,直到您显式选择恢复到自动版本更新。 只需将版本固定到某个具体的次要版本上,时间长度只需足够解决与函数应用相关的任何可能导致无法使用主要版本的问题即可。 会定期从生产环境中删除旧的次要版本。 当函数应用固定到一个之后被删除的次要版本上时,函数应用将在最接近的现有版本上运行,而不是在FUNCTIONS_EXTENSION_VERSION中设置的版本上。 应用服务公告中会公布次要版本删除信息。

注意

当尝试从 Visual Studio 发布到已固定到特定次要版本的运行时的应用时,会出现一个对话框,提示更新到最新版本或取消发布。 若要避免在必须使用特定次要版本时进行此检查,请在 <DisableFunctionExtensionVersionUpdate>true</DisableFunctionExtensionVersionUpdate> 文件中添加 .csproj 属性。

使用以下方法之一将应用暂时固定到特定版本的运行时:

若要查看并更新函数应用当前使用的运行时版本,请按照以下步骤进行操作:

  1. Azure 门户中,浏览到你的函数应用。

  2. 展开“设置”,然后选择“配置”

  3. 在“函数运行时设置”选项卡中,记下“运行时版本”。 在此示例中,版本设置为 ~4

    显示如何查看运行时版本的屏幕截图。

  1. 若要将应用固定到特定的次要版本,请在左窗格中展开“设置”,然后选择“环境变量”

  2. 在“应用设置”选项卡中,选择 FUNCTIONS_EXTENSION_VERSION,将“值”更改为所需的次要版本,然后选择“应用”

  3. 选择“应用”,然后选择“确认”,应用更改并重启应用。

在对应用程序设置进行更改后,函数应用将重启。

若要将函数应用固定到 Linux 上的特定运行时版本,请在站点设置中linuxFxVersion以格式DOCKER|<PINNED_VERSION_IMAGE_URI>设置特定于版本的基本映像 URL。

重要

Linux 上的固定函数应用不会收到常规安全更新和主机功能更新。 除非支持专业人员建议,否则请使用 FUNCTIONS_EXTENSION_VERSION 设置以及语言和版本的标准 linuxFxVersion 值,例如 Python|3.12。 有关有效值,请参阅 linuxFxVersion 参考文章

在消耗计划中运行的 Linux 函数应用当前不支持固定到特定运行时。

以下示例显示了将 linuxFxVersion Node.js 22 函数应用固定到特定运行时版本 4.14.0.3 所需的值:

DOCKER|mcr.microsoft.com/azure-functions/node:4.14.0.3-node22

如果需要,支持专业人员可以为你提供应用程序的有效基础映像 URI。

使用以下 Azure CLI 命令查看和设置 linuxFxVersion。 当前无法在门户中设置或使用 Azure PowerShell 设置 linuxFxVersion

  • 若要查看当前的运行时版本,请使用 az functionapp config show 命令:

    az functionapp config show --name <function_app> \
    --resource-group <my_resource_group> --query 'linuxFxVersion' -o tsv
    

    在此代码中,用函数应用名称替代 <function_app>。 此外,还使用函数应用的资源组名称替代 <my_resource_group>。 返回当前值 linuxFxVersion

  • 若要更新函数应用中的 linuxFxVersion 设置,请使用 az functionapp config set 命令:

    az functionapp config set --name <FUNCTION_APP> \
    --resource-group <RESOURCE_GROUP> \
    --linux-fx-version <LINUX_FX_VERSION>
    

    <FUNCTION_APP> 替换为你的函数应用的名称。 此外,还使用函数应用的资源组名称替代 <RESOURCE_GROUP>。 最后,将 <LINUX_FX_VERSION> 替换为支持专业人员提供给你的特定映像的值。

在前面的代码示例中,可以通过选择“打开 Cloud Shell”从 Azure Cloud Shell 运行这些命令。 还可以在执行 登录后使用 az login执行此命令。

在对站点配置进行更改后,函数应用会重启。

更新托管的Linux镜像

本节仅适用于使用 Debian Bullseye 管理镜像的现有 Python 3.11 和 Java 8、11 或 17 应用,运行于 Linux Elastic Premium 或专用(App Service)计划。 如果你的应用不满足所有这些条件,则无需遵循此流程。

较新的托管镜像为受影响的应用在迁移到支持的Linux发行版时,提供了一条临时路径,使其保持在当前语言版本。 该流程不适用于Flex Consumption或自定义容器应用。 对于 Linux 消费计划上的应用,可以迁移到弹性消费计划

此更新通过使用三部分 linuxFxVersion 值选择当前语言版本的Linux发行版。 它不会把功能主机钉在特定 DOCKER|<IMAGE_URI> 镜像上。

选择 Bookworm 或 Noble linuxFxVersion 数值

首先,确定你是否可以更新语言版本,或者是否需要保留当前语言版本,然后选择更新的Linux发行版。

  1. 考虑更新应用 到支持的新语言版本。 语言更新后,应用会使用该语言版本当前默认的托管镜像。

  2. 如果应用必须保持当前语言版本,请选择相应的新图像值:

    语言版本 Debian Bullseye 值 较新的发行版 更新的图像值
    Python 3.11 Python\|3.11\|2.0 Debian Bookworm Python\|3.11\|3.0
    Java 8 Java\|8\|2.0 Ubuntu Noble Java\|8\|4.0
    Java 11 Java\|11\|2.0 Ubuntu Noble Java\|11\|4.0
    Java 17 Java\|17\|2.0 Ubuntu Noble Java\|17\|4.0

    这些三段式值明确指定了用于这些 Bullseye 时期镜像的受管 Linux 镜像。 az functionapp list-runtimes 命令不会返回它们。

测试更新的托管Linux镜像

在更新生产应用之前,先测试你的应用及其对新镜像的依赖。

  1. 创建一个单独的测试应用或 创建一个部署时段

  2. 将你生产应用使用的代码和配置部署到测试应用或插槽中。

  3. 按照 “更新图像值”中的步骤设置新的图像值。 使用槽位时,请在每个 Azure CLI 命令中包含 --slot <SLOT_NAME>

  4. 调用每个函数,确认应用成功启动,触发器按预期运行,以及本地或操作系统依赖正确加载。

更新图像值

更改图像值会重启函数应用。 在维护窗口期间更新生产环境,或使用部署时隙。

  1. 查看当前 linuxFxVersion 价值:

    az functionapp config show --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --query linuxFxVersion --output tsv
    

    该命令返回站点配置中存储的值。 返回的值可能仅包含语言和语言版本,例如 Python|3.11,而非标识Linux发行版的三部分值。 如果值中没有包含镜像版本,请按照 “验证 Linux 发行版 ”中的步骤确认应用当前使用 Debian Bullseye。

  2. linuxFxVersion 设置为较新的映像值:

    az functionapp config set --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --linux-fx-version "<LANGUAGE|VERSION|IMAGE_VERSION>"
    

    对于Debian Bookworm上的Python 3.11,请使用Python|3.11|3.0。 对于Ubuntu Noble上的Java,可以使用Java|8|4.0、、Java|11|4.0Java|17|4.0

  3. 等应用重启。

验证Linux发行版

验证配置值和运行你应用的Linux发行版。

  1. 确认更新后的 linuxFxVersion 数值:

    az functionapp config show --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --query linuxFxVersion --output tsv
    

    因为你明确设置了一个三段式值,所以该命令会返回你所选择的确切 Bookworm 或 Noble 值。

  2. 打开应用的 Kudu 站点:https://<APP_NAME>.scm.azurewebsites.net

  3. 选择 环境 并进行审核 KUDU_ENV,或者打开SSH会话并运行:

    cat /etc/os-release
    
  4. 确认输出是否识别出 Python 3.11 版的 Debian Bookworm 或 Java 8、11 或 17 版的 Ubuntu Noble。

  5. 调用每个函数,确认触发器和依赖是否仍按预期工作。

回滚托管的Linux镜像更新

如果更新后的镜像导致兼容性问题,暂时恢复之前 linuxFxVersion 的数值,同时修复问题。

Warning

Debian Bullseye 在其生命周期终止后不再支持,也不再获得安全更新。 仅将回滚用作临时缓解措施,并尽快切回受支持的镜像。

  1. 在“选择 Bookworm 或 Noble linuxFxVersion”表格中,找到与您的语言版本对应的 Debian Bullseye 值。

  2. linuxFxVersion 设置为该靶心值:

    az functionapp config set --name <APP_NAME> \
      --resource-group <RESOURCE_GROUP> \
      --linux-fx-version "<BULLSEYE_LINUX_FX_VERSION>"
    
  3. 等应用重启后,再在 “验证Linux发行版”里重复检查。

后续步骤