Container Apps でのAzure Functionsに対して自動生成された KEDA スケール ルールをオーバーライドする

Container Apps の関数は、通常、プラットフォームで管理されるスケーリング モードで実行されます。 起動時に、Functions ホストはトリガー(HTTP、キュー、タイマーなど)を調べ、Azure Container Apps はアプリのリビジョンに対応する KEDA トリガー構成を作成します。

自動マッピングを無効にし、properties.template.scale.allowScalingRuleOverrideで独自のスケール ルールを指定する場合は、template.scale.rulesを設定します。

前提条件

  • Functions アプリとしてデプロイされた Container Apps リソース (kind=functionapp)。
  • アプリ リソースに対して az rest を呼び出すアクセス許可を持つAzure CLI。
  • REST API バージョン 2026-03-02-preview 以降。

プロパティ定義

財産 タイプ Default 適用対象 API バージョン
properties.template.scale.allowScalingRuleOverride boolean (null 許容) false / null コンテナー アプリでのみ利用可能な Functions (kind=functionapp) 2026-03-02-preview 以降

Behavior

値をオーバーライドする スケール ルール Behavior
false または null 自動生成 Azure検出された Functions トリガーから KEDA ルールを作成および管理します。 ユーザー指定のルールは、このモードではブロックされます。
true 顧客定義 Azureでは、トリガーベースのルールは生成されません。 指定したルールは、スケールの決定に使用されます。
true 規則が指定されていない 用意なし Azureは、トリガーベースのルールの生成をスキップします。 プラットフォームのベースライン HTTP スケーラー動作のみがアクティブなままです。

オーバーライドを有効にしてカスタム スケール ルールを指定する

この例は、プラットフォームで管理されるスケーリング (allowScalingRuleOverride=false) から始まり、手動のルール制御に切り替えます。 PATCH 要求には、1 つの Azure Queue ルールと 1 つの HTTP コンカレンシー 規則が含まれます。

  1. patch-enable-override.jsonという名前の PATCH 本文ファイルを作成します。

    {
      "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. 更新プログラムを適用します。

    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
    

予想される結果:

  • トリガーから派生したルールは、新しいリビジョンに対して生成されません。
  • カスタム ルール (my-queue-rulemy-http-rule) がリビジョンにアタッチされます。
  • スケールアウト動作は、キューの深さ (queueLength=20) と HTTP コンカレンシー (concurrentRequests=50) に従うようになりました。

オーバーライドを無効にし、プラットフォームで生成されたルールに戻す

この例では、手動で構成されたアプリ (allowScalingRuleOverride=true) をプラットフォームで管理されたスケーリングに返します。

Important

allowScalingRuleOverride=falseが空でないときにrulesを設定する要求は拒否されます。 切り替えるには、同じ PATCH で rules: [] を送信します。

  1. patch-disable-override.jsonという名前の PATCH 本文ファイルを作成します。

    {
      "properties": {
        "template": {
          "scale": {
            "allowScalingRuleOverride": false,
            "rules": []
          }
        }
      }
    }
    
  2. 更新プログラムを適用します。

    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
    

予想される結果:

  • カスタムスケールルールはクリアされました。
  • Azureは、検出された Functions トリガーからスケール ルールの作成を再開します。
  • プラットフォームで管理されたスケーリングを使用して、新しいリビジョンが生成されます。

エラー シナリオ

シナリオ エラー コード エラーメッセージ
Functions 以外のアプリで allowScalingRuleOverride=true を設定する (kindfunctionappではない) AllowScalingRuleOverrideNotApplicable AllowScalingRuleOverride プロパティは、Function Apps (kind = 'functionapp') にのみ適用されます。 他のコンテナー アプリの種類には設定できません。
カスタム スケール ルールがまだ存在する間に allowScalingRuleOverride=false を設定する FunctionAppCannotSetScaleRules 顧客が定義したスケール ルールを誤って削除することを保護するために空でないルールが存在する場合、プラットフォーム制御モードに切り替えることはできません。 プラットフォームを自動管理する場合は、スケール ルールで [] (空の配列) を明示的に設定する必要があります。