次の方法で共有


Durable Functions のバインド (Azure Functions)

Durable Functions 拡張機能には、オーケストレーター、エンティティ、およびアクティビティ関数の実行を制御する 3 つのトリガー バインドが導入されています。 Durable Functions ランタイムのクライアントとして機能する出力バインドも導入されています。

記事の冒頭で Durable Functions の開発言語を必ず選択してください。

重要

この記事は、Durable Functions 用の Python v1 および Python v2 の両方のプログラミング モデルをサポートしています。

Python v2 プログラミング モデル

Durable Functions は、新しい Python v2 プログラミング モデルでサポートされています。 v2 モデルを使用するには、PyPI パッケージ azure-functions-durable、バージョン 1.2.2 またはそれ以降のバージョンである Durable Functions SDK をインストールする必要があります。 Durable Functions で v2 モデルを使用するには、アプリがhost.json バージョン 4.x を参照していることを で確認する必要もあります。

Durable Functions SDK for Python リポジトリでフィードバックと提案を提供できます。

オーケストレーション トリガー

オーケストレーション トリガーを使用すると、 永続的なオーケストレーター関数を作成できます。 このトリガーは、新しいオーケストレーション インスタンスのスケジュールが設定されたときと、既存のオーケストレーション インスタンスでイベントが受信されたときに実行されます。 オーケストレーター関数がトリガーされる可能性があるイベントの例としては、永続的なタイマーの有効期限、アクティビティ関数の応答、外部クライアントによって発生したイベントがあります。

.NET で関数を作成する場合、オーケストレーション トリガーは OrchestrationTriggerAttribute .NET 属性を使用して構成されます。

Java の場合、@DurableOrchestrationTrigger 注釈はオーケストレーション トリガーの構成に使用されます。

オーケストレーター関数を記述するとき、オーケストレーション トリガーは、bindings ファイルの 配列の次の JSON オブジェクトによって定義されます。

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration は、クライアントがこのオーケストレーター関数の新しいインスタンスを開始するときに使用する必要がある、オーケストレーションの名前です。 このプロパティは省略可能です。 指定されない場合は関数の名前が使用されます。

Azure Functions では、Python の 2 つのプログラミング モデルをサポートしています。 オーケストレーション トリガーを定義する方法は、選択したプログラミング モデルによって異なります。

Python v2 プログラミング モデルでは、orchestration_trigger デコレーターを直接 Python 関数コード内で 使用してオーケストレーション トリガーを定義することができます。

v2 モデルでは、Durable Functions のトリガーとバインドには DFApp のインスタンスからアクセスします。これは、FunctionApp のサブクラスであり、Durable Functions 固有のデコレーターを追加でエクスポートします。

内部的には、このトリガー バインドによって、オーケストレーション開始イベント、永続的なタイマーの有効期限のイベント、アクティビティ関数の応答イベント、他の関数によって発生した外部イベントなど、新しいオーケストレーション イベントについて、構成された永続ストアがポーリングされます。

トリガーの動作

オーケストレーション トリガーについての注意事項を次に示します。

  • シングル スレッド - 1 つのディスパッチャー スレッドは、1 つのホスト インスタンス上のすべてのオーケストレーター関数の実行に使用されます。 このため、オーケストレーター関数コードが効率的であり、I/O の実行がないことを保証することが重要です。 Durable Functions 固有のタスクの種類を待機する場合を除き、このスレッドが非同期処理を実行しないようにすることも重要です。
  • 有害メッセージ処理 - オーケストレーション トリガーに有害メッセージのサポートはありません。
  • メッセージの可視性 - オーケストレーション トリガー メッセージはデキューされ、構成可能な期間は非表示にされます。 これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。
  • 戻り値 - 戻り値は JSON にシリアル化され、Azure Table Storage のオーケストレーション履歴テーブルに保持されます。 これらの戻り値は、オーケストレーション クライアントのバインドによるクエリを実行できます。これについては、後で説明します。

警告

