當你在 Azure 容器應用程式部署 Azure Functions 時,平台會自動將你的 Functions 觸發參數轉換成 KEDA 縮放設定。 這種轉換確保你的函式能根據來自各種事件來源的工作負載適當擴展。
縮放映射的運作方式
Azure Functions on Container Apps 使用 KEDA 來監控事件來源並擴展你的函式應用。 平台自動:
轉換函數參數:將函數觸發設定(從
host.json或觸發屬性)轉換成 KEDA 縮放器的元資料。套用縮放規則:利用轉換後的參數建立適當的 KEDA 縮放規則。
監控事件:KEDA 會根據這些規則持續監控您的事件來源。
擴展實例:根據工作負載自動調整容器實例的縮放。
以下章節將詳細說明每種觸發類型的具體參數映射。
縮放參數
以下章節將詳細說明 Azure Functions 的觸發參數如何映射到其對應的 KEDA 縮放器配置,針對每種支援的觸發類型。
Azure 儲存體佇列
下表展示了 Azure 儲存佇列觸發參數 如何映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | batchSize |
queueLength |
| 設定路徑 |
extensions.queues.batchSize (host.json) |
metadata.queueLength |
| 預設值 | 16 | 5 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
函式執行時擷取並平行處理的佇列訊息數量。 當處理的數字達到 時 newBatchThreshold,執行時會再取一批次。 每個函數最大並行訊息數為batchSize正。newBatchThreshold 設 batchSize 為 1 以消除並發,除非應用程式擴展到多個虛擬機。 最大值 batchSize 為 32。 |
將隊列長度的目標值傳給縮放器。 例如,若一個 pod 可處理 10 則訊息,則將隊列長度目標設為 10。 如果隊列中實際訊息數量為 30 則縮放為三個 pod。 |
平移邏輯
metadata.queueLength = extensions.queues.batchSize
Azure Service Bus (single dispatch)
下表顯示 Azure 服務匯流排的觸發參數 如何映射到 KEDA 的縮放器設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | maxConcurrentCalls |
messageCount |
| 設定路徑 |
extensions.serviceBus.maxConcurrentCalls (host.json) |
metadata.messageCount |
| 預設值 | 16 | 5 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
限制每個縮放實例的最大同時通話數。 對於多核心實例,最大值會乘以核心數。 此設定僅在 為假時 isSessionsEnabled 使用。 |
Azure 服務總線佇列或主題中可調整的活躍訊息數量。 |
平移邏輯
metadata.messageCount = extensions.serviceBus.maxConcurrentCalls
Azure Service Bus (sessions-based)
下表展示了 Azure Event Hubs 如何將參數 映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | maxMessageBatchSize |
messageCount |
| 設定路徑 |
extensions.serviceBus.maxMessageBatchSize (host.json) |
metadata.messageCount |
| 預設值 | 1000 | 5 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
| 每個函式呼叫在批次處理時傳遞的最大訊息數。 | Azure 服務總線佇列或主題中可調整的活躍訊息數量。 |
平移邏輯
metadata.messageCount = extensions.serviceBus.maxMessageBatchSize
Azure 事件中樞
下表展示了 Azure Event Hubs 如何將參數 映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | targetUnprocessedEventThreshold |
unprocessedEventThreshold |
| 設定路徑 |
extensions.eventHubs.targetUnprocessedEventThreshold (host.json) |
metadata.unprocessedEventThreshold |
| 預設值 | null | 64 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
| 每個函式實例期望的未處理事件數量。 用於基於目標的縮放。 | 觸發成長動作的平均目標值。 |
平移邏輯
metadata.unprocessedEventThreshold = extensions.eventHubs.targetUnprocessedEventThreshold
Apache Kafka
下表展示了 Apache Kafka 觸發參數 如何映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | LagThreshold |
lagThreshold |
| 設定路徑 | 函式觸發屬性 | metadata.lagThreshold |
| 預設值 | 1000 | 10 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
將此值作為 Kafka 觸發器中每個實例的目標執行數。 期望實例數量是根據總消費者延遲除以 LagThreshold計算得出的。 |
|
| 將此值作為總延遲(所有分割延遲總和)的目標值,以觸發縮放動作。 |
Example
[KafkaTrigger(
"BrokerList",
"topic",
ConsumerGroup = "$Default",
LagThreshold = 100)]
平移邏輯
metadata.lagThreshold = LagThreshold
Azure Cosmos DB
Azure Cosmos 資料庫的觸發器不會對應到 KEDA 縮放器。 改用自訂縮放。
Functions 觸發器設定每次函式呼叫收到的最大項目數量。 交易範圍保留給儲存程序。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | MaxItemsPerInvocation |
N/A |
| 設定路徑 | 函式觸發屬性 | N/A |
| 預設值 | 100 | N/A |
Example
[CosmosDBTrigger(
databaseName: "ToDoItems",
containerName: "Items",
Connection = "CosmosDBConnection",
MaxItemsPerInvocation = 100)]
HTTP 觸發器
HTTP 觸發器不會對應到 KEDA 縮放器。 相反地,請使用 Container Apps 內建的 HTTP 擴展功能或外部監控解決方案。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | maxConcurrentRequests |
N/A |
| 設定路徑 |
extensions.http.maxConcurrentRequests (host.json) |
N/A |
| 預設值 | 100(消耗)、-1(高級/專用) | N/A |
Blob 儲存體觸發程序
下表展示了 Azure Blob Storage 觸發參數 如何映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | maxDegreeOfParallelism |
blobCount |
| 設定路徑 |
extensions.blobs.maxDegreeOfParallelism (host.json) |
metadata.blobCount |
| 預設值 | 8 ×可用核心數量 | 5 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
| 設定函式應用程式中所有 blob 觸發函式允許的同時呼叫次數。 最低價值:1. | 觸發成長動作的平均目標值。 (預設:5,可選) |
平移邏輯
metadata.blobCount = extensions.blobs.maxDegreeOfParallelism
事件方格
Azure Event Grid 的觸發參數不會對應到 KEDA 縮放器。
事件網格觸發器使用網路鉤子 HTTP 請求。 你要用和 HTTP 觸發器相同的 host.json 設定來設定這個請求。 這些設定控制資源管理的平行執行。
RabbitMQ 觸發程序
下表顯示 RabbitMQ 觸發參數 如何映射到 KEDA 縮放器的設定值。
| 參數 | 功能配置 | KEDA 配置 |
|---|---|---|
| 參數名稱 | prefetchCount |
value |
| 設定路徑 |
extensions.rabbitMQ.prefetchCount (host.json) |
metadata.value |
| 預設值 | 30 | 100.50 |
| 函數觸發描述 | KEDA 縮放器描述 |
|---|---|
| 接收端可同時請求與快取的訊息數量。 | 訊息待辦清單或發佈/安全速率來觸發縮放。 在 QueueLength 模式下,該值代表縮放的目標佇列長度。 |
平移邏輯
metadata.value = extensions.rabbitMQ.prefetchCount