Remplacer les règles d’échelle KEDA générées automatiquement pour Azure Functions sur Container Apps

Functions sur Container Apps s’exécute normalement en mode de mise à l’échelle géré par la plateforme. Au démarrage, l’hôte Functions inspecte les déclencheurs (par exemple, HTTP, File d’attente ou Minuteur) et Azure Container Apps crée la configuration de déclencheur KEDA correspondante pour la révision de l’application.

Définissez properties.template.scale.allowScalingRuleOverride quand vous souhaitez désactiver ce mappage automatique et fournir vos propres règles de mise à l’échelle dans template.scale.rules.

Prerequisites

  • Ressource Container Apps déployée en tant qu’application Functions (kind=functionapp).
  • L’interface CLI Azure, avec l’autorisation d’appeler az rest sur la ressource d’application.
  • Version 2026-03-02-preview de l’API REST ou ultérieure.

Définition de propriété

Propriété Catégorie Par défaut S’applique à Version de l’API
properties.template.scale.allowScalingRuleOverride boolean (peut être nul) false / null Fonctions uniquement sur Container Apps (kind=functionapp) 2026-03-02-preview et versions ultérieures

Behavior

Valeur de remplacement Règles de mise à l’échelle Behavior
false ou null Généré automatiquement Azure crée et gère des règles KEDA à partir de déclencheurs Functions découverts. Les règles fournies par l’utilisateur sont bloquées dans ce mode.
true Défini par le client Azure ne génère pas de règles basées sur des déclencheurs. Les règles que vous fournissez sont utilisées pour les décisions d’échelle.
true sans règles fournies Aucune information fournie Azure ignore la génération de règles basée sur le déclencheur. Seul le comportement du scaler HTTP de base de la plateforme reste actif.

Activer le remplacement et fournir des règles d’échelle personnalisées

Cet exemple commence par la mise à l’échelle gérée par la plateforme (allowScalingRuleOverride=false) et bascule vers le contrôle de règle manuel. La requête PATCH inclut une règle de file d’attente Azure et une règle de concurrence HTTP.

  1. Créez un fichier de corps PATCH nommé 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. Appliquez la mise à jour.

    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
    

Résultat attendu :

  • Les règles dérivées du déclencheur ne sont pas générées pour la nouvelle révision.
  • Les règles personnalisées (my-queue-rule et my-http-rule) sont attachées à la révision.
  • Le comportement de montée en charge suit désormais la profondeur de la file d’attente (queueLength=20) et la concurrence HTTP (concurrentRequests=50).

Désactiver le remplacement et revenir aux règles générées par la plateforme

Cet exemple retourne une application configurée manuellement (allowScalingRuleOverride=true) à la mise à l’échelle gérée par la plateforme.

Important

Une requête qui définit allowScalingRuleOverride=false alors qu’elle rules n’est pas vide est rejetée. Pour revenir à l’état précédent, envoyez rules: [] dans le même PATCH.

  1. Créez un fichier de corps PATCH nommé patch-disable-override.json.

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": false,
            "rules": []
          }
        }
      }
    }
    
  2. Appliquez la mise à jour.

    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
    

Résultat attendu :

  • Les règles d’échelle personnalisées sont effacées.
  • Azure reprend la création de règles de mise à l’échelle à partir de déclencheurs Functions découverts.
  • Une nouvelle révision est produite avec une mise à l’échelle gérée par la plateforme.

Scénarios d’erreur

Scénario Code d'erreur Message d’erreur
Définir allowScalingRuleOverride=true sur une application qui n’est pas une application Functions (kind n’est pas functionapp) AllowScalingRuleOverrideNotApplicable La AllowScalingRuleOverride propriété s’applique uniquement aux applications de fonction (kind = 'functionapp'). Il ne peut pas être défini pour d’autres types d’applications conteneur.
Définir allowScalingRuleOverride=false alors que les règles de mise à l’échelle personnalisées sont toujours présentes FunctionAppCannotSetScaleRules Impossible de basculer vers le mode contrôlé par la plateforme si des règles non vides existent pour protéger la suppression accidentelle des règles d’échelle définies par le client. Les clients doivent définir [] explicitement (tableau vide) dans les règles de mise à l’échelle s’ils souhaitent que la plateforme gère automatiquement.