Azure Container Apps に Azure Functions をデプロイすると、プラットフォームによって Functions トリガー パラメーターが KEDA スケーリング構成に自動的に変換されます。 この変換により、さまざまなイベント ソースからの受信ワークロードに基づいて Functions が適切にスケーリングされます。
スケーリング マッピングのしくみ
Container Apps 上の Azure Functions では、KEDA を使用してイベント ソースを監視し、関数アプリをスケーリングします。 プラットフォームは自動的に次の手順を実行します。
Functions パラメーターを変換します。(
host.json属性またはトリガー属性から) Functions トリガー構成を KEDA スケーラー メタデータに変換します。スケーリング ルールを適用する: 変換されたパラメーターを使用して、適切な KEDA スケーリング ルールを作成します。
イベントの監視: KEDA は、これらのルールに基づいてイベント ソースを継続的に監視します。
インスタンスのスケーリング: ワークロードに基づいてコンテナー インスタンスを自動的にスケールアップまたはスケールダウンします。
次のセクションでは、各トリガーの種類の特定のパラメーター マッピングについて詳しく説明します。
パラメーターのスケーリング
次のセクションでは、Azure Functions トリガー パラメーターが、サポートされているトリガーの種類ごとに対応する KEDA スケーラー構成にどのようにマップされるかについて詳しく説明します。
Azure Storage キュー
次の表は、 Azure Storage Queue トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | batchSize |
queueLength |
| 構成パス |
extensions.queues.batchSize (host.json) |
metadata.queueLength |
| 既定値 | 16 | 5 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
Functions ランタイムが取得して並列で処理するキュー メッセージの数。 処理中の数が newBatchThresholdに達すると、ランタイムは別のバッチをフェッチします。 関数あたりの同時実行メッセージの最大数は、 batchSize と newBatchThresholdです。 アプリが複数の VM にスケールアウトしない限り、コンカレンシーを排除するには、 batchSize を 1 に設定します。 最大の batchSize は 32 です。 |
スケーラーに渡されるキュー長のターゲット値。 たとえば、1 つのポッドで 10 個のメッセージを処理できる場合は、キューの長さのターゲットを 10 に設定します。 キュー内の実際のメッセージ数が 30 の場合、スケーラーは 3 つのポッドにスケーリングされます。 |
翻訳ロジック
metadata.queueLength = extensions.queues.batchSize
Azure Service Bus (単一ディスパッチ)
次の表は、 Azure Service Bus トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | maxConcurrentCalls |
messageCount |
| 構成パス |
extensions.serviceBus.maxConcurrentCalls (host.json) |
metadata.messageCount |
| 既定値 | 16 | 5 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
スケーリングされたインスタンスあたりの同時呼び出しの最大数を制限します。 マルチコア インスタンスの場合、最大値にコアの数が乗算されます。 この設定は、 isSessionsEnabled が false の場合にのみ使用します。 |
スケールオンする Azure Service Bus キューまたはトピック内のアクティブなメッセージの数。 |
翻訳ロジック
metadata.messageCount = extensions.serviceBus.maxConcurrentCalls
Azure Service Bus (単一ディスパッチ、セッションベース)
次の表は、isSessionsEnabledが true の場合に Azure Service Bus トリガー パラメーターが KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | maxConcurrentSessions |
messageCount |
| 構成パス |
extensions.serviceBus.maxConcurrentSessions (host.json) |
metadata.messageCount |
| 既定値 | 8 | 5 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
スケーリングされたインスタンスごとに同時に処理されるセッションの最大数。 この設定は、 isSessionsEnabled が true の場合にのみ使用します。 |
スケールオンする Azure Service Bus キューまたはトピック内のアクティブなメッセージの数。 |
翻訳ロジック
metadata.messageCount = extensions.serviceBus.maxConcurrentSessions
Azure Service Bus (バッチ処理)
次の表は、 Azure Service Bus トリガー パラメーター がバッチ処理の KEDA スケーラー構成値 にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | maxMessageBatchSize |
messageCount |
| 構成パス |
extensions.serviceBus.maxMessageBatchSize (host.json) |
metadata.messageCount |
| 既定値 | 1000 | 5 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
| バッチ処理のために各関数呼び出しに渡されるメッセージの最大数。 | スケールオンする Azure Service Bus キューまたはトピック内のアクティブなメッセージの数。 |
翻訳ロジック
metadata.messageCount = extensions.serviceBus.maxMessageBatchSize
Azure Event Hubs
次の表は、 Azure Event Hubs トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | targetUnprocessedEventThreshold |
unprocessedEventThreshold |
| 構成パス |
extensions.eventHubs.targetUnprocessedEventThreshold (host.json) |
metadata.unprocessedEventThreshold |
| 既定値 | null 値 | 64 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
| 関数インスタンスあたりの未処理イベントの必要な数。 ターゲット ベースのスケーリングに使用されます。 | スケーリング アクションをトリガーする平均ターゲット値。 |
翻訳ロジック
metadata.unprocessedEventThreshold = extensions.eventHubs.targetUnprocessedEventThreshold
Apache Kafka
次の表は、 Apache Kafka トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | LagThreshold |
lagThreshold |
| 構成パス | 関数トリガー属性 | metadata.lagThreshold |
| 既定値 | 1000 | 10 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
この値は、Kafka トリガーのインスタンスごとのターゲット実行として使用します。 必要なインスタンスの数は、コンシューマーラグの合計を LagThresholdで割った値に基づいて計算されます。 |
|
| スケーリング アクションをトリガーするには、この値を合計ラグ (すべてのパーティションラグの合計) のターゲットとして使用します。 |
Example
[KafkaTrigger(
"BrokerList",
"topic",
ConsumerGroup = "$Default",
LagThreshold = 100)]
翻訳ロジック
metadata.lagThreshold = LagThreshold
HTTP トリガー
HTTP トリガーは KEDA スケーラーにマップされません。 代わりに、Container Apps の組み込みの HTTP スケーリング機能または外部監視ソリューションを使用してください。