オーケストレーター関数は、オーケストレーション トリガーのバインドを除いて、入力または出力バインドを使用しないでください。 これらのバインドはシングル スレッド ルールと I/O ルールに従っていない可能性があるため、これらのバインドを実行すると、Durable Task 拡張機能で問題が発生する可能性があります。 他のバインドを使用する場合は、オーケストレーター関数から呼び出されたアクティビティ関数にそれらを追加します。 オーケストレーター関数のコーディング制約の詳細については、 オーケストレーター関数のコード制約 に関するドキュメントを参照してください。

警告

オーケストレーター関数を async で宣言してはなりません。

トリガーの使用方法

オーケストレーション トリガーのバインドは、入力と出力の両方をサポートします。 入力と出力の処理に関する注意事項を次に示します。

  • inputs - オーケストレーション トリガーは、コンテキスト入力オブジェクトを介してアクセスされる入力を使用して呼び出すことができます。 すべての入力は、JSON にシリアル化できる必要があります。
  • 出力 - オーケストレーション トリガーでは、出力値と入力値の両方がサポートされます。 関数の戻り値は、出力値を割り当てるために使用され、JSON にシリアル化できる必要があります。

トリガー サンプル

最もシンプルな "Hello World" オーケストレーター関数のコードの例を次に示します。 このオーケストレーターの例では、実際にはタスクはスケジュールされません。

トリガーの定義に使用される特定の属性は、C# 関数を インプロセス で実行しているか 、分離されたワーカー プロセスで実行しているかによって異なります。

[FunctionName("HelloWorld")]
public static string Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    return $"Hello {name}!";
}

前のコードは Durable Functions 2.x 用です。 Durable Functions 1.x の場合、DurableOrchestrationContext の代わりに IDurableOrchestrationContext を使用する必要があります。 バージョン間の違いの詳細については、 Durable Functions のバージョン に関する記事を参照してください。

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    return `Hello ${name}!`;
});

ライブラリ durable-functions によって、ジェネレーター関数の終了時に同期 context.done メソッドの呼び出しが処理されます。

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.orchestration_trigger(context_name="context")
def my_orchestrator(context):
    result = yield context.call_activity("Hello", "Tokyo")
    return result
param($Context)

$InputData = $Context.Input
$InputData
@FunctionName("HelloWorldOrchestration")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    return String.format("Hello %s!", ctx.getInput(String.class));
}

オーケストレーター関数の大半はアクティビティ関数を呼び出すため、"Hello World" の例でアクティビティ関数を呼び出す方法を示します。

[FunctionName("HelloWorld")]
public static async Task<string> Run(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    string result = await context.CallActivityAsync<string>("SayHello", name);
    return result;
}

前のコードは Durable Functions 2.x 用です。 Durable Functions 1.x の場合、DurableOrchestrationContext の代わりに IDurableOrchestrationContext を使用する必要があります。 バージョン間の違いの詳細については、 Durable Functions のバージョン に関する記事を参照してください。

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    const result = yield context.df.callActivity("SayHello", name);
    return result;
});
@FunctionName("HelloWorld")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    String input = ctx.getInput(String.class);
    String result = ctx.callActivity("SayHello", input, String.class).await();
    return result;
}

アクティビティ トリガー

アクティビティ トリガーを使用すると、オーケストレーター関数 (アクティビティ関数と呼ばれる) によって呼び出される 関数を作成できます。

アクティビティ トリガーは、 ActivityTriggerAttribute .NET 属性を使用して構成されます。

アクティビティ トリガーは、@DurableActivityTrigger 注釈を使用して構成されます。

アクティビティ トリガーは、bindings 配列の次の JSON オブジェクトによって定義されます。

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity はアクティビティの名前です。 この値は、オーケストレーター関数がこのアクティビティ関数を呼び出すために使用する名前です。 このプロパティは省略可能です。 指定されない場合は関数の名前が使用されます。

アクティビティ トリガーを定義する方法は、選択したプログラミング モデルによって異なります。

