Azure Functions 裝載選項

當您在 Azure 中建立函數應用程式時,您必須為您的應用程式選擇主控方案。 有三種基本的主控方案可用 Azure Functions:取用方案進階版方案,以及專用 (App Service) 方案。 所有主控方案都已在 Linux 和 Windows 虛擬機器上正式推出 (GA) 。

您選擇的主控方案會指定下列行為:

  • 調整函數應用程式的方式。
  • 每個函數應用程式實例可用的資源。
  • 支援先進的功能,例如 Azure 虛擬網路連線能力。

本文提供各種主控方案的詳細比較,以及以 Kubernetes 為基礎的裝載

注意

如果您選擇將函式裝載于 Kubernetes 叢集中,請考慮使用 已啟用 Azure Arc 的 Kubernetes叢集。 在啟用 Azure Arc 的 Kubernetes 叢集上裝載目前為預覽狀態。 若要深入瞭解,請參閱 Azure Arc 上的 App Service、函數和 Logic Apps

計畫的總覽

以下是函式的三個主要主控方案的優點摘要:

計畫 優點
使用情況方案 當您的函式執行時,自動調整規模並只支付計算資源的費用。

在取用方案中,會根據傳入事件的數目,動態新增和移除函式主機的實例。

✔預設主控方案。
✔只有在您的函式執行時才需付費。
✔會自動調整規模,即使在高負載期間也一樣。
進階方案 使用預先準備就緒的背景工作角色,以執行應用程式,並在閒置後無延遲、在更強大的實例上執行,並連接到虛擬網路,以根據需求自動調整規模。

在下列情況下,請考慮 Azure Functions 進階版計畫:

✔您的函式應用程式會持續執行,或幾乎持續執行。
✔您有大量的小型執行和高執行費用,但取用方案中有低 GB 的秒數。
✔您需要的 CPU 或記憶體選項比取用方案所提供的更多。
✔您的程式碼所需的執行時間,超過取用方案允許的執行時間上限。
✔您需要使用方式方案中無法使用的功能,例如虛擬網路連線能力。
✔您想要提供自訂的 Linux 映射,以在其上執行您的功能。
專用方案 以一般 App Service 方案費率在 App Service 方案內執行您的函式。

適用于無法使用 Durable Functions 的長時間執行案例。 在下列情況下,請考慮 App Service 方案:

✔您的現有、使用量過低的 Vm 已在執行其他 App Service 實例。
需要✔預測規模調整和成本。

本文中的比較表格也包含下列裝載選項,可提供執行函式應用程式的最高控制和隔離量。

裝載選項 詳細資料
ASE App Service 環境 (ASE) 是一項 App Service 功能,可提供完全隔離和專用的環境,以安全地大規模執行 App Service 應用程式。

Ase 適用于需要下列需求的應用程式工作負載:

✔非常高的規模。
✔完整的計算隔離和安全的網路存取。
✔高記憶體使用量。
Kubernetes
(直接
Azure Arc)
Kubernetes 提供在 Kubernetes 平臺上執行的完全隔離且專用的環境。

Kubernetes 適用于需要下列各項的應用程式工作負載:
✔自訂的硬體需求。
✔隔離和安全的網路存取。
✔能夠在混合式或多重雲端環境中執行。
✔與現有的 Kubernetes 應用程式和服務一起執行。

本文中其餘的表格會比較各種特性和行為的計畫。 如需動態主控方案之間的成本比較 (耗用量和進階版) ,請參閱Azure Functions 定價頁面。 如需各種專用方案選項的定價,請參閱 App Service 定價頁面

作業系統/執行時間

下表顯示裝載方案的作業系統和語言支援。

Linux1
僅限程式碼
Windows2
僅限程式碼
Linux1、3
Docker 容器
使用情況方案 .NET Core 3.1
.NET 5.0
JavaScript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
TypeScript
不支援
進階方案 .NET Core 3.1
.NET 5.0
JavaScript
Java
Python
TypeScript
.NET Core
.NET 5.0
JavaScript
Java
PowerShell Core
TypeScript
.NET Core
Node.js
Java
PowerShell Core
Python
TypeScript
專用方案 .NET Core 3.1
.NET 5.0
JavaScript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
TypeScript
.NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
Python
TypeScript
ASE .NET Core 3.1
.NET 5.0
JavaScript
Java
Python
TypeScript
.NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
TypeScript
.NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
Python
TypeScript
Kubernetes (direct) n/a n/a .NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
Python
TypeScript
Azure Arc (預覽) .NET Core 3.1
.NET 5.0
JavaScript
Java
Python
TypeScript
n/a .NET Core 3.1
.NET 5.0
JavaScript
Java
PowerShell Core
Python
TypeScript

1 Linux 是 Python 執行時間堆疊唯一支援的作業系統。
2 Windows 是 PowerShell 執行時間堆疊唯一支援的作業系統。
3 Linux 是 Docker 容器唯一支援的作業系統。

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

函數應用程式的逾時持續時間是由 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 非同步模式延遲實際工作並傳回立即回應

調整

下表比較各種主控方案的縮放行為。

