容器应用上的函数通常以平台管理的缩放模式运行。 启动时,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 |
|---|---|---|
false 或 null |
自动生成 | Azure 根据检测到的 Azure Functions 触发器创建并管理 KEDA 规则。 在此模式下阻止用户提供的规则。 |
true |
客户定义 | Azure不生成基于触发器的规则。 你提供的规则用于扩缩容决策。 |
true 未提供任何规则 |
未提供任何内容 | Azure跳过基于触发器的规则生成。 只有平台的基础 HTTP 缩放行为仍然生效。 |
启用替代并提供自定义缩放规则
此示例从平台管理的缩放(allowScalingRuleOverride=false)开始,并切换到手动规则控制。 PATCH 请求包括一个Azure队列规则和一个 HTTP 并发规则。
创建一个名为
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" } } } ] } } } }应用此更新。
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-rule和my-http-rule)已附加到修订版本。 - 横向扩展行为现在遵循队列深度(
queueLength=20)和 HTTP 并发(concurrentRequests=50)。
禁用覆盖并恢复为平台生成的规则
此示例将手动配置的应用程序 (allowScalingRuleOverride=true) 恢复为平台管理的扩展。
Important
当 allowScalingRuleOverride=false 非空时,设置 rules 的请求会被拒绝。 若要切换回,请在同一 PATCH 中发送 rules: [] 。
创建一个名为
patch-disable-override.json的 PATCH 正文文件。{ "properties": { "template": { "scale": { "allowScalingRuleOverride": false, "rules": [] } } } }应用此更新。
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=true(kind 不是 functionapp) |
AllowScalingRuleOverrideNotApplicable |
该 AllowScalingRuleOverride 属性仅适用于 Function Apps(kind = 'functionapp')。 不能为其他容器应用类型设置它。 |
自定义缩放规则仍然存在时设置allowScalingRuleOverride=false |
FunctionAppCannotSetScaleRules |
如果存在非空规则,为防止意外删除客户定义的扩缩容规则,则无法切换到平台控制模式。 如果客户希望平台自动管理,则需要在规模规则中显式设置 [] (空数组)。 |