activity_trigger デコレーターを直接 Python 関数コードで使用します。

内部的には、このトリガー バインドによって、構成された永続ストアに対して新しいアクティビティ実行イベントがポーリングされます。

トリガーの動作

アクティビティ トリガーに関する注意事項を次に示します。

  • スレッド処理 - オーケストレーション トリガーとは異なり、アクティビティ トリガーにはスレッドまたは I/O に関する制限はありません。 それらは、標準的な関数と同様に扱うことができます。
  • 有害メッセージ処理 - アクティビティ トリガーに有害メッセージのサポートはありません。
  • メッセージの可視性 - アクティビティ トリガー メッセージはデキューされ、構成可能な期間は非表示に保たれます。 これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。
  • 戻り値 - 戻り値は JSON にシリアル化され、構成された永続ストアに永続化されます。

トリガーの使用方法

アクティビティ トリガーのバインドは、オーケストレーション トリガーと同じように、入力と出力の両方をサポートします。 入力と出力の処理に関する注意事項を次に示します。

  • inputs - オーケストレーター関数からの入力を使用してアクティビティ トリガーを呼び出すことができます。 すべての入力は、JSON にシリアル化できる必要があります。
  • outputs - アクティビティ関数は、出力値と入力値の両方をサポートします。 関数の戻り値は、出力値を割り当てるために使用され、JSON にシリアル化できる必要があります。
  • metadata - .NET アクティビティ関数は、 string instanceId パラメーターにバインドして、呼び出し元のオーケストレーションのインスタンス ID を取得できます。

トリガー サンプル

シンプルな SayHello アクティビティ関数のコードの例を次に示します。

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
    string name = helloContext.GetInput<string>();
    return $"Hello {name}!";
}

.NET ActivityTriggerAttribute バインドの既定のパラメーター型は IDurableActivityContext (Durable Functions v1 の 場合は DurableActivityContext ) です。 ただし、.NET アクティビティ トリガーは、JSON にシリアル化できる型 (プリミティブ型を含む) への直接的なバインドもサポートしているため、同じ関数を次のように単純化できます。

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}
module.exports = async function(context) {
    return `Hello ${context.bindings.name}!`;
};

JavaScript バインドは追加のパラメーターとして渡すこともできます。そのため、同じ関数を次のように簡略化できます。

module.exports = async function(context, name) {
    return `Hello ${name}!`;
};
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.activity_trigger(input_name="myInput")
def my_activity(myInput: str):
    return "Hello " + myInput
param($name)

"Hello $name!"
@FunctionName("SayHello")
public String sayHello(@DurableActivityTrigger(name = "name") String name) {
    return String.format("Hello %s!", name);
}

入出力バインドを使用する

アクティビティ トリガーのバインドに加えて、通常の入出力バインドを使用できます。

たとえば、アクティビティ バインドへの入力を受け取り、Event Hubs 出力バインドを使用してイベント ハブにメッセージを送信できます。

{
  "bindings": [
    {
      "name": "message",
      "type": "activityTrigger",
      "direction": "in"
    },
    {
      "type": "eventHub",
      "name": "outputEventHubMessage",
      "connection": "EventhubConnectionSetting",
      "eventHubName": "eh_messages",
      "direction": "out"
  }
  ]
}
module.exports = async function (context) {
    context.bindings.outputEventHubMessage = context.bindings.message;
};

オーケストレーション クライアント

オーケストレーション クライアントのバインドを使用すると、オーケストレーター関数とやりとりする関数を記述できます。 これらの関数は、多くの場合 、クライアント関数と呼ばれます。 たとえば、次のようにオーケストレーション インスタンスを操作できます。

  • インスタンスを開始する。
  • インスタンスの状態をクエリする。
  • インスタンスを終了する。
  • インスタンスの実行中にイベントを送信する。
  • インスタンスの履歴を消去する。

DurableClientAttribute 属性 (Durable Functions v1.x の OrchestrationClientAttribute) を使用して、オーケストレーション クライアントにバインドできます。

