共用方式為


預估以使用量為基礎的成本

本文說明如何預估使用量及 Flex 使用量主控方案的方案成本。

Azure Functions 目前為您的函數應用程式提供四個不同的主控方案,每個方案都有自己的定價模式:

計劃 描述
耗用 您只支付函數應用程式執行時間的費用。 此方案包括每個訂用帳戶的免費授與
Flex 使用量方案 您須支付的費用來自函式在執行個體上執行的執行時間,以及任何「隨時可用」的執行個體。 執行個體會根據傳入事件數目動態地新增和移除。 也支援虛擬網路整合。
高級 提供與使用量方案相同的功能和調整機制,但具有增強的效能和虛擬網路整合。 成本是以您選擇的定價層為基礎。 若要深入了解,請參閱 Azure Functions 進階方案
專用 (App Service)
(基本層或更高層)
當您需要在專用 VM 或隔離中執行時,請使用自訂映像,或想要使用超量 App Service 方案容量。 使用一般 App Service 方案計費。 成本是以您選擇的定價層為基礎。

重要

Flex 使用量方案目前為預覽狀態。

您應一律選擇能為函式執行的功能、效能和成本需求提供最佳支援的方案。 若要深入了解,請參閱 Azure Functions 規模調整和主控

本文著重於使用量及 Flex 使用量方案,因為這些方案的計費取決於每個執行個體內的主動執行期間。

Durable Functions 也可以在這些方案中執行。 若要深入了解使用 Durable Functions 時的成本考量,請參閱 Durable Functions 計費

以使用量為基礎的成本

以使用量為基礎的成本計算方式 (包括免費授與) 取決於特定方案。 如需最新的成本和授與資訊,請參閱 Azure Functions 定價頁面

單一函數執行的執行「成本」是以 GB/秒為單位來測量。 執行成本的計算方式是將其記憶體使用量與其執行時間結合。 執行而產生較多成本的函數,就像耗用更多記憶體的函數。

請考慮函數所使用的記憶體數量維持不變的情況。 在此情況下,計算成本是簡單的乘法。 例如,假設您的函數在 3 秒內耗用 0.5 GB。 則執行成本是 0.5GB * 3s = 1.5 GB-seconds

因為記憶體使用量會隨著時間變更,所以計算基本上是一段時間內記憶體使用量的整數。 系統會定期取樣程序 (和子程序) 的記憶體使用量來執行此計算。 如定價頁面上所述,記憶體使用量會進位到最接近的 128 MB 貯體。 當您的程序使用 160 MB 時,您需要支付 256 MB 的費用。 計算會考慮並行,這是在相同的程序中執行多個並行函數。

注意

雖然執行成本並未直接考量 CPU 使用量,但會在影響函數執行時間時影響成本。

針對 HTTP 觸發的函數,如果您的函數程式碼在開始執行之前發生錯誤,則您不需要支付執行費用。 這表示 API 金鑰驗證或 App Service 驗證/授權功能所造成且來自平台的 401 回應不會計入執行成本。 同樣地,在函式處理要求之前,在平台中發生 5xx 狀態碼回應時,並不會計入這些回應。 當您的函程式碼開始執行之後,平台所產生的 5xx 回應仍會計算為執行,即使您的函式程式碼未引發錯誤也是一樣。

預估在任何方案中執行函數的整體成本時,請記住 Functions 執行階段會使用數個其他 Azure 服務,而這些服務會分別進行計費。 預估函數應用程式的定價時,您與其他 Azure 服務整合的任何觸發程序和繫結都需要建立並支付這些其他服務的費用。

針對使用量方案中所執行的函式,總成本是您函式的執行成本,加上頻寬和其他服務的成本。

預估函式應用程式和相關服務的整體成本時,請使用 Azure 定價計算機

相關成本 描述
儲存體帳戶 每個函數應用程式都需要您有相關聯的一般用途 Azure 儲存體帳戶,這會個別進行計費。 Functions 執行階段會在內部使用此帳戶,但您也可以將其用於儲存體觸發程序和繫結。 如果您沒有儲存體帳戶,則會在建立函數應用程式時為您建立儲存體帳戶。 若要深入了解,請參閱儲存體帳戶需求
Application Insights 函數依賴 Application Insights,為您的函數應用程式提供高效能監視體驗。 雖然並非必要,但您應該啟用 Application Insights 整合。 每個月都會包括免費遙測資料授與。 若要深入了解,請參閱 Azure 監視器定價頁面
網路頻寬 根據資料移動的方向和場景,您可能會產生資料傳輸的成本。 若要深入了解,請參閱頻寬定價詳細資料

