覆寫 Container Apps 上 Azure Functions 自動產生的 KEDA 調整規則

容器應用程式的功能通常以平台管理的縮放模式執行。 啟動時,Functions 主機會檢查觸發器(例如 HTTP、佇列或計時器),而 Azure 容器應用程式 會為應用程式版本建立對應的 KEDA 觸發器設定。

當您想要停用該自動映射,並在 properties.template.scale.allowScalingRuleOverride 中提供自行定義的縮放規則時,請設定 template.scale.rules

先決條件

  • 部署為 Functions 應用程式的 Container Apps 資源 (kind=functionapp)。
  • Azure CLI,具有對應用程式資源呼叫 az rest 的權限。
  • REST API 版本 2026-03-02-preview 或更新版本。

屬性定義

Property 類型 預設值 適用對象 API 版本
properties.template.scale.allowScalingRuleOverride boolean (可取消) false / null 僅適用於容器應用程式的功能(kind=functionapp 2026-03-02-preview 及更新版本

行為

覆寫值 尺度規則 行為
falsenull 自動生成 Azure 會根據發現的函式觸發器建立並管理 KEDA 規則。 使用者自編規則在此模式下會被封鎖。
true 由客戶定義 Azure 不會產生基於觸發器的規則。 你提供的規則用於規模決策。
true 且未提供任何規則 未提供 Azure 跳過基於觸發器的規則生成。 只有平台的基準 HTTP 調整器行為會保持作用中。

啟用覆寫並提供自訂調整規則

此範例從平台管理的擴展allowScalingRuleOverride=false()開始,接著切換到手動規則控制。 PATCH 請求包含一條 Azure Queue 規則和一條 HTTP 並發規則。

  1. 建立一個名為 patch-enable-override.json的 PATCH 主體檔案。

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": true,
            "rules": [
              {
                "name": "my-queue-rule",
                "custom": {
                  "type": "azure-queue",
                  "metadata": {
                    "queueName": "my-test-queue",
                    "queueLength": "20",
                    "connectionFromEnv": "AzureWebJobsStorage"
                  }
                }
              },
              {
                "name": "my-http-rule",
                "http": {
                  "metadata": {
                    "concurrentRequests": "50"
                  }
                }
              }
            ]
          }
        }
      }
    }
    
  2. 套用更新。

    az rest --method PATCH \
      --uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/containerApps/{appName}?api-version=2026-03-02-preview" \
      --headers "Content-Type=application/json" \
      --body @patch-enable-override.json
    

預期結果:

  • 不會為新修訂版本產生由觸發條件衍生的規則。
  • 自訂規則(my-queue-rulemy-http-rule)會附加在修訂版上。
  • 擴展行為現在遵循佇列深度(queueLength=20)與HTTP並發性(concurrentRequests=50)。

停用覆寫並還原為平台產生的規則

此範例會將手動設定的應用程式 allowScalingRuleOverride=true 恢復為平台管理的擴縮。

Important

allowScalingRuleOverride=false 為非空時,將 rules 設為某值的請求會遭到拒絕。 若要切換回來,請在同一個 PATCH 要求中傳送 rules: []

  1. 建立一個名為 patch-disable-override.json的 PATCH 主體檔案。

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": false,
            "rules": []
          }
        }
      }
    }
    
  2. 套用更新。

    az rest --method PATCH \
      --uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/containerApps/{appName}?api-version=2026-03-02-preview" \
      --headers "Content-Type=application/json" \
      --body @patch-disable-override.json
    

預期結果:

  • 自訂調整規則會被清除。
  • Azure 會從探索到的 Functions 觸發程序繼續建立調整規則。
  • 系統會產生新的修訂版本,套用平台管理的調整。

錯誤狀況

劇本 錯誤代碼 錯誤訊息
在非 Functions 應用程式上設定 allowScalingRuleOverride=truekind 不是 functionapp AllowScalingRuleOverrideNotApplicable AllowScalingRuleOverride 屬性僅適用於功能應用程式(kind = 'functionapp')。 它無法設定成其他容器應用程式類型。
在自訂縮放規則仍存在時設定 allowScalingRuleOverride=false FunctionAppCannotSetScaleRules 若已存在為避免意外刪除客戶自訂擴縮規則而設的非空規則,則無法切換為平台控制模式。 如果客戶想要平台自動管理,就必須在 scale 中明確設定 [] (空陣列)。