@DurableClientInput 注釈を使用してオーケストレーション クライアントにバインドできます。

持続的クライアント トリガーは、bindings 配列の次の JSON オブジェクトによって定義されます。

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "orchestrationClient",
    "direction": "in"
}
  • taskHub - 複数の関数アプリが同じストレージ アカウントを共有するが、相互に分離する必要があるシナリオで使用されます。 指定されていない場合は、host.json の既定値が使用されます。 この値は、ターゲットのオーケストレーター関数によって使用される値と一致している必要があります。
  • connectionName - ストレージ アカウント接続文字列を含むアプリ設定の名前。 この接続文字列で表されるストレージ アカウントは、ターゲットのオーケストレーター関数によって使用されるものと同じにする必要があります。 指定されない場合は、関数アプリの既定のストレージ アカウント接続文字列が使用されます。

ほとんどの場合、これらのプロパティを省略し、既定の動作を使用することをお勧めします。

持続的クライアント トリガーを定義する方法は、選択したプログラミング モデルによって異なります。

durable_client_input デコレーターを直接 Python 関数コードで使用します。

クライアントの使用

通常、 IDurableClient (Durable Functions v1.x の DurableOrchestrationClient ) にバインドすると、Durable Functions でサポートされているすべてのオーケストレーション クライアント API にフル アクセスできます。

通常は DurableClientContext クラスにバインドします 。

言語に固有の SDK を使用してクライアント オブジェクトにアクセスする必要があります。

"HelloWorld" オーケストレーションを開始する、キューによってトリガーされる関数の例を次に示します。

[FunctionName("QueueStart")]
public static Task Run(
    [QueueTrigger("durable-function-trigger")] string input,
    [DurableClient] IDurableOrchestrationClient starter)
{
    // Orchestration input comes from the queue message content.
    return starter.StartNewAsync<string>("HelloWorld", input);
}

前記の C# コードは Durable Functions 2.x 用です。 Durable Functions 1.x では、OrchestrationClient 属性の代わりに DurableClient 属性を使用する必要があります。また、DurableOrchestrationClient ではなく IDurableOrchestrationClient パラメーター型を使用する必要があります。 バージョン間の違いの詳細については、 Durable Functions のバージョン に関する記事を参照してください。

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

index.js

const df = require("durable-functions");

module.exports = async function (context) {
    const client = df.getClient(context);
    return instanceId = await client.startNew("HelloWorld", undefined, context.bindings.input);
};

run.ps1