影響執行時間的行為

函式的下列行為可能會影響執行時間:

  • 觸發程序和繫結:從函數繫結讀取輸入以及將輸出寫入其中所需的時間會計算為執行時間。 例如,當您的函數使用輸出繫結將訊息寫入至 Azure 儲存體佇列時,您的執行時間會包括將訊息寫入至佇列所花費的時間,而這包括在函數成本的計算中。

  • 非同步執行:函數等待非同步要求結果的時間會計入為執行時間 (在 C# 中為 await)。 GB/秒計算是根據函數的開始和結束時間,以及該期間內的記憶體使用量。 根據 CPU 活動,該時間發生的情況不會納入計算中。 您可以使用 Durable Functions,在非同步作業期間降低成本。 您不需要支付協調器函數中等候所花費的時間。

發票中,您可以檢視 [執行總計 - 函數] 和 [執行時間 - 函數] 的成本相關資料,以及實際計費成本。 不過,此發票資料是過去發票期間的每月彙總。

函數應用程式層級計量

若要更恰當地了解函數的成本影響,您可以使用 Azure 監視器來檢視函數應用程式目前產生的成本相關計量。

使用 Azure 監視器計量瀏覽器,以圖形格式檢視使用量方案函式應用程式的成本相關資料。

  1. Azure 入口網站中,瀏覽至您的函式應用程式。

  2. 在左側面板中,向下捲動至 [監視],然後選擇 [計量]

  3. 從 [計量] 選擇 [函數執行計數] 和 [彙總] 的 [加總]。 這會新增所選期間的執行計數總和至圖表。

    定義要新增至圖表的函式應用程式計量

  4. 選取 [新增計量],然後重複步驟 2-4,即可新增 [函數執行單位] 至圖表。

產生的圖表包含所選時間範圍中 (在此案例中為兩小時) 的兩個執行計量總計。

函式執行計數和執行單位的圖表

因為執行單位數目遠大於執行計數,所以圖表只會顯示執行單位。

此圖表顯示兩小時期間總計使用的 11.1 億 Function Execution Units (測量單位為 MB/毫秒)。 若要轉換成 GB/秒,請除以 1024000。 在此範例中,函數應用程式已使用 1110000000 / 1024000 = 1083.98 GB/秒。 假設您已使用任何免費授與的執行時間,即可採用此值,並乘以 Functions 定價頁面上目前的執行時間價格 (定價頁面會提供這兩小時的成本)。

函數層級計量

函數執行單位是執行時間與您記憶體使用量的組合,這樣會讓您難以了解記憶體使用量的計量。 記憶體資料不是目前可透過 Azure 監視器取得的計量。 不過,如果您想要最佳化應用程式的記憶體使用量,則可以使用 Application Insights 所收集的效能計數器資料。

如果您尚未這麼做,則請在函數應用程式中啟用 Application Insights。 啟用此整合之後,您可以在入口網站中查詢此遙測資料

您可以在 Azure 入口網站或 REST API 中使用 Azure 監視器計量瀏覽器來取得監視器計量資料。

決定記憶體使用量

在 [監視] 下,選取 [記錄 (分析)],並複製下列遙測查詢,然後將其貼入查詢視窗,再選取 [執行]。 此查詢會傳回每個取樣時間的總記憶體使用量。

performanceCounters
| where name == "Private Bytes"
| project timestamp, name, value

結果與下列範例類似:

時間戳記 [UTC] NAME value
9/12/2019, 1:05:14.947 AM 私用位元組 209,932,288
9/12/2019, 1:06:14.994 AM 私用位元組 212,189,184
9/12/2019, 1:06:30.010 AM 私用位元組 231,714,816
9/12/2019, 1:07:15.040 AM 私用位元組 210,591,744
9/12/2019, 1:12:16.285 AM 私用位元組 216,285,184
9/12/2019, 1:12:31.376 AM 私用位元組 235,806,720

決定持續時間

Azure 監視器會追蹤資源層級的計量,而這對於 Functions 來說就是函式應用程式。 Application Insights 整合會根據每個函式來發出計量。 以下是取得函式平均持續時間的範例分析查詢:

customMetrics
| where name contains "Duration"
| extend averageDuration = valueSum / valueCount
| summarize averageDurationMilliseconds=avg(averageDuration) by name
NAME averageDurationMilliseconds
QueueTrigger AvgDurationMs 16.087
QueueTrigger MaxDurationMs 90.249
QueueTrigger MinDurationMs 8.522

下一步