Substituir regras de dimensionamento KEDA geradas automaticamente para Funções do Azure on Container Apps

As funções nas Aplicações Container normalmente correm em modo de escalabilidade gerida pela plataforma. No arranque, o host de Funções inspeciona os gatilhos (por exemplo, HTTP, Queue ou Timer), e o Azure Container Apps cria a configuração correspondente dos gatilhos KEDA para a revisão da aplicação.

Define properties.template.scale.allowScalingRuleOverride quando queres desativar esse mapeamento automático e fornece as tuas próprias regras de escala em template.scale.rules.

Pré-requisitos

  • Um recurso do Container Apps implementado como uma aplicação Functions (kind=functionapp).
  • O CLI do Azure, com permissão para chamar az rest contra o recurso da aplicação.
  • Versão 2026-03-02-preview da API REST ou mais recente.

Definição do imóvel

Property Tipo Predefinido Aplica-se a Versão da API
properties.template.scale.allowScalingRuleOverride boolean (anulável) false / null Funções apenas no Container Apps (kind=functionapp) 2026-03-02-preview e mais tarde

Comportamento

Valor de substituição Regras de escala Comportamento
false ou null Gerado automaticamente O Azure cria e gere regras KEDA a partir dos acionadores do Azure Functions detetados. As regras fornecidas pelo utilizador são bloqueadas neste modo.
true Definido pelo cliente O Azure não gera regras baseadas em gatilhos. As regras que forneces são usadas para decisões de escala.
true sem regras fornecidas Nenhum fornecido O Azure evita a geração de regras baseada em gatilhos. Apenas o comportamento base do escalador HTTP da plataforma permanece ativo.

Ativar a substituição e definir regras de escala personalizadas

Este exemplo começa com a escalabilidade gerida pela plataforma (allowScalingRuleOverride=false) e muda para controlo manual de regras. O pedido PATCH inclui uma regra de fila Azure e uma regra de concorrência HTTP.

  1. Crie um ficheiro de corpo PATCH chamado patch-enable-override.json.

    {
      "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. Aplica a atualização.

    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
    

Resultado esperado:

  • Regras derivadas de gatilhos não são geradas para a nova revisão.
  • As regras personalizadas (my-queue-rule e my-http-rule) estão anexadas à revisão.
  • O comportamento de expansão horizontal passa agora a seguir a profundidade da fila (queueLength=20) e a concorrência HTTP (concurrentRequests=50).

Desativar a sobreposição e reverter às regras geradas pela plataforma

Este exemplo devolve uma aplicação configurada manualmente (allowScalingRuleOverride=true) para escalabilidade gerida pela plataforma.

Importante

Um pedido que defina allowScalingRuleOverride=false enquanto rules não está vazio é rejeitado. Para voltar atrás, envie rules: [] no mesmo PATCH.

  1. Crie um ficheiro de corpo PATCH chamado patch-disable-override.json.

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": false,
            "rules": []
          }
        }
      }
    }
    
  2. Aplica a atualização.

    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
    

Resultado esperado:

  • As regras de escala personalizadas são eliminadas.
  • O Azure retoma a criação de regras de escala a partir dos gatilhos de Funções descobertos.
  • É produzida uma nova revisão com escalabilidade gerida por plataforma.

Cenários de erro

Scenario Código de erro Mensagem de erro
Defina allowScalingRuleOverride=true numa aplicação que não é Functions (kind não é functionapp) AllowScalingRuleOverrideNotApplicable A AllowScalingRuleOverride propriedade é aplicável apenas a Aplicações de Funções (kind = 'functionapp'). Não pode ser configurado para outros tipos de aplicações de contentores.
Definir allowScalingRuleOverride=false enquanto as regras de escala personalizada ainda estão presentes FunctionAppCannotSetScaleRules Não é possível alternar para o modo gerido pela plataforma se existirem regras não vazias, para evitar a eliminação acidental de regras de dimensionamento definidas pelo cliente. Os clientes precisam de definir explicitamente [] (array vazio) nas regras de escala, se quiserem que a plataforma faça a gestão automática.