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 erroAllowScalingRuleOverrideNotApplicable. - 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: falsecom"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 seallowScalingRuleOverridefortruemas o arrayrulesestiver 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?
DefinaallowScalingRuleOverride: falsee limpe o arrayrules(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 propriedadeallowScalingRuleOverridesó é válida para Container Apps comkind=functionapp. Aplicações que não são do tipo Functions receberão o erroAllowScalingRuleOverrideNotApplicable.
Artigo originalmente publicado por DeepGanguly em Azure Updates - Latest from Azure Charts.