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 (セッションベース)
次の表は、 Azure Event Hubs トリガー パラメーター が 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
Azure Cosmos DB
Azure Cosmos DB トリガーは KEDA スケーラーにマップされません。 代わりにカスタム スケーリングを使用してください。
Functions トリガーは、関数呼び出しごとに受信した項目の最大数を設定します。 トランザクション スコープはストアド プロシージャに対して保持されます。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | MaxItemsPerInvocation |
N/A |
| 構成パス | 関数トリガー属性 | N/A |
| 既定値 | 100 | N/A |
Example
[CosmosDBTrigger(
databaseName: "ToDoItems",
containerName: "Items",
Connection = "CosmosDBConnection",
MaxItemsPerInvocation = 100)]
HTTP トリガー
HTTP トリガーは KEDA スケーラーにマップされません。 代わりに、Container Apps の組み込みの HTTP スケーリング機能または外部監視ソリューションを使用してください。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | maxConcurrentRequests |
N/A |
| 構成パス |
extensions.http.maxConcurrentRequests (host.json) |
N/A |
| 既定値 | 100 (従量課金)、-1 (Premium/専用) | N/A |
Blob Storage のトリガー
次の表は、 Azure Blob Storage トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | maxDegreeOfParallelism |
blobCount |
| 構成パス |
extensions.blobs.maxDegreeOfParallelism (host.json) |
metadata.blobCount |
| 既定値 | 8 ×使用可能なコア数 | 5 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
| 関数アプリ内のすべての BLOB によってトリガーされる関数に対して許可される同時呼び出しの数を設定します。 最小値: 1。 | スケーリング アクションをトリガーする平均ターゲット値。 (既定値: 5、省略可能) |
翻訳ロジック
metadata.blobCount = extensions.blobs.maxDegreeOfParallelism
Event Grid
Azure Event Grid トリガー パラメーターは KEDA スケーラーにマップされません。
Event Grid トリガーは、webhook HTTP 要求を使用します。 この要求は、HTTP トリガーと同じ host.json 設定を使用して構成します。 これらの設定は、リソース管理の並列実行を制御します。
RabbitMQ トリガー
次の表は 、RabbitMQ トリガー パラメーター が KEDA スケーラー構成値にどのようにマップされるかを示しています。
| パラメーター | Functions の構成 | KEDA の構成 |
|---|---|---|
| パラメーター名 | prefetchCount |
value |
| 構成パス |
extensions.rabbitMQ.prefetchCount (host.json) |
metadata.value |
| 既定値 | 30 | 100.50 |
| 関数トリガーの説明 | KEDA スケーラーの説明 |
|---|---|
| 受信側が同時に要求およびキャッシュできるメッセージの数。 | スケーリングをトリガーするメッセージ バックログまたは発行/秒レート。 QueueLength モードでは、値はスケーリングのターゲット キューの長さを表します。 |
翻訳ロジック
metadata.value = extensions.rabbitMQ.prefetchCount