Substituir regras de escala do KEDA geradas automaticamente pelo Azure Functions em Aplicativos de Contêiner

Normalmente, as funções em Aplicativos de Contêiner são executadas no modo de dimensionamento gerenciado pela plataforma. Na inicialização, o host do Functions inspeciona gatilhos (por exemplo, HTTP, Fila ou Temporizador) e Aplicativos de Contêiner do Azure cria a configuração de gatilho KEDA correspondente para a revisão do aplicativo.

Defina properties.template.scale.allowScalingRuleOverride quando quiser desabilitar esse mapeamento automático e forneça suas próprias regras de escala.template.scale.rules

Pré-requisitos

  • Um recurso do Container Apps implantado como um aplicativo Functions (kind=functionapp).
  • A CLI do Azure, com permissão para chamar az rest no recurso do aplicativo.
  • Versão da API 2026-03-02-preview REST ou mais recente.

Definição de propriedade

Property Tipo Default Aplica-se a Versão da API
properties.template.scale.allowScalingRuleOverride boolean (anulável) false / null Somente Functions em Aplicativos de Contêiner (kind=functionapp) 2026-03-02-preview e posterior

Behavior

Valor de substituição Regras de escala Behavior
false ou null Gerado automaticamente O Azure cria e gerencia regras do KEDA a partir dos gatilhos do Functions detectados. As regras fornecidas pelo usuário são bloqueadas nesse modo.
true Definido pelo cliente Azure não gera regras baseadas em gatilho. As regras fornecidas são usadas para decisões de escala.
true sem regras fornecidas Nada fornecido Azure ignora a geração de regras baseada em gatilho. Apenas o comportamento padrão do escalador HTTP da plataforma permanece ativo.

Habilitar a substituição e fornecer regras de escala personalizadas

Este exemplo começa com o dimensionamento gerenciado pela plataforma (allowScalingRuleOverride=false) e alterna para o controle de regra manual. A solicitação PATCH inclui uma regra de fila Azure e uma regra de simultaneidade HTTP.

  1. Criar um arquivo 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. Aplique 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:

  • As regras derivadas do gatilho não são geradas para a nova revisão.
  • As regras personalizadas (my-queue-rule e my-http-rule) são anexadas à revisão.
  • O comportamento de expansão agora segue a profundidade da fila (queueLength=20) e a simultaneidade HTTP (concurrentRequests=50).

Desativar a substituição e voltar às regras geradas pela plataforma

Este exemplo retorna um aplicativo configurado manualmente (allowScalingRuleOverride=true) para o dimensionamento gerenciado pela plataforma.

Importante

Uma solicitação que define allowScalingRuleOverride=false enquanto rules não está vazia é rejeitada. Para voltar atrás, envie rules: [] no mesmo PATCH.

  1. Criar um arquivo de corpo PATCH chamado patch-disable-override.json.

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": false,
            "rules": []
          }
        }
      }
    }
    
  2. Aplique 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 foram removidas.
  • O Azure volta a criar regras de escala a partir dos gatilhos descobertos do Azure Functions.
  • Uma nova revisão é criada com o dimensionamento gerenciado pela plataforma.

Cenários de erro

Scenario Código do erro Mensagem de erro
Definir allowScalingRuleOverride=true em um aplicativo que não seja de Funções (kind não é functionapp) AllowScalingRuleOverrideNotApplicable A AllowScalingRuleOverride propriedade só é aplicável aos Aplicativos de Funções (kind = 'functionapp'). Ele não pode ser definido para outros tipos de aplicativo de contêiner.
Definir allowScalingRuleOverride=false enquanto as regras de escala personalizadas ainda estão presentes FunctionAppCannotSetScaleRules Não é possível alternar para o modo gerenciado pela plataforma se existirem regras de escalonamento não vazias, para evitar a exclusão acidental de regras de escalonamento definidas pelo cliente. Os clientes precisam definir [] explicitamente (matriz vazia) em regras de escala se quiserem que a plataforma gerencie automaticamente.