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