param([string] $input, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName $FunctionName -Input $input
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def durable_trigger(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

run.ps1

param([string]$InputData, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName 'HelloWorld' -Input $InputData
@FunctionName("QueueStart")
public void queueStart(
        @QueueTrigger(name = "input", queueName = "durable-function-trigger", connection = "Storage") String input,
        @DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
    // Orchestration input comes from the queue message content.
    durableContext.getClient().scheduleNewOrchestrationInstance("HelloWorld", input);
}

インスタンスの開始の詳細については、「インスタンス 管理」を参照してください。

エンティティ トリガー

エンティティ トリガーを使用すると、 エンティティ関数を作成できます。 このトリガーでは、特定のエンティティ インスタンスのイベントの処理がサポートされています。

エンティティ トリガーは、Durable Functions 2.x 以降で使用できます。

内部的には、このトリガー バインドによって、実行する必要がある新しいエンティティ操作について、構成された永続ストアがポーリングされます。

エンティティ トリガーは、 EntityTriggerAttribute .NET 属性を使用して構成されます。

エンティティ トリガーは、bindings 配列の次の JSON オブジェクトによって定義されます。

{
    "name": "<Name of input parameter in function signature>",
    "entityName": "<Optional - name of the entity>",
    "type": "entityTrigger",
    "direction": "in"
}

既定では、エンティティの名前は関数の名前です。

エンティティ トリガーは、Java ではまだサポートされていません。

エンティティ トリガーを定義する方法は、選択したプログラミング モデルによって異なります。

entity_trigger デコレーターを直接 Python 関数コードで使用します。

トリガーの動作

エンティティ トリガーに関する注意事項を次に示します。

  • シングル スレッド: 1 つのディスパッチャー スレッドを使用して、特定のエンティティの操作を処理します。 複数のメッセージが 1 つのエンティティに同時に送信される場合、操作は一度に 1 つずつ処理されます。
  • 有害メッセージ処理 - エンティティ トリガーに有害メッセージのサポートはありません。
  • メッセージの可視性 - エンティティ トリガー メッセージはデキューされ、構成可能な期間は非表示にされます。 これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。
  • 戻り値 - エンティティ関数は戻り値をサポートしていません。 特定の API を使用することで、状態を保存したり、オーケストレーションに値を渡したりすることができます。

実行中にエンティティに対して行われた状態の変更はいずれも、実行の完了後も自動的に保持されます。

エンティティ トリガーの定義と操作の詳細と例については、 Durable Entities のドキュメントを参照してください。

エンティティ クライアント

エンティティ クライアント バインドを使用すると、 エンティティ関数を非同期的にトリガーできます。 これらの関数は、 クライアント関数と呼ばれることもあります。

エンティティ クライアントにバインドするには、.NET クラス ライブラリ関数の DurableClientAttribute .NET 属性を使用します。

を使用してオーケストレーション クライアントにバインドすることもできます。

エンティティ クライアントは、bindings 配列の次の JSON オブジェクトによって定義されます。

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "durableClient",
    "direction": "in"
}
  • taskHub - 複数の関数アプリが同じストレージ アカウントを共有するが、相互に分離する必要があるシナリオで使用されます。 指定されていない場合は、host.json の既定値が使用されます。 この値は、ターゲットのエンティティ関数によって使用される値と一致している必要があります。
  • connectionName - ストレージ アカウント接続文字列を含むアプリ設定の名前。 この接続文字列で表されるストレージ アカウントは、ターゲットのエンティティ関数によって使用されるものと同じにする必要があります。 指定されない場合は、関数アプリの既定のストレージ アカウント接続文字列が使用されます。

ほとんどの場合、オプションのプロパティを省略し、既定の動作を使用することをお勧めします。

エンティティ クライアントを定義する方法は、選択したプログラミング モデルによって異なります。

durable_client_input デコレーターを直接 Python 関数コードで使用します。

エンティティ クライアントは、Java ではまだサポートされていません。

エンティティをクライアントとして操作する方法の詳細と例については、 Durable Entities のドキュメントを参照してください。

host.json 設定

Durable Functions の構成設定。

Durable Functions のすべてのメジャー バージョンは、Azure Functions ランタイムのすべてのバージョンでサポートされています。 ただし、host.json 構成のスキーマは、Azure Functions ランタイムのバージョンと使用する Durable Functions 拡張機能のバージョンによって若干異なります。 次の例は、Azure Functions 2.0 および3.0 で使用するためのものです。 どちらの例でも、Azure Functions 1.0 を使用している場合、使用可能な設定は同じですが、host.json の "durableTask" セクションは、"extensions" の下のフィールドとしてではなく、host.json 構成のルートに配置する必要があります。

{
 "extensions": {
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "connectionStringName": "AzureWebJobsStorage",
      "controlQueueBatchSize": 32,
      "controlQueueBufferThreshold": 256,
      "controlQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "partitionCount": 4,
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask",
      "useLegacyPartitionManagement": false,
      "useTablePartitionManagement": true,
      "workItemQueueVisibilityTimeout": "00:05:00",
    },
    "tracing": {
      "traceInputsAndOutputs": false,
      "traceReplayEvents": false,
    },
    "notifications": {
      "eventGrid": {
        "topicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
        "keySettingName": "EventGridKey",
        "publishRetryCount": 3,
        "publishRetryInterval": "00:00:30",
        "publishEventTypes": [
          "Started",
          "Completed",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "maxConcurrentEntityFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50,
    "maxOrchestrationActions": 100000,
    "storeInputsInOrchestrationHistory": false
  }
 }
}

タスク ハブの名前は、先頭文字をアルファベットとする必要があります。また、使用できるのはアルファベットと数値だけです。 指定しない場合、関数アプリの既定のタスク ハブ名は TestHubName です。 詳細については、「 タスク ハブ」を参照してください。

プロパティ 既定値 説明
ハブ名 TestHubName (Durable Functions 1.x を使用している場合は DurableFunctionsHub) 別の タスク ハブ 名を使用すると、同じストレージ バックエンドを使用している場合でも、複数の Durable Functions アプリケーションを互いに分離できます。
controlQueueBatchSize 32 コントロール キューから一度にプルするメッセージの数。
controlQueueBufferThreshold Python の従量課金プラン: 32
他の言語の従量課金プラン: 128
専用/Premium プラン: 256
一度にメモリにバッファー処理できる制御キュー メッセージの数。その時点で、ディスパッチャーは、追加のメッセージがデキューされるまで待機します。 状況によっては、この値を小さくすると、メモリ消費量が大幅に削減される場合があります。
パーティション数 4 コントロール キューのパーティション数。 1 から 16 までの正の整数を使用できます。 この値を変更するには、新しいタスク ハブを構成する必要があります。
キューの可視性タイムアウトを制御する 5 分 デキューされたコントロール キュー メッセージの表示タイムアウト。
workItemQueueVisibilityTimeout 5 分 デキューされた作業項目キュー メッセージの表示タイムアウト。
maxConcurrentActivityFunctions 従量課金プラン: 10
専用/Premium プラン: 現在のマシン上のプロセッサ数の 10 倍
1 つのホスト インスタンスで同時に処理できるアクティビティ関数の最大数。
maxConcurrentOrchestratorFunctions 消費プラン: 5
専用/Premium プラン: 現在のマシン上のプロセッサ数の 10 倍
1 つのホスト インスタンスで同時に処理できるオーケストレーター関数の最大数。
maxConcurrentEntityFunctions 消費プラン: 5
専用/Premium プラン: 現在のマシン上のプロセッサ数の 10 倍
1 つのホスト インスタンスで同時に処理できるエンティティ関数の最大数。 この設定は、 永続的なタスク スケジューラを使用する場合にのみ適用されます。 それ以外の場合、同時エンティティ実行の最大数は maxConcurrentOrchestratorFunctionsに制限されます。
maxQueuePollingInterval 30 秒 hh:mm:ss形式での制御の最大値および作業項目キューのポーリング間隔。 値が高くなるほどメッセージ処理の待機時間が長くなる可能性があります。 値が低くなるほどストレージ コストが高くなる可能性があります。これは、ストレージ トランザクションが増加するからです。
connectionName (2.7.0 以降)
接続文字列名 (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage (AzureのWebジョブストレージ) 基になる Azure Storage リソースへの接続方法を指定するアプリ設定または設定コレクションの名前。 1 つのアプリ設定を指定する場合は、Azure Storage 接続文字列にする必要があります。
trackingStoreConnectionName (2.7.0 以降)
トラッキングストア接続文字列名
履歴およびインスタンス テーブルへの接続方法を指定するアプリ設定または設定コレクションの名前。 1 つのアプリ設定を指定する場合は、Azure Storage 接続文字列にする必要があります。 指定しない場合は、connectionStringName (Durable 2.x) または azureStorageConnectionStringName (Durable 1.x) 接続が使用されます。
trackingStoreNamePrefix trackingStoreConnectionStringName が指定されているときに履歴テーブルとインスタンス テーブルに使用されるプレフィックス。 設定されていない場合、既定のプレフィックス値は DurableTask になります。 trackingStoreConnectionStringName が指定されていない場合、履歴テーブルとインスタンス テーブルは hubName 値をプレフィックスとして使用し、trackingStoreNamePrefix の設定はすべて無視されます。
入力と出力の追跡 偽り 関数呼び出しの入力と出力をトレースするかどうかを示す値。 関数の実行イベントをトレースした場合の既定の動作では、関数呼び出しのシリアル化された入力および出力のバイト数が記録されます。 この動作により、ログが肥大化することも、機密情報が誤って公開されることもなく、入力および出力に関する最小限の情報が示されます。 このプロパティを true に設定すると、既定の関数ログ記録によって、関数の入力および出力の内容全体がログに記録されます。
traceReplayEvents 偽り オーケストレーションの再生イベントを Application Insights に書き込むかどうかを示す値。
イベントグリッドトピックエンドポイント (eventGridTopicEndpoint) Azure Event Grid カスタム トピック エンドポイントの URL。 このプロパティが設定されている場合は、オーケストレーションのライフ サイクル通知イベントがこのエンドポイントに発行されます。 このプロパティは、アプリ設定の解決をサポートします。
イベントグリッドキー設定名 EventGridTopicEndpoint での Azure Event Grid カスタム トピックによる認証に使用されるキーを含むアプリ設定の名前。
eventGridPublishRetryCount 0 Event Grid トピックへの発行が失敗した場合に再試行する回数。
eventGridPublishRetryInterval 5 分 Event Grid は、 hh:mm:ss 形式で再試行間隔を発行します。
イベントグリッド公開イベントタイプ Event Grid に発行するイベントの種類の一覧。 指定されていない場合は、すべてのイベントの種類が発行されます。 指定できる値は、StartedCompletedFailedTerminated です。
ユーズアップリース ほんとう true に設定すると、アプリはタスク ハブ メッセージを処理する前にアプリレベルの BLOB リースを取得する必要があります。 詳細については、 ディザスター リカバリーと geo ディストリビューションのドキュメントを 参照してください。 v2.3.0 以降で利用可能です。
レガシーパーティション管理を使用する 偽り false に設定した場合は、スケールアウト時に関数の実行が重複する可能性を抑えるパーティション管理アルゴリズムを使用します。v2.3.0 以降で利用可能です。 この値を true に設定することはお勧めしません
テーブルパーティション管理の使用 (useTablePartitionManagement) v3.x 拡張機能バージョンでの true
v2.x 拡張機能バージョンでの false
true に設定すると、Azure Storage V2 アカウントのコストを削減するために設計されたパーティション管理アルゴリズムが使用されます。 WebJobs.Extensions.DurableTask v2.10.0 以降で利用可能です。 マネージド ID でこの設定を使用するには、WebJobs.Extensions.DurableTask v3.x 以降、または v1.2.x 以降のバージョンの Worker.Extensions.DurableTask が必要です。
useGracefulShutdown 偽り (プレビュー) 正常なシャットダウンを有効にして、ホストのシャットダウンでインプロセス関数の実行が失敗する可能性を減らします。
maxEntityOperationBatchSize(2.6.1) 消費プラン: 50
専用/プレミアム プラン: 5000
バッチとして処理されるエンティティ操作の最大数。 1 に設定すると、バッチ処理は無効になり、各操作メッセージは個別の関数呼び出しによって処理されます。
オーケストレーション履歴に入力を保存する 偽り true に設定すると、履歴テーブルにアクティビティ入力を保存するように Durable Task Framework に指示します。 これにより、オーケストレーション履歴のクエリを実行するときにアクティビティ関数の入力を表示できます。
maxGrpcメッセージサイズ(単位:バイト) 4194304 DurableTaskClient の gRPC クライアントが受信できるメッセージの最大サイズ (バイト単位) を設定する整数値。 これは、Durable Functions .NET Isolated と Java に適用されます。
grpcHttpClientTimeout 100 秒 .NET 分離アプリ (.NET 6 以降のバージョン) と Java で現在サポートされている Durable Functions の gRPC クライアントで使用される HTTP クライアントのタイムアウトを設定します。

これらの設定の多くはパフォーマンスの最適化を目的としています。 詳細については、「 パフォーマンスとスケール」を参照してください。

次のステップ