Azure Functions 執行階段版本概觀

Azure Functions 目前支援多個版本的執行時間主機。 下表詳細說明可用的版本、其支援層級,以及應使用的時機:

版本 支援層級 Description
4.x 預覽 支援所有語言。 您可以使用這個版本, 在 .net 6.0 上執行 c # 函數
3.x GA 適用于所有語言之函式的建議執行階段版本。
2.x GA 支援 舊版2.x 版應用程式。 此版本處於維護模式,且僅在較新版本中提供增強功能。
1.x GA 建議僅適用于必須使用 .NET Framework 且僅支援在 Azure 入口網站、Azure Stack Hub 入口網站或 Windows 電腦本機上進行開發的 c # 應用程式。 此版本處於維護模式,且僅在較新版本中提供增強功能。

本文將詳細說明這些版本之間的一些差異、如何建立每個版本,以及如何變更您的函式執行的版本。

支援等級

支援的層級有兩種:

  • 正式推出 (GA) - 完整支援且已核准用於生產環境。
  • 預覽 -尚未支援,但預期會在未來達到 GA 狀態。

語言

從2.x 版開始,執行時間會使用語言擴充性模型,且函數應用程式中的所有函式都必須共用相同的語言。 當您建立應用程式時,您會在函數應用程式中選擇函數的語言。 函式應用程式的語言會在函式 背景 _ 工作 _ 運行 時間設定中維護,而如果有現有的函式,則不應變更。

下表指出每個執行階段版本目前支援的程式設計語言。

Language 1.x 2.x 3.x 4.x (預覽)
C# GA (.NET Framework 4.8) GA ( .NET Core 2.11) 公開推出 (.NET Core 3.1)
GA ( .NET 5.0)
預覽版 ( .NET 6.0)
JavaScript 公開推出 (Node 6) 公開推出 (Node 10 與 8) GA (節點14、12、& 10) 預覽 (Node 14)
F# GA (.NET Framework 4.8) GA ( .NET Core 2.11) 公開推出 (.NET Core 3.1) 預覽版 ( .NET 6.0)
Java N/A 公開推出 (Java 8) GA (Java 11 與 8) (JAVA 11 & 8) 預覽
PowerShell N/A 公開推出 (PowerShell Core 6) GA (PowerShell 7.0 & Core 6) (PowerShell 7.0) 預覽
Python N/A 公開推出 (Python 3.7 與 3.6) GA (Python 3.9、3.8、3.7、& 3.6) Preview (Python 3.9、3.8)
TypeScript2 N/A GA GA 預覽

1 以執行階段版本2.x 為目標的 .net 類別庫應用程式,在 .net core 2.x 相容性模式中執行于 .net core 3.1。 若要深入瞭解,請參閱 函數 v2. x 考慮
2 透過轉譯成 JavaScript 而支援。

如需支援語言版本的詳細資訊,請參閱特定語言開發人員指南一文。
如需語言支援變更規劃的相關資訊,請參閱 Azure 藍圖

在特定版本上執行

根據預設,在 Azure 入口網站中建立的函式應用程式和 Azure CLI 都會設定為3.x 版。 您可以視需要修改此版本。 您只能在建立函數應用程式之後,但在新增任何函式之前,將執行階段版本降級為1.x。 即使應用程式具有現有的函式,也允許在2.x 和3.x 之間移動。 將現有的函式從2.x 移至3.x 之前,請留意2.x 和3.x 之間的任何 重大變更

對執行時間的主要版本進行變更之前,您應該先測試現有的程式碼,方法是部署到在最新主要版本上執行的另一個函式應用程式。 這種測試有助於確保在升級之後正確執行。

不支援從 v3. x 降級至 v2. x。 可能的話,您應該一律在最新支援版本的函式執行時間上執行您的應用程式。

在 Azure 中變更應用程式版本

Azure 中已發佈應用程式所使用的函式執行時間版本,是由 FUNCTIONS_EXTENSION_VERSION 應用程式設定所決定。 以下是支援的主要執行階段版本值:

執行時間目標
~4 4.x (預覽)
~3 3.x
~2 2.x
~1 1.x

重要

請勿任意變更此設定,因為可能需要其他應用程式設定變更和您的函式程式碼變更。

若要深入了解,請參閱如何設定目標 Azure Functions 執行階段版本

釘選到特定的次要版本

若要解決您的函數應用程式在最新的主要版本上執行的問題,您必須將應用程式釘選到特定的次要版本。 這讓您有時間讓應用程式在最新的主要版本上正確執行。 您釘選到次要版本的方式在 Windows 和 Linux 之間不同。 若要深入了解,請參閱如何設定目標 Azure Functions 執行階段版本

