覆盖容器应用中 Azure Functions 的自动生成 KEDA 缩放规则

容器应用上的函数通常以平台管理的缩放模式运行。 启动时,Functions 主机会检查触发器(例如 HTTP、队列或计时器),Azure 容器应用为应用修订创建匹配的 KEDA 触发器配置。

当您想要禁用自动映射并在 properties.template.scale.allowScalingRuleOverride 中提供您自己的缩放规则时,请设置 template.scale.rules

先决条件

  • 部署为函数应用的容器应用资源 (kind=functionapp)。
  • 具有针对该应用资源调用 az rest 权限的 Azure CLI。
  • REST API 版本 2026-03-02-preview 或更高版本。

属性定义

资产 类型 默认 适用对象 API 版本
properties.template.scale.allowScalingRuleOverride boolean (可为 null) false / null 仅限容器应用上的函数 (kind=functionapp 2026-03-02-preview 及更高版本

Behavior

覆盖值 比例尺规则 Behavior
falsenull 自动生成 Azure 根据检测到的 Azure Functions 触发器创建并管理 KEDA 规则。 在此模式下阻止用户提供的规则。
true 客户定义 Azure不生成基于触发器的规则。 你提供的规则用于扩缩容决策。
true 未提供任何规则 未提供任何内容 Azure跳过基于触发器的规则生成。 只有平台的基础 HTTP 缩放行为仍然生效。

启用替代并提供自定义缩放规则

此示例从平台管理的缩放(allowScalingRuleOverride=false)开始,并切换到手动规则控制。 PATCH 请求包括一个Azure队列规则和一个 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.chinacloudapi.cn/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.chinacloudapi.cn/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 属性仅适用于 Function Apps(kind = 'functionapp')。 不能为其他容器应用类型设置它。
自定义缩放规则仍然存在时设置allowScalingRuleOverride=false FunctionAppCannotSetScaleRules 如果存在非空规则,为防止意外删除客户定义的扩缩容规则,则无法切换到平台控制模式。 如果客户希望平台自动管理,则需要在规模规则中显式设置 [] (空数组)。