22 de maio de 20264 min de leitura

Regras de Scale Personalizadas do KEDA para Azure Functions no Azure Container Apps

DeepGanguly

Azure

Banner - Regras de Scale Personalizadas do KEDA para Azure Functions no Azure Container Apps

A Microsoft anunciou uma nova capacidade para Azure Functions executadas no Azure Container Apps: a possibilidade de substituir as regras de scaling geradas automaticamente pelo KEDA por configurações totalmente customizadas. A novidade chega com a propriedade allowScalingRuleOverride, que transfere o controle do scaling para as mãos das equipes de engenharia.

TL;DR: O Azure Container Apps agora suporta a propriedade allowScalingRuleOverride, que permite substituir as regras de scaling KEDA geradas automaticamente para Azure Functions. Com isso, equipes podem definir thresholds de escala independentes da concorrência por réplica, usar qualquer um dos 60+ scalers do KEDA (Service Bus, Kafka, Cron, etc.) e combinar múltiplos sinais em uma única configuração. A responsabilidade pela configuração passa a ser totalmente do time.

Por que a Microsoft criou essa funcionalidade?

O Azure Functions no Container Apps sempre gerou regras de scaling KEDA automaticamente a partir dos triggers das funções. Para a maioria dos cenários, isso funciona bem. Mas clientes relataram que os defaults nem sempre atendem necessidades específicas:

  • Workloads orientadas a mensagens que exigem um threshold mais alto antes de escalar – para controlar custos e evitar over-provisioning.
  • Funções com uso intensivo de CPU, onde cada réplica deve processar menos mensagens simultaneamente, independentemente do threshold de escala.
  • Cenários avançados que precisam de scalers KEDA que a plataforma não gera automaticamente a partir dos metadados do trigger.

Um padrão comum identificado: equipes precisavam separar quando adicionar réplicas de quanto trabalho cada réplica deve processar. Os defaults de threshold e maxConcurrentCalls no host.json são acoplados – ajustar um afeta o outro. Com regras customizadas, essas preocupações se tornam totalmente independentes.

O que muda com allowScalingRuleOverride?

Uma nova propriedade na configuração de scale do Container App:

{
   "properties":{
      "template":{
         "scale":{
            "allowScalingRuleOverride":true,
            "rules":[
               {
                  "name":"my-servicebus-rule",
                  "custom":{
                     "type":"azure-servicebus",
                     "metadata":{
                        "queueName":"orders-queue",
                        "messageCount":"50",
                        "connectionFromEnv":"ServiceBusConnection"
                     }
                  }
               }
            ]
         }
      }
   }
}

Quando definida como true:

  • Suas regras customizadas substituem completamente a configuração de scaling gerada pela plataforma.
  • Elas se tornam a única fonte de decisões de escala.
  • Você controla o threshold exato que atende ao seu workload.

A funcionalidade funciona com qualquer scaler KEDA – Service Bus, Azure Queue, Kafka, PostgreSQL, Cron, HTTP concurrency ou qualquer um dos mais de 60 scalers suportados (consulte a referência oficial).

Como ativar a override?

Utilize a REST API do Container Apps para fazer um PATCH na sua function app.

Endpoint da API:
https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroup}/providers/Microsoft.App/containerApps/{appName}?api-version=2026-03-02-preview

Corpo do PATCH:

{
   "properties":{
      "template":{
         "scale":{
            "allowScalingRuleOverride":true,
            "minReplicas":0,
            "maxReplicas":10,
            "rules":[
               {
                  "name":"controlled-sb-rule",
                  "custom":{
                     "type":"azure-servicebus",
                     "metadata":{
                        "queueName":"my-queue",
                        "messageCount":"50",
                        "connectionFromEnv":"ServiceBusConnection"
                     }
                  }
               }
            ]
         }
      }
   }
}

Pontos importantes

  • Exclusivo para Functions: A propriedade se aplica apenas a Container Apps com kind=functionapp. Aplicações que não são do tipo Functions receberão o erro AllowScalingRuleOverrideNotApplicable.
  • Você assume o controle: Quando a override está ativada, o Azure não gera mais regras automáticas baseadas nos triggers. Sua equipe é responsável por fornecer uma configuração válida de scaler KEDA.
  • Qualquer scaler KEDA: Não se limita a Service Bus ou Queue Storage. HTTP concurrency, Kafka topic lag, queries PostgreSQL, Cron – qualquer scaler do ecossistema KEDA.
  • Combine múltiplos sinais: É possível enviar uma regra de fila e uma regra de HTTP concurrency em um único PATCH, para scaling baseado em múltiplos sinais.
  • Reverter com segurança: Para voltar ao scaling gerenciado pela plataforma, defina allowScalingRuleOverride: false com "rules": []. A API rejeita a requisição se regras customizadas ainda estiverem presentes – protegendo contra exclusão acidental.

Perguntas Frequentes

  • Posso usar qualquer scaler do KEDA com essa funcionalidade?
    Sim. A override permite qualquer scaler suportado pelo KEDA – Service Bus, Azure Queue, Kafka, PostgreSQL, Cron, HTTP concurrency, entre mais de 60 opções. Não há limitação aos scalers gerados automaticamente pela plataforma.

  • O que acontece se eu ativar a override e não definir regras customizadas?
    A API do Container Apps rejeitará a requisição se allowScalingRuleOverride for true mas o array rules estiver vazio. A plataforma não gerará regras automaticamente, então você deve fornecer uma configuração válida de scaler KEDA.

  • Como reverter para o scaling gerenciado pela plataforma?
    Defina allowScalingRuleOverride: false e limpe o array rules (envie "rules": []). O Azure voltará a gerar automaticamente as regras de scaling com base nos triggers da sua function. A API protege contra remoção acidental de regras.

  • Essa funcionalidade se aplica a qualquer Container App no Azure?
    Não. A propriedade allowScalingRuleOverride só é válida para Container Apps com kind=functionapp. Aplicações que não são do tipo Functions receberão o erro AllowScalingRuleOverrideNotApplicable.


Artigo originalmente publicado por DeepGanguly em Azure Updates - Latest from Azure Charts.

Gostou? Compartilhe:
Precisa de ajuda?Fale com nossos especialistas 👋
Avatar Walcew - Headset