舊的次要版本會定期從函式移除。 如需 Azure Functions 版本的最新消息,包括移除特定較舊的次要版本,請監視 Azure App Service 公告

釘選到2.0 版

在2.x 版上執行的 .NET 函數應用程式 (~2) 會自動升級為在 .Net core 3.1 上執行,這是 .Net core 3 的長期支援版本。 在 .NET Core 3.1 上執行 .NET 函數可讓您利用最新的安全性更新和產品增強功能。

任何已釘選的函式應用程式會 ~2.0 繼續在 .Net Core 2.2 上執行,而不會再收到安全性和其他更新。 若要深入瞭解,請參閱 函數 v2. x 考慮

從3.x 升級至 4.x (預覽)

Azure Functions 4.x 版 (Preview) 高度回溯相容于3.x 版。 許多應用程式應該安全地升級至4.x,而不會有重大的程式碼變更。 在變更生產環境應用程式中的主要版本之前,請務必先進行廣泛的測試。

若要將應用程式從3.x 遷移至4.x,請 FUNCTIONS_EXTENSION_VERSION ~4 使用下列 Azure CLI 命令將應用程式設定設為:

az functionapp config appsettings set --settings FUNCTIONS_EXTENSION_VERSION=~4 -n <APP_NAME> -g <RESOURCE_GROUP_NAME>

# For Windows function apps only, also enable .NET 6.0 that is needed by the runtime
az functionapp config set --net-framework-version v6.0 -n <APP_NAME> -g <RESOURCE_GROUP_NAME>

3.x 和4.x 之間的重大變更

以下是在將2.x 應用程式升級至4.x 之前要注意的一些變更。 如需完整清單,請參閱 Azure Functions GitHub 標示為 重大變更的問題:已核准。 預覽期間預期會有更多變更。 訂閱 App Service 的更新 公告

