更新 Azure Functions 中的语言堆叠版本
对 Azure Functions 中任何给定语言堆栈的支持仅限于特定版本。 随着新版本的推出,你可能希望更新应用以利用其功能。 在旧版本中,Functions 中的支持也可能结束,结束时间通常与社区支持终止时间线保持一致。 有关详细信息,请参阅语言运行时支持策略。 若要确保应用继续获得支持,应按照本文中概述的说明将其更新到最新的可用版本。
更新函数应用的方式取决于:
- 用于创作函数的语言;请确保在文章顶部选择编程语言。
- 在哪种操作系统上的 Azure 中运行应用:Windows 或 Linux。
- 托管计划。
准备更新
在 Azure 中更新函数应用的堆栈配置之前,应完成以下任务:
1. 在本地验证函数
请确保在新的目标版本本地测试和验证函数代码。
使用以下步骤在本地计算机上更新项目:
确保已安装目标版本的 .NET SDK。
更新对最新稳定版本的 Microsoft.Azure.Functions.Worker 和 Microsoft.Azure.Functions.Worker.Sdk 的引用。
将项目的目标框架更新到新版本。 对于 C# 项目,必须更新 .csproj
文件中的 <TargetFramework>
元素。 有关与所选版本相关的详情,请参阅目标框架。
更改项目的目标框架可能还需要更改项目代码之外的工具链部分。 例如,在 VS Code 中,可能需要通过用户设置或项目的 .vscode/settings.json
文件更新 azureFunctions.deploySubpath
扩展设置。 作为生成步骤或 CI/CD 管道的一部分,检查是否存在对框架版本的任何依赖项,这些依赖项可能存在于项目代码之外。
对新 .NET 版本所需的项目代码进行所有更新。 查看版本的发行说明以获取详情。 还可以使用 .NET 升级助手来帮助你更新代码,以响应主要版本的更改。
完成这些更改后,请重新生成项目并对其进行测试,以确认应用按预期运行。
2. 移动到最新的 Functions 运行时
请确保函数应用在最新版本的 Functions 运行时(版本 4.x)上运行。 可以在 Azure 门户中或使用 Azure CLI 来确定运行时版本。
使用以下步骤确定 Functions 运行时版本:
在Azure 门户中,找到函数应用,然后选择左侧“设置”下的“配置”。
选择“函数运行时设置”选项卡,检查运行时版本值以查看函数应用是否在 4.x 版的 Functions 运行时 (~4
) 上运行。
使用此az functionapp config appsettings list
命令检查运行时版本:
az functionapp config appsettings list --name "<FUNCTION_APP_NAME>" --resource-group "<RESOURCE_GROUP_NAME>"
FUNCTIONS_EXTENSION_VERSION
设置设置运行时版本。 值~4
表示函数应用已在最新主版本 (4.x) 的最新次要版本上运行。
如果需要先将函数应用更新到版本 4.x,请参阅将应用从 Azure Functions 版本 1.x 迁移到版本 4.x 或将应用从 Azure Functions 版本 3.x 迁移到版本 4.x。 应按照这些文章中的说明进行操作,而不仅仅是更改 FUNCTIONS_EXTENSION_VERSION
设置。
发布应用更新
如果更新了应用以在新版本上正确运行,请在更新函数应用的堆栈配置之前发布应用更新。
将已更新的应用发布到过渡槽时,请确保按照本文其余部分中特定于槽的更新说明进行操作。 稍后,将已更新的过渡槽交换到生产环境中。
更新堆栈配置
更新堆栈配置的方式取决于是在 Azure 中运行 Windows 还是 Linux。
使用过渡槽时,请确保将更新定向到正确的槽。
按照以下步骤更新 Java 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“Java 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
使用以下步骤更新 .NET 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“.NET 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
使用以下步骤更新 PowerShell 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“.NET 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
Windows 不支持 Python 应用。 请改为选择“Linux”选项卡。
按照以下步骤更新 Java 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“Java 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
使用以下步骤更新 .NET 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“.NET 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
使用以下步骤更新 PowerShell 版本:
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“.NET 版本”更新到所需版本。
选择“保存”,当收到重启通知时,选择“继续”。
Windows 不支持 Python 应用。 请改为选择“Linux”选项卡。
在 Azure 门户找到函数应用,然后选择左侧的“配置”。 使用过渡槽时,请确保先选择特定槽。
在“常规设置”选项卡中,将“Python 版本”更新到所需版本。
注意
在消耗计划中运行时,无法更改 Python 版本。
选择“保存”,当收到重启通知时,选择“继续”。
Windows 不支持 Python 应用。 请改为选择“Linux”选项卡。
az functionapp list-runtimes --os "windows" --query "[?runtime == 'java'].{Version:version}" --output table
az functionapp config set --java-version "<VERSION>" --name "<APP_NAME>" --resource-group "<RESOURCE_GROUP>" --slot "staging"
az functionapp list-runtimes --os "windows" --query "[?runtime == 'dotnet-isolated'].{Version:version}" --output table
运行 az functionapp config set
命令更新 .NET 版本的函数应用:
az functionapp config set --net-framework-version "v<VERSION>.0" --name "<APP_NAME>" --resource-group "<RESOURCE_GROUP>" --slot "staging"
首先,使用 az functionapp list-runtimes
命令查看受支持的语言堆栈 (Node.js) 版本值。 然后,运行 az functionapp config set
命令更新函数应用的 Node.js 版本:
az functionapp list-runtimes --os "windows" --query "[?runtime == 'node'].{Version:version}" --output table
az functionapp config appsettings set --name "<APP_NAME>" --resource-group "<RESOURCE_GROUP>" --settings "WEBSITE_NODE_DEFAULT_VERSION=~<VERSION>" --slot "staging"
az functionapp list-runtimes --os "windows" --query "[?runtime == 'powershell'].{Version:version}" --output table
az functionapp config set --powershell-version "<VERSION>" --name "<APP_NAME>" --resource-group "<RESOURCE_GROUP>" --slot "staging"
请将此示例中的<APP_NAME>
和<RESOURCE_GROUP>
分别替换为函数应用名称和资源组名称。 此外,请将 <VERSION>
替换为要更新到的受支持的语言版本。 如果不使用过渡槽,请删除 --slot
参数。
注意
在消耗计划中运行时,无法更改 Python 版本。
az functionapp list-runtimes --os linux --query "[?runtime == 'python'].{Version:version, linuxFxVersion:linux_fx_version}" --output table
az functionapp list-runtimes --os linux --query "[?runtime == 'dotnet-isolated'].{Version:version, linuxFxVersion:linux_fx_version}" --output table
az functionapp list-runtimes --os linux --query "[?runtime == 'node'].{Version:version, linuxFxVersion:linux_fx_version}" --output table
az functionapp list-runtimes --os linux --query "[?runtime == 'python'].{Version:version, linuxFxVersion:linux_fx_version}" --output table
az functionapp list-runtimes --os linux --query "[?runtime == 'powershell'].{Version:version, linuxFxVersion:linux_fx_version}" --output table
az functionapp config set --linux-fx-version "<LANGUAGE|VERSION>" --name "<APP_NAME>" --resource-group "<RESOURCE_GROUP>" --slot "staging"
请将此示例中的<APP_NAME>
和<RESOURCE_GROUP>
分别替换为函数应用名称和资源组名称。 此外,请将 <LANGUAGE|VERSION>
替换为 linuxFxVersion
进行更新。 如果不使用过渡槽,请删除 --slot
参数。
更新版本后,函数应用将重启。
交换槽
如果已在过渡槽中执行代码项目部署和更新设置,则最终需要将过渡槽交换到生产槽。 有关详细信息,请参阅交换槽。
后续步骤