計畫 擴增 最大實例數目
使用情況方案 事件驅動。 自動調整規模,即使在高負載期間也會。 Azure Functions 基礎結構會根據傳入的觸發程式事件數目,新增其他的函式主機實例來調整 CPU 和記憶體資源。 200
進階方案 事件驅動。 自動調整規模,即使在高負載期間也會。 Azure Functions 基礎結構會根據觸發函式的事件數目,新增函式主機的其他實例,以調整 CPU 和記憶體資源。 100
專用方案1 手動/自動調整 10-20
ASE1 手動/自動調整 100
Kubernetes 使用 KEDAKubernetes 叢集的事件驅動自動調整。 依叢集而異      

1 針對各種 App Service 方案選項的特定限制,請參閱 App Service 方案限制

冷啟動行為

計畫 詳細資料
取用   方案 當閒置時,應用程式可能會調整為零,表示某些要求可能會在啟動時產生額外的延遲。 取用方案有一些優化有助於減少冷開始時間,包括從已執行函式主機和語言進程的預先準備就緒預留位置函式中提取。
進階方案 永久暖實例,以避免任何冷啟動。
專用方案 在專用方案中執行時,函式主機可以連續執行,這表示冷啟動不是真正的問題。
ASE 在專用方案中執行時,函式主機可以連續執行,這表示冷啟動不是真正的問題。
Kubernetes 根據 KEDA 設定,可以設定應用程式以避免冷啟動。 如果設定為調整為零,則會對新事件進行冷啟動。

服務限制

資源 取用方案 進階方案 專用方案 ASE Kubernetes
預設逾時持續時間 (分鐘) 5 30 301 30 30
最大逾時持續時間 (分鐘) 10 無限制7 無限制2 無限制 無限制
連出連線上限 (每個執行個體) 600 個作用中 (總計 1200) 無限制 無限制 無限制 無限制
要求大小上限 (MB)3 100 100 100 100 取決於叢集
查詢字串長度上限3 4096 4096 4096 4096 取決於叢集
要求 URL 長度上限3 8192 8192 8192 8192 取決於叢集
每個執行個體的 ACU 100 210-840 100-840 210-2508 AKS 定價
記憶體上限 (每個執行個體的 GB) 1.5 3.5-14 1.75-14 3.5 - 14 支援任何節點
最大實例計數 200 1009 因 SKU10而異 10010 取決於叢集
每個方案的函式應用程式 100 100 無限制4 無限制 無限制
App Service 方案 每個區域 100 個 每個資源群組 100 個 每個資源群組 100 個 - -
儲存體5 5 TB 250 GB 50-1000 GB 1 TB n/a
每個應用程式的自訂網域 5006 500 500 500 n/a
自訂網域 SSL 支援 包含無限制的 SNI SSL 連線 包含無限制的 SNI SSL 和 1 個 IP SSL 連線 包含無限制的 SNI SSL 和 1 個 IP SSL 連線 包含無限制的 SNI SSL 和 1 個 IP SSL 連線 n/a

1根據預設,App Service 方案中 Functions 1.x 執行階段的逾時不受限制。
2 需要將 App Service 方案設定為 Always On。 以標準費率付費。
3 這些限制設定於主機
4 您可以裝載的實際函式應用程式數目,會視應用程式的活動、電腦執行個體的大小,及對應的資源使用率而定。
5 儲存體限制是在暫存儲存體中相同 App Service 方案中所有應用程式的內容總大小。 取用方案會使用 Azure 檔案儲存體作為暫存儲存體。
6 當您的函式應用程式裝載於取用方案時,僅支援 CNAME 選項。 對於進階方案App Service 方案中的函式應用程式,您可以使用 CNAME 或 A 記錄對應自訂網域。
7 保證最多60 分鐘。
8背景工作角色是裝載客戶應用程式的角色。 背景工作角色可以三個固定的大小提供:一個 vCPU/3.5 GB RAM;兩個 vCPU/7 GB 的 RAM;四個 vCPU/14 GB RAM。
9 在高階方案的 Linux 上執行時,您目前的限制為20個實例。
10 如需詳細資料,請參閱 App Service 限制

網路功能

功能 取用方案 進階方案 專用方案 ASE Kubernetes
輸入 IP 限制和私人網站存取 ✅是 ✅是 ✅是 ✅是 ✅是
虛擬網路整合 ❌否 ✅是 (區域性) ✅是 (區域性和閘道) ✅是 ✅是
虛擬網路觸發程序 (非 HTTP) ❌否 ✅是 ✅是 ✅是 ✅是
混合式連線 (僅限 Windows) ❌否 ✅是 ✅是 ✅是 ✅是
輸出 IP 限制 ❌否 ✅是 ✅是 ✅是 ✅是

計費

計畫 詳細資料
使用情況方案 您只需針對函式執行的時間付費。 帳單是根據執行數目、執行時間以及使用的記憶體。
進階方案 進階版計畫是根據所需和預先準備就緒的實例所使用的核心秒數和記憶體。 每個方案至少有一個實例必須隨時保持暖。 此方案提供最容易預測的定價。
專用方案 如同針對其他 App Service 資源(例如 web 應用程式),您會在 App Service 方案中針對函數應用程式支付相同的費用。
App Service Environment (ASE) ASE 的固定每月費率會支付基礎結構,且不會隨著 ASE 的大小而變更。 每 App Service 計畫 vCPU 也會產生費用。 ASE 中裝載的所有應用程式都會位於隔離價格 SKU 中。
Kubernetes 您只需支付 Kubernetes 叢集的成本;函數沒有額外的計費。 您的函式應用程式會以應用程式工作負載的形式在您的叢集上執行,就像一般的應用程式一樣。

下一步