執行階段

  • 4.x 不再支援 Azure Functions Proxy。 建議您使用 AZURE API 管理

  • 4.x 不再支援使用 AzureWebJobsDashboard 記錄至 Azure 儲存體。 您建議使用Application Insights。 (#1923)

  • Azure Functions 4.x 會強制執行延伸模組的 最低版本需求 。 升級至最新版本的受影響擴充功能。 若為 non-.NET 語言,請 升級 至擴充功能套件組合2.x 版或更新版本。 (#1987)

  • 在 4.x Linux 耗用量函數應用程式中,現在會強制執行預設和最大超時。 (#1915)

  • 在4.x 中,預設不再包含 Application Insights。 它現在以個別的擴充功能來提供。 (#2027)

    • 針對同進程 .NET 應用程式,將 ApplicationInsights 延伸模組套件新增至您的函數應用程式。
    • 針對隔離的 .NET 應用程式:
    • 針對其他語言, Azure Functions 延伸模組組合的未來更新將會包含 Application Insights 擴充功能。 當您的應用程式可供使用時,您的應用程式會自動使用新的配套。 在更新的延伸模組套件組合就緒之前, APPINSIGHTS_INSTRUMENTATIONKEYAPPLICATIONINSIGHTS_CONNECTION_STRING 從您的函數應用程式中移除和應用程式設定。 這會導致主機無法啟動。
  • 共用儲存體帳戶的函式應用程式如果其計算的主機名稱相同,將無法啟動。 針對每個函數應用程式使用個別的儲存體帳戶。 (#2049)

語言

  • InvalidHostServicesException 現在是嚴重錯誤。 (#2045)

  • EnableEnhancedScopes 預設為啟用。 (#1954)

  • 移除 HttpClient 為已註冊的服務。 (#1911)

從2.x 遷移至3。x

Azure Functions 版本3.x 高度相容于2.x 版。 許多應用程式都可以安全地升級至3.x,而不需要變更任何程式碼。 在建議移至3.x 時,請先執行廣泛的測試,再變更生產環境應用程式中的主要版本。

2.x 和3.x 之間的重大變更

以下是在將2.x 應用程式升級至3.x 之前要注意的特定語言變更。

執行 .NET 類別庫函式時,版本之間的主要差異是 .NET Core 執行時間。 函式2.x 版的設計目的是要在 .NET Core 2.2 和3.x 版上執行,其設計目的是要在 .NET Core 3.1 上執行。

注意

由於 .NET Core 2.2 的支援問題,釘選到第2版 () 的函式應用程式 ~2 基本上是在 .Net Core 3.1 上執行。 若要深入瞭解,請參閱函式 v2. x 相容性模式

從1.x 遷移至更新版本

您可以選擇遷移已撰寫的現有應用程式,以使用1.x 版執行時間,改為使用較新的版本。 您需要進行的大部分變更都與語言執行時間中的變更有關,例如 .NET Framework 4.8 和 .net Core 之間的 c # API 變更。 您也必須確認您的程式碼和程式庫與所選語言執行階段相容。 最後,請務必記下下面所強調觸發程序、繫結及功能方面的所有變更。 為了獲得最佳的遷移結果,您應該使用新的版本來建立新的函式應用程式,並將現有的1.x 版函式程式碼移植到新的應用程式。

雖然您可以手動更新應用程式設定來進行「就地」升級,但從1.x 升級到較高的版本包含一些重大變更。 例如,在 c # 中,偵錯工具物件會從變更 TraceWriterILogger 。 藉由建立新的3.x 版專案,您就可以根據最新版本3.x 範本開始使用更新的函式。

1.x 版之後的觸發程式和系結中的變更

從2.x 版開始,您必須為應用程式中的函式所使用的特定觸發程式和系結安裝擴充功能。 唯一的例外是 HTTP 和計時器觸發程序,這兩者不需要延伸模組。 如需詳細資訊,請參閱註冊及安裝繫結延伸模組

函數 中的函式或函式的屬性也有一些變更。 例如,「事件中樞」的 path 屬性現在是 eventHubName。 如需每個繫結的文件連結,請參閱現有的繫結表格

1.x 版後功能的變更

在1.x 版之後,已移除、更新或取代一些功能。 本節將詳細說明您在使用1.x 版之後,在後續版本中看到的變更。

2.x 版中做了下列變更:

  • 用於呼叫 HTTP 端點的金鑰一律會以加密形式儲存在 Azure Blob 儲存體中。 在1.x 版中,金鑰預設儲存在 Azure 檔案儲存體中。 將應用程式從1.x 版升級到2.x 版時,會重設 Azure 檔案儲存體中的現有秘密。

  • 2.x 版執行階段並未內建對 Webhook 提供者的支援。 進行此變更是為了提升效能。 您仍然可以使用 HTTP 觸發程序作為 Webhook 的端點。

  • 主機設定檔 (host.json) 應該空白或含有 "version": "2.0" 字串。

  • 為了改進監視功能,入口網站中使用此設定的 webjob 儀表板 AzureWebJobsDashboard 會取代為使用此設定的 Azure 應用程式 Insights APPINSIGHTS_INSTRUMENTATIONKEY 。 如需詳細資訊,請參閱監視 Azure Functions

  • 函數應用程式中的所有函式都必須共用相同語言。 當您建立函數應用程式時,必須為應用程式選擇執行階段堆疊。 執行時間堆疊是由 [ FUNCTIONS_WORKER_RUNTIME 應用程式設定] 中的值所指定。 新增此需求是為了改善使用量和啟動時間。 在本機進行開發時,您必須在 local.settings.json 檔案中也包含此設定。

  • App Service 方案中函式的預設逾時已變更為 30 分鐘。 您可以藉由在 host.json 中使用 functionTimeout 設定,將逾時手動變更回無限制。

  • 預設會針對取用方案函式執行 HTTP 並行節流,預設值為每個實例100的並行要求。 您可以在主機 json 檔案的設定中變更此 maxConcurrentRequests 設定。

  • 因為 .Net Core 的限制,所以已移除 F # 腳本 ( .fsx) 函數的支援。 仍然支援已編譯的 F# 函式 (.fs)。

  • 「事件方格」觸發程序 Webhook 的 URL 格式已變更為 https://{app}/runtime/webhooks/{triggerName}

本機開發的應用程式版本

您可以對函數應用程式進行下列更新,以在本機變更目標版本。

Visual Studio 執行階段版本

在 Visual Studio 中,您會在建立專案時選取執行階段版本。 適用于 Visual Studio 的 Azure Functions 工具支援三個主要的執行階段版本。 根據專案設定進行偵錯和發佈時,會使用正確的版本。 版本設定會在 .csproj 檔案中的下列屬性中定義:

<TargetFramework>net6.0</TargetFramework>
<AzureFunctionsVersion>v4</AzureFunctionsVersion>

注意

Azure Functions 4.x 要求 Microsoft.NET.Sdk.Functions 副檔名至少為 4.0.0

將 Visual Studio 中的2.x 應用程式更新為3。x

您可以開啟以2.x 為目標的現有函式,並藉由編輯檔案 .csproj 並更新上述值,移至3.x。 Visual Studio 會根據專案中繼資料自動為您管理執行時間版本。 但是,如果您從未建立了2.x 應用程式,Visual Studio 在電腦上還沒有適用于3.x 的範本和執行時間。 這可能會出現錯誤,例如「沒有可與專案中所指定版本相符的函式執行時間」。 若要提取最新的範本和執行時間,請流覽體驗以建立新的函式專案。 當您進入 [版本] 和 [範本] 選取畫面時,請等候 Visual Studio 完成提取最新的範本。 當最新的 .NET Core 3 範本可用並顯示之後,您就可以執行並針對2.x 版設定的任何專案進行偵測。

重要

只有在使用 Visual Studio 16.4 版或更新版本時,才能在 Visual Studio 中開發版本3.x 函數。

VS Code 與 Azure Functions Core Tools

Azure Functions Core Tools用於命令列開發,以及 Visual Studio Code 的Azure Functions 擴充功能。 若要針對2.x 版進行開發,請安裝2.x 版的 Core Tools。 2.x 版開發需要2.x 版的 Core Tools 等等。 如需詳細資訊,請參閱安裝 Azure Functions Core Tools

針對 Visual Studio Code 開發,您可能必須一併更新 azureFunctions.projectRuntime 的使用者設定,以符合所安裝工具的版本。 此設定也會更新函數應用程式建立期間所使用的範本和語言。 若要在中建立應用程式, ~3 請將 azureFunctions.projectRuntime 使用者設定更新為 ~3

Azure Functions 延伸模組執行時間設定

Maven 和 JAVA 應用程式

您可以藉由安裝在本機執行所需的 2.x 版核心工具 ,將 JAVA 應用程式從2.x 版遷移至3.x 版。 在確認您的應用程式正確地在2.x 版的本機上執行時,請更新應用程式的檔案, POM.xml 以將 FUNCTIONS_EXTENSION_VERSION 設定修改為 ~3 ,如下列範例所示:

<configuration>
    <resourceGroup>${functionResourceGroup}</resourceGroup>
    <appName>${functionAppName}</appName>
    <region>${functionAppRegion}</region>
    <appSettings>
        <property>
            <name>WEBSITE_RUN_FROM_PACKAGE</name>
            <value>1</value>
        </property>
        <property>
            <name>FUNCTIONS_EXTENSION_VERSION</name>
            <value>~3</value>
        </property>
    </appSettings>
</configuration>

繫結

從2.x 版開始,執行時間會使用新的系結擴充性 模型 ,提供下列優點:

  • 支援第三方繫結延伸模組。

  • 分開處理執行階段和繫結。 此變更可讓繫結延伸模組個別建立版本和發行。 舉例來說,您可以選擇升級至依賴較新版基礎 SDK 的延伸模組版本。

  • 較輕便的執行環境,執行階段只會知道及載入使用中的繫結。

除了 HTTP 和計時器觸發程序之後,所有繫結都必須以明確方式新增至函數應用程式專案,或在入口網站中註冊。 如需詳細資訊,請參閱註冊繫結延伸模組

下表顯示每個執行階段版本所支援的繫結。

此表顯示主要版本的 Azure Functions 執行階段中所支援的繫結:

類型 1.x 2.x 和更新版本1 觸發程序 輸入 輸出
Blob 儲存體
Azure Cosmos DB
Dapr3
Event Grid
事件中樞
HTTP 和 Webhook
IoT 中心
Kafka2
Mobile Apps
通知中樞
佇列儲存體
RabbitMQ2
SendGrid
服務匯流排
SignalR
表格儲存體
計時器
Twilio

1 從 2.x 版執行階段開始,必須註冊 HTTP 和計時器以外的所有繫結。 請參閱註冊繫結延伸模組

2 觸發程序在取用方案中不受支援。 需要執行階段驅動的觸發程序

3 僅在 Kubernetes、IoT Edge 和其他自我裝載模式中受到支援。

函數應用程式逾時持續時間

函數應用程式的逾時持續時間是由 host. json 專案檔中的 functionTimeout 屬性所定義。 下表顯示計畫和不同執行階段版本的預設和最大值 (以分鐘為單位):

計畫 執行階段版本 預設 最大值
耗用量 1.x 5 10
耗用量 2.x 5 10
耗用量 3.x 5 10
Premium 1.x 無限制 無限制
Premium 2.x 30 無限制
Premium 3.x 30 無限制
App Service 方案 1.x 無限制 無限制
App Service 方案 2.x 30 無限制
App Service 方案 3.x 30 無限制

注意

不論函數應用程式逾時設定為何,230 秒是 HTTP 觸發函式回應要求所能花費的最大時間量。 這是因為 Azure Load Balancer 的預設閒置逾時。 對於較長的處理時間,請考慮使用 Durable Functions 非同步模式延遲實際工作並傳回立即回應

後續步驟

如需詳細資訊,請參閱下列資源: