在 Azure 中建立函數應用程式時,您必須選擇應用程式的主控選項。 Azure 為您的函式程式碼提供下列主控選項:
| 裝載選項 | 服務 | 可用性 | 容器支援 |
|---|---|---|---|
| 彈性使用量方案 (部分機器翻譯) | Azure Functions | 正式上市 (GA) | None |
| 進階方案 (部分機器翻譯) | Azure Functions | GA | Linux |
| 專用方案 (部分機器翻譯) | Azure Functions | GA | Linux |
| 容器應用程式 (部分機器翻譯) | Azure 容器應用程式 | GA | Linux |
| 使用量方案 (部分機器翻譯) | Azure Functions | Windows - 一般發行版 Linux - 已淘汰 |
None |
這很重要
在 2028 年 9 月 30 日之後,在取用方案中在 Linux 上裝載函式應用程式的選項將會淘汰。 若要避免中斷,請在該日期之前將在 Linux 上執行的現有消費方案應用程式移轉至 彈性消費方案 。 在取用方案中在 Windows 上執行的應用程式不會受到此變更的影響。 如需詳細資訊,請參閱 Linux 取用方案淘汰通知。
Azure Functions 主控選項由 Linux 和 Windows 虛擬機器上的 Azure App Service 基礎結構提供支援。 您選擇的主控選項會決定下列行為:
- 調整函式應用程式的方式。
- 每個函式應用程式執行個體可用的資源。
- 支援進階功能,例如 Azure 虛擬網路連線。
- 支援 Linux 容器。
您選擇的方案也會影響執行函式程式碼的成本。 如需詳細資訊,請參閱帳單。
本文提供各種主控選項之間的詳細比較。 若要深入了解如何在 Linux 容器中執行和管理函式程式碼,請參閱 Azure Functions 中的 Linux 容器支援。
方案概觀
以下彙整了各種 Azure Functions 主控選項的優點:
| 選項 | 優點 |
|---|---|
| 彈性使用量方案 (部分機器翻譯) | 體驗快速的水平擴展,享有靈活的計算選項、虛擬網路整合,以及依使用量計費的無伺服器架構。 在彈性使用量方案中,函式執行個體會根據設定的每個執行個體並行、傳入事件和每個函式工作負載動態向外延展 (最多 1,000 個),以達到最佳效率。 在下列情況下,請考慮彈性取用方案: ✔ 您需要一個無伺服器主機來儲存函數程式碼,只需為隨需執行付費。 ✔ 您需要虛擬網路連線,才能安全地存取 Azure 資源。 ✔ 您的工作負載是變動的,可能從沒有活動變成需要快速、事件驅動的調整。 ✔ 您希望透過記憶體大小(512 MB、2,048 MB 或 4,096 MB)來自訂計算資源,並利用一個或多個預先配置(隨時可用)的執行個體來減少冷啟動時間。 |
| 進階方案 (部分機器翻譯) | 使用預先準備的背景工作角色 (這些背景工作角色在閒置後會無延遲地執行應用程式) 在功能更強大的執行個體上執行,並連線虛擬網路,同時根據需求自動調整。 下列情況請考慮 Azure Functions 進階方案: ✔ 您的函數應用程式會不間斷執行,或幾乎是不間斷執行。 ✔ 您想要進一步控制執行個體,並想要在具有事件驅動調整的相同方案中部署多個函數應用程式。 ✔ 您有大量的小型執行和高執行帳單,但使用量方案提供低 GB 秒。 ✔ 您需要更多 CPU 或記憶體選項,超出使用量方案所能提供。 ✔ 您的程式碼執行時間較長,超出使用量方案允許的上限執行時間。 ✔ 您需要虛擬網路連線,才能安全地存取 Azure 資源。 ✔ 您想提供自訂 Linux 映像執行函式。 |
| 專用方案 (部分機器翻譯) | 以 App Service 方案費率,定期在 App Service 方案中執行函式。 最適合無法使用 Durable Functions 長時間執行的案例。 下列情況請考慮使用 App Service 方案︰ ✔ 您現有使用量過低的虛擬機器已在執行其他 App Service 執行個體。 ✔ 您必須擁有完全可預測的計費,或需要手動調整執行個體。 ✔ 您想要在相同方案上執行多個 Web 應用程式和函數應用程式 ✔ 您需要存取較大的計算大小選項。 ✔ App Service 環境 (ASE) 提供的完整計算隔離和安全網路存取。 ✔ 記憶體使用量和規模非常高 (ASE)。 |
| 容器應用程式 (部分機器翻譯) | 在 Azure 容器應用程式所裝載的完全受控環境中建立和部署容器化函數應用程式。 使用 Azure Functions 程式設計模型來建置事件驅動、無伺服器、雲端原生函數應用程式。 將函式與其他微服務、API、網站和工作流程一起執行為容器裝載的程式。 在下列情況下,請考慮在容器應用程式上裝載函式: ✔ 您想要控制容器映像,並想要使用函式程式碼封裝自訂程式庫,以支援企業營運應用程式。 ✔ 您必須將程式碼執行從內部部署或舊版應用程式移轉至在容器中執行的雲端原生微服務。 ✔ 當您想要避免管理 Kubernetes 叢集和專用計算的額外負荷和複雜度時。 ✔ 您的函式需要專用 GPU 計算資源所提供的高端處理能力。 |
| 使用量方案 (部分機器翻譯) | 僅需針對您的函式執行時的計算資源付費 (隨用隨付),且會在 Windows 上自動調整。 在消費計劃中,函數實例會根據傳入事件的數量動態新增和移除。 在下列情況下,可以考慮消費計劃: ✔ 您依賴 Windows,例如,使用 v1 運行時間、完整的 .NET Framework 或 Windows 特定功能,例如某些 PowerShell 模組 ✔ 您想要無伺服器計費模型,並且僅在函數執行時付費。 |
本文中其餘的表格會根據各種功能與行為比較主控選項。
作業系統支援
下表顯示主控選項的作業系統支援。
| Hosting | Linux1 部署 | Windows2 部署 |
|---|---|---|
| 彈性使用量方案 (部分機器翻譯) |
✅ 僅限程式碼 ❌ 容器 (不支援) |
❌ 不支援 |
| 進階方案 (部分機器翻譯) |
✅ 僅限程式碼 ✅ 容器 |
✅ 僅限程式碼 |
| 專用方案 (部分機器翻譯) |
✅ 僅限程式碼 ✅ 容器 |
✅ 僅限程式碼 |
| 容器應用程式 (部分機器翻譯) | ✅ 僅限容器 | ❌ 不支援 |
| 消費計劃3 |
✅ 僅限程式碼 (已淘汰) ❌ 容器 (不支援) |
✅ 僅限程式碼 |
- Linux 是 Python 執行階段堆疊唯一支援的作業系統。
- Windows 部署為僅限程式碼。 Functions 目前不支援 Windows 容器。
- 在取用方案中在 Linux 上執行應用程式的能力計劃即將於 2028 年 9 月 30 日淘汰。 如需詳細資訊,請參閱 取用方案。
函數應用程式逾時期間
函式應用程式內的函式逾時持續時間是由 functionTimeout (部分機器翻譯) 專案檔中的 屬性所定義。 此屬性特別適用於函式執行。 在觸發程序啟動函式執行之後,函式必須在逾時期間內傳回/回應。 為了避免逾時, 編寫健壯的函數非常重要。 如需詳細資訊,請參閱改善Azure Functions 效能語可靠性。
下表顯示特定方案的預設值和最大值 (以分鐘為單位):
| 計畫 | 預設 | 最大值 1 |
|---|---|---|
| 彈性使用量方案 (部分機器翻譯) | 30 | 無限制2 |
| 進階方案 (部分機器翻譯) | 304 | 無限制2 |
| 專用方案 (部分機器翻譯) | 304 | 無限制3 |
| 容器應用程式 (部分機器翻譯) | 30 | 無限制5 |
| 使用量方案 (部分機器翻譯) | 5 | 10 |
- 不論函式應用程式的逾時設定為何,230 秒是 HTTP 所觸發的函式能用來回應要求的最大時間量。 這是因為 Azure Load Balancer 的預設閒置逾時 (部分內容可能是機器或 AI 翻譯)。 對於較長的處理時間,請考慮使用 Durable Functions 非同步模式或延遲實際工作並傳回立即回應。
- 沒有強制執行逾時期間上限。 不過,對於彈性使用量和進階方案,在縮減期間 (部分內容可能是機器或 AI 翻譯) 提供給函數執行的寬限期為 60 分鐘,而在平台更新期間則會提供 10 分鐘的寬限期。
- 需要將 App Service 方案設定為 Always On。 在平台更新期間會提供 10 分鐘的寬限期。
- Functions 主機執行階段 1.x 版的預設逾時無限制。
- 當複本數目下限設定為零時,預設逾時會取決於應用程式中使用的特定觸發程式。
此表格中的值假設 Azure Functions 主機程式已啟動且正確執行。 對於也要啟動的語言特定的背景工作處理序,有最大允許的 60 秒逾時限制。 背景工作處理序啟動逾時目前無法設定。
語言支援
如需 Functions 中目前原生語言堆疊支援的詳細資訊,請參閱 Azure Functions 中的支援語言。
調整
下表比較各種主控方案的縮放行為。
除非另有指示,否則執行個體數目上限是根據每個函數應用程式 (取用) 或每個方案 (進階/專用) 提供的。
| 計畫 | 擴增 | 上限 # 個執行個體 |
|---|---|---|
| 彈性使用量方案 (部分機器翻譯) | 快速事件驅動擴展決策是根據每個函數計算的,稱為 每個函數擴展,這提供了一種更確定的方式來擴展應用程式中的函數。 除了 HTTP、Blob 儲存體 (事件方格) 和 Durable Functions 例外,應用程式中的所有其他函式觸發程序類型都會在獨立執行個體上進行調整。 應用程式中的所有 HTTP 觸發程序會隨著相同執行個體上的群組一起調整,如同所有 Blob 儲存體 (事件方格) 觸發程序一樣。 所有 Durable Functions 觸發程序也會一起共用執行個體和調整。 | 10001 |
| 進階方案 (部分機器翻譯) | 事件驅動。 自動調整規模,即使在高負載期間也會。 根據函式被觸發的事件數目,Azure Functions 基礎結構會新增更多的 Functions 主機執行個體,然後調整 CPU 和記憶體資源。 |
Windows:1006 Linux: 20-1002,6 |
| 專用方案 (部分機器翻譯) | 手動/自動調整 | 10-303 100 (日月光) |
| 容器應用程式 (部分機器翻譯) | 事件驅動。 自動調整規模,即使在高負載期間也會。 根據函式被觸發的事件數目,Azure Functions 基礎結構會新增更多的 Functions 主機執行個體,然後調整 CPU 和記憶體資源。 | 300-10004 |
| 使用量方案 (部分機器翻譯) | 事件驅動。 根據事件來源自動調整規模。 函數基礎結構會根據傳入觸發事件的數目,新增更多函數主機的執行個體,以調整資源。 |
Windows:200 Linux:1005 |
- 彈性使用量方案具有區域訂用帳戶配額,可限制指定區域中所有執行個體的總記憶體使用量。 如需詳細資訊,請參閱 區域訂用帳戶記憶體配額。 Flex Consumption 方案目前僅支援 Linux。
- 在某些區域中,進階方案上的 Linux 應用程式可以縮放為 100 個執行個體。 如需詳細資訊,請參閱進階方案一文。
- 如需各種 App Service 方案選項的特定限制,請參閱 App Service 方案限制。
- 在容器應用程式上,預設值為 10 個執行個體,但您可以設定最大複本數目,其整體上限為 1000。 只要有足夠的核心配額可用,就會接受此設定。 如需詳細資訊,請參閱 Azure 容器應用程式的配額 (部分機器翻譯)。 當您從 Azure 入口網站建立函式應用程式時,限制為 300 個執行個體。
- 在擴增期間,對於取用方案上的 Linux 應用程式,目前有每小時每個訂用帳戶 500 個執行個體的限制。
- 針對私人端點受限制的 http 觸發程序,相應放大限制為最多 20 個執行個體。
冷啟動行為
| 計畫 | 詳細資料 |
|---|---|
| 彈性使用量方案 (部分機器翻譯) | 即使在調整至零時,也能改善冷啟動的效能。 支援 隨時準備就緒的執行個體 ,以進一步減少佈建新執行個體時的延遲。 |
| 進階方案 (部分機器翻譯) | 支援一律就緒執行個體,讓您維護一或多個永久暖執行個體,以避免冷啟動。 |
| 專用方案 (部分機器翻譯) | 在專用方案中執行時,Functions 主機可依指定執行個體數目持續執行,意即冷啟動其實不是問題。 |
| 容器應用程式 (部分機器翻譯) | 根據最低複本數目: • 設為零時:閒置時應用程式可以縮放為零,且啟動時部分要求可能會出現額外的延遲。 設定為一或多個時:主機處理序會持續執行,這表示冷啟動不是問題。 |
| 使用量方案 (部分機器翻譯) | 閒置時應用程式可以縮放為零,亦即啟動時部分要求可能會出現額外的延遲。 使用量方案確實有經過部分最佳化處理,有助減少冷啟動時間,包括從預先準備的預留位置函式 (已有主機) 及執行的語言程序進行提取。 |
服務限制
| 資源 | 彈性使用量方案 | 進階方案 | 專用方案/ASE | 容器應用程式 | 使用量方案 |
|---|---|---|---|---|---|
| 預設逾時期間 (最小值) | 30 | 30 | 301 | 3016 | 5 |
| 最大逾時期間 (最小值) | 無限制9 | 無限制9 | 無限制2 | 無限制17 | 10 |
| 連出連線上限 (每個執行個體) | 無限制 | 無限制 | 無限制 | 無限制 | 600 個作用中 (總計 1200) |
| 要求大小上限 (MB)3 | 210 | 210 | 210 | 210 | 210 |
| 查詢字串長度上限3 | 4096 | 4096 | 4096 | 4096 | 4096 |
| 要求 URL 長度上限3 | 8192 | 8192 | 8192 | 8192 | 8192 |
| 每個執行個體的 ACU | 210-840 | 100-840/210-25010 | 不定 | 100 | 視情況而異 |
| 記憶體上限 (每個執行個體的 GB) | 414 | 3.5-14 | 1.75-256/8-256 | 不定 | 1.5 |
| 實例計數上限 (Windows |Linux)15 | n/a |1000 | 20-100 | 10-30 (100 ASE)11 | 300-100018 | 200 |100 |
| 每個方案的函數應用程式13 | 1 | 100 | 無限制4 | 無限制4 | 100 |
| App Service 方案 | 不適用 | 每個資源群組 100 個 | 每個資源群組 100 個 | 不適用 | 每個區域 100 個 |
| 每個應用程式的部署位置12 | 不適用 | 3 | 1-2011 | 不支援 | 2 |
| 儲存體 (暫存)5 | 0.8 GB | 21-140 GB | 11-140 GB | 不適用 | 0.5 GB |
| 儲存體 (永續性) | 0 GB7 | 250 GB | 10-1000 GB11 | 不適用 | 1 GB6,7 |
| 每個應用程式的自訂網域 | 258 | 500 | 500 | 不支援 | 5008 |
| 自訂網域 TSL/SSL 支援 | 包含無限制的 SNI SSL 和一個 IP SSL 連線 | 包含無限制的 SNI SSL 和一個 IP SSL 連線 | 包含無限制的 SNI SSL 和一個 IP SSL 連線 | 不支援 | 包含無限制的 SNI SSL 連線 |
服務限制的注意事項:
- 根據預設,App Service 方案中 Functions 1.x 執行階段的逾時不受限制。
- 需要將 App Service 方案設定為 Always On。 以標準費率付費。 平台更新期間,HTTP 觸發函式可享有 10 分鐘的寬限期,其他觸發則不然。
- 這些限制設定於主機。
- 您可以主控的實際函數應用程式數目,會視應用程式的活動、電腦執行個體的大小,及對應的資源使用率而定。
- 儲存體限制是在暫存儲存體中相同 App Service 方案中所有應用程式的內容總大小。 Linux 上的使用量方案目前的儲存體為 1.5 GB。
- 使用量方案對永續性儲存體會使用 Azure 檔案儲存體共用。 當您提供自己的 Azure 檔案儲存體共用時,具體的共用大小限制取決於您為 WEBSITE_CONTENTAZUREFILECONNECTIONSTRING 設定的儲存體帳戶。
- 在 Linux 上,您必須明確掛接自己的 Azure 檔案儲存體共用。
- 當您的函數應用程式裝載於使用量方案時,僅支援 CNAME 選項。 對於進階方案或 App Service 方案中的函式應用程式,您可以使用 CNAME 或 A 記錄對應自訂網域。
- 沒有強制執行逾時期間上限。 不過,在縮減期間提供給函式執行的寬限期為 60 分鐘,在平台更新期間則為 10分鐘。
- 背景工作角色是裝載客戶應用程式的角色。 背景工作角色有三個固定大小:一個 vCPU/3.5 GB RAM、兩個 vCPU/7 GB RAM、四個 vCPU/14 GB RAM。
- 如需詳細資料,請參閱 App Service 限制。
- 包括生產位置。
- 在指定的訂用帳戶中,目前有 5,000 個函數應用程式的限制。
- Flex Consumption 方案實例大小目前定義為 512 MB、2,048 MB 或 4,096 MB。 如需詳細資訊,請參閱執行個體記憶體。
- 如需詳細資訊,請參閱裝載比較文章中的 規模。
- 當複本數目下限設定為零時,預設逾時會取決於應用程式中使用的特定觸發程式。
- 當複本數目下限設定為一或多個時。
網路功能
| 功能 | 彈性使用量方案 | 使用量方案 | 進階方案 | 專用方案/ASE | 容器應用程式1 (部分機器翻譯) |
|---|---|---|---|---|---|
| 輸入 IP 限制 | ✔ | ✔ | ✔ | ✔ | ✔ |
| 輸入私人端點 | ✔ | ✔ | ✔ | ||
| 虛擬網路整合 | ✔ | ✔2 | ✔3 | ✔ | |
| 輸出 IP 限制 | ✔ | ✔ | ✔ | ✔ |
- 如需詳細資訊,請參閱 Azure 容器應用程式環境中的網路功能。
- 使用虛擬網路觸發程序時有特殊考量。
- 只有專用/ASE 方案支援需要閘道的虛擬網路整合。
計費
| 計畫 | 詳細資料 |
|---|---|
| 彈性使用量方案 (部分機器翻譯) | 計費是根據執行次數、主動執行函式時的執行個體記憶體,加上任何一律就緒執行個體的成本。 如需詳細資訊,請參閱彈性使用量方案計費。 |
| 進階方案 (部分機器翻譯) | 進階方案以預熱的所需執行個體使用的核心秒數和記憶體為基礎。 每個方案至少一個執行個體必須一直暖待命。 此方案提供最可預測的定價。 |
| 專用方案 (部分機器翻譯) | App Service 方案中的函式應用程式,與其他 App Service 資源 (例如 Web 應用程式) 支付的費用相同。 針對 ASE,每月的固定費率涵蓋基礎結構,而且不因環境的大小變更。 每個 App Service方案 vCPU 也有成本。 ASE 中裝載的所有應用程式都會位於隔離價格 SKU 中。 如需詳細資訊,請參閱 ASE 概觀文章。 |
| 容器應用程式 (部分機器翻譯) | Azure 容器應用程式中的計費是以您的方案類型為依據。 如需詳細資訊,請參閱在 Azure 容器應用程式中的帳單。 |
| 使用量方案 (部分機器翻譯) | 您只需按照函式執行的時間付費。 帳單是根據執行數目、執行時間以及使用的記憶體。 |
如需動態主控方案 (使用量、彈性使用量和進階) 之間的直接成本比較,請參閱 Azure Functions 定價頁面。 關於各種專用方案選項的定價,請參閱 App Service 定價頁面。 如需容器應用程式主控的定價,請參閱 Azure 容器應用程式定價。
在現有資源群組中建立新函數應用程式的限制
在某些情況下,嘗試在現有資源群組中建立函數應用程式的新主控方案時,您可能會收到下列其中一個錯誤:
- 此資源群組中不允許定價層
- 資源群組 <resource_group_name> 中無法使用 <SKU_name> 背景工作角色
這可能會在符合下列條件時發生:
- 您可以在已包含另一個函數應用程式或 Web 應用程式的現有資源群組中建立函數應用程式。 例如,Linux 使用量應用程式不支援與 Linux 專用或 Linux 進階方案相同的資源群組。
- 您的新函數應用程式會建立在與先前應用程式相同的區域中。
- 先前的應用程式與新的應用程式在某個方面不相容。 此錯誤可能會在 SKU 或作業系統之間或因其他平台層級功能 (例如可用性區域支援) 而發生。
發生此情況的原因是建立時函數應用程式和 Web 應用程式方案對應至不同資源集區的方式。 不同的 SKU 需要一組不同的基礎結構功能。 當您在資源群組中建立應用程式時,會將該資源群組對應並指派給特定資源集區。 如果您嘗試在該資源群組中建立另一個方案,而所對應的集區沒有所需的資源,便會發生此錯誤。
發生此錯誤時,請改為在新的資源群組中建立函數應用程式和主控方案。