Durable Functions のバインド (Azure Functions)Bindings for Durable Functions (Azure Functions)

Durable Functions 拡張機能には、オーケストレーター関数とアクティビティ関数の実行を制御する 2 つの新しいトリガーのバインドが導入されています。The Durable Functions extension introduces two new trigger bindings that control the execution of orchestrator and activity functions. Durable Functions ランタイムのクライアントとして機能する出力バインドも導入されています。It also introduces an output binding that acts as a client for the Durable Functions runtime.

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

オーケストレーション トリガーを使用して、永続的なオーケストレーター関数を作成できます。The orchestration trigger enables you to author durable orchestrator functions. このトリガーは、新しいオーケストレーター関数インスタンスの開始と、タスクのために "待機している" 既存のオーケストレーター関数インスタンスの再開をサポートします。This trigger supports starting new orchestrator function instances and resuming existing orchestrator function instances that are "awaiting" a task.

Azure Functions 用の Visual Studio ツールを使用する場合、オーケストレーション トリガーは、OrchestrationTriggerAttribute .NET 属性を使用して構成されます。When you use the Visual Studio tools for Azure Functions, the orchestration trigger is configured using the OrchestrationTriggerAttribute .NET attribute.

オーケストレーター関数を (JavaScript や C# スクリプトなどの) スクリプト言語で記述する場合、オーケストレーション トリガーは、function.json ファイルの bindings 配列の次の JSON オブジェクトによって定義されます。When you write orchestrator functions in scripting languages (for example, JavaScript or C# scripting), the orchestration trigger is defined by the following JSON object in the bindings array of the function.json file:

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration は、クライアントがこのオーケストレーター関数の新しいインスタンスを開始するときに使用する必要がある、オーケストレーションの名前です。orchestration is the name of the orchestration that clients must use when they want to start new instances of this orchestrator function. このプロパティは省略可能です。This property is optional. 指定されない場合は関数の名前が使用されます。If not specified, the name of the function is used.

内部的には、このトリガーのバインドは、関数アプリの既定のストレージ アカウントで一連のキューをポーリングします。Internally this trigger binding polls a series of queues in the default storage account for the function app. これらのキューは拡張機能の内部実装の詳細であるため、バインド プロパティに明示的に構成されることはありません。These queues are internal implementation details of the extension, which is why they are not explicitly configured in the binding properties.

トリガーの動作Trigger behavior

オーケストレーション トリガーについての注意事項を次に示します。Here are some notes about the orchestration trigger:

  • シングル スレッド - 1 つのホスト インスタンスのすべてのオーケストレーター関数の実行で単一のディスパッチャー スレッドが使用されます。Single-threading - A single dispatcher thread is used for all orchestrator function execution on a single host instance. このため、オーケストレーター関数が効率的であり、I/O の実行がないことを保証することが重要です。For this reason, it is important to ensure that orchestrator function code is efficient and doesn't perform any I/O. さらに、このスレッドが、Durable Functions 固有のタスクの種類のために待機しているとき以外は、非同期操作を行わないことを保証することも重要です。It is also important to ensure that this thread does not do any async work except when awaiting on Durable Functions-specific task types.
  • 有害メッセージの処理 - オーケストレーション トリガーでは、有害メッセージはサポートされません。Poison-message handling - There is no poison message support in orchestration triggers.
  • メッセージの可視性 - オーケストレーション トリガー メッセージはキューから削除され、構成可能な期間にわたって非表示を保持します。Message visibility - Orchestration trigger messages are dequeued and kept invisible for a configurable duration. これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • 戻り値 - 戻り値は JSON にシリアル化され、Azure Table ストレージのオーケストレーション履歴テーブルに保存されます。Return values - Return values are serialized to JSON and persisted to the orchestration history table in Azure Table storage. これらの戻り値は、オーケストレーション クライアントのバインドによるクエリを実行できます。これについては、後で説明します。These return values can be queried by the orchestration client binding, described later.

警告

オーケストレーター関数は、オーケストレーション トリガーのバインドを除いて、入力または出力バインドを使用しないでください。Orchestrator functions should never use any input or output bindings other than the orchestration trigger binding. これらのバインドはシングル スレッド ルールと I/O ルールに従っていない可能性があるため、これらのバインドを実行すると、Durable Task 拡張機能で問題が発生する可能性があります。Doing so has the potential to cause problems with the Durable Task extension because those bindings may not obey the single-threading and I/O rules. 他のバインドを使用する場合は、Orchestrator 関数から呼び出されたアクティビティ関数にそれらを追加します。If you'd like to use other bindings, add them to an Activity function called from your Orchestrator function.

警告

JavaScript オーケストレーター関数は、async で宣言してはなりません。JavaScript orchestrator functions should never be declared async.

トリガーの使用方法 (.NET)Trigger usage (.NET)

オーケストレーション トリガーのバインドは、入力と出力の両方をサポートします。The orchestration trigger binding supports both inputs and outputs. 入力と出力の処理に関する注意事項を次に示します。Here are some things to know about input and output handling:

  • 入力 - .NET オーケストレーション関数は、パラメーター型として DurableOrchestrationContext のみをサポートします。inputs - .NET orchestration functions support only DurableOrchestrationContext as a parameter type. 関数シグネチャ内で入力を直接逆シリアル化することはサポートされていません。Deserialization of inputs directly in the function signature is not supported. コードでは、GetInput<T> (.NET) または getInput (JavaScript) メソッドを使用してオーケストレーター関数の入力をフェッチする必要があります。Code must use the GetInput<T> (.NET) or getInput (JavaScript) method to fetch orchestrator function inputs. これらの入力は、JSON にシリアル化できる型にする必要があります。These inputs must be JSON-serializable types.
  • 出力 - オーケストレーション トリガーは、入力と同じように出力値をサポートします。outputs - Orchestration triggers support output values as well as inputs. 関数の戻り値は、出力値を割り当てるために使用され、JSON にシリアル化できる必要があります。The return value of the function is used to assign the output value and must be JSON-serializable. .NET 関数が Task または void を返した場合は、出力として null 値が保存されます。If a .NET function returns Task or void, a null value will be saved as the output.

トリガー サンプルTrigger sample

最もシンプルな "Hello World" オーケストレーター関数のコードの例を次に示します。The following example code shows what the simplest "Hello World" orchestrator function might look like:

C#C#

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

注意

前記のコードは Durable Functions 2.x 用です。The previous code is for Durable Functions 2.x. Durable Functions 1.x の場合、IDurableOrchestrationContext の代わりに DurableOrchestrationContext を使用する必要があります。For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions Versions article.

JavaScript (Functions 2.0 のみ)JavaScript (Functions 2.0 only)

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

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

注意

JavaScript の context オブジェクトは、DurableOrchestrationContext ではなく、関数コンテキスト全体を表しています。The context object in JavaScript does not represent the DurableOrchestrationContext, but the function context as a whole. context オブジェクトの df プロパティによって、オーケストレーション メソッドにアクセスできます。You can access orchestration methods via the context object's df property.

注意

JavaScript オーケストレーターでは return を使用する必要があります。JavaScript orchestrators should use return. durable-functions ライブラリは、context.done メソッドの呼び出しを管理します。The durable-functions library takes care of calling the context.done method.

オーケストレーター関数の大半はアクティビティ関数を呼び出すため、"Hello World" の例でアクティビティ関数を呼び出す方法を示します。Most orchestrator functions call activity functions, so here is a "Hello World" example that demonstrates how to call an activity function:

C#C#

[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 用です。The previous code is for Durable Functions 2.x. Durable Functions 1.x の場合、IDurableOrchestrationContext の代わりに DurableOrchestrationContext を使用する必要があります。For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions versions article.

JavaScript (Functions 2.0 のみ)JavaScript (Functions 2.0 only)

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;
});

アクティビティ トリガーActivity trigger

アクティビティ トリガーを使用すると、オーケストレーター関数によって呼び出される関数 (アクティビティ関数と呼ばれる) を作成できます。The activity trigger enables you to author functions that are called by orchestrator functions, known as activity functions.

Visual Studio を使用する場合、アクティビティ トリガーは ActivityTriggerAttribute .NET 属性を使用して構成されます。If you're using Visual Studio, the activity trigger is configured using the ActivityTriggerAttribute .NET attribute.

VS Code または Azure portal を使用して開発する場合、アクティビティ トリガーは function.jsonbindings 配列で次の JSON オブジェクトによって定義されます。If you're using VS Code or the Azure portal for development, the activity trigger is defined by the following JSON object in the bindings array of function.json:

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

内部的には、このトリガーのバインドは、関数アプリの既定のストレージ アカウントでキューをポーリングします。Internally this trigger binding polls a queue in the default storage account for the function app. このキューは拡張機能の内部実装の詳細であるため、バインド プロパティに明示的に構成されることはありません。This queue is an internal implementation detail of the extension, which is why it is not explicitly configured in the binding properties.

トリガーの動作Trigger behavior

アクティビティ トリガーに関する注意事項を次に示します。Here are some notes about the activity trigger:

  • スレッド処理 - オーケストレーション トリガーとは異なり、アクティビティ トリガーにはスレッド処理と I/O に関する制限はありません。Threading - Unlike the orchestration trigger, activity triggers don't have any restrictions around threading or I/O. それらは、標準的な関数と同様に扱うことができます。They can be treated like regular functions.
  • 有害メッセージの処理 - アクティビティ トリガーには、有害メッセージのサポートはありません。Poison-message handling - There is no poison message support in activity triggers.
  • メッセージの可視性 - アクティビティ トリガー メッセージはキューから削除され、構成可能な期間にわたって非表示を保持します。Message visibility - Activity trigger messages are dequeued and kept invisible for a configurable duration. これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • 戻り値 - 戻り値は JSON にシリアル化され、Azure Table ストレージのオーケストレーション履歴テーブルに保存されます。Return values - Return values are serialized to JSON and persisted to the orchestration history table in Azure Table storage.

警告

アクティビティ関数のストレージ バックエンドは実装の詳細であるため、ユーザー コードはこれらのストレージ エンティティと直接対話すべきではありません。The storage backend for activity functions is an implementation detail and user code should not interact with these storage entities directly.

トリガーの使用方法 (.NET)Trigger usage (.NET)

アクティビティ トリガーのバインドは、オーケストレーション トリガーと同じように、入力と出力の両方をサポートします。The activity trigger binding supports both inputs and outputs, just like the orchestration trigger. 入力と出力の処理に関する注意事項を次に示します。Here are some things to know about input and output handling:

  • 入力 - .NET アクティビティ関数は、パラメーター型として DurableActivityContext をネイティブに使用します。inputs - .NET activity functions natively use DurableActivityContext as a parameter type. 別の方法として、JSON にシリアル化できるパラメーター型を使用してアクティビティ関数を宣言できます。Alternatively, an activity function can be declared with any parameter type that is JSON-serializable. DurableActivityContext を使用する場合は、GetInput<T> を呼び出して、アクティビティ関数の入力をフェッチして逆シリアル化できます。When you use DurableActivityContext, you can call GetInput<T> to fetch and deserialize the activity function input.
  • 出力 - アクティビティ関数は、入力と同じように出力値をサポートします。outputs - Activity functions support output values as well as inputs. 関数の戻り値は、出力値を割り当てるために使用され、JSON にシリアル化できる必要があります。The return value of the function is used to assign the output value and must be JSON-serializable. .NET 関数が Task または void を返した場合は、出力として null 値が保存されます。If a .NET function returns Task or void, a null value will be saved as the output.
  • メタデータ - .NET アクティビティ関数を string instanceId パラメーターにバインドして、親オーケストレーションのインスタンス ID を取得できます。metadata - .NET activity functions can bind to a string instanceId parameter to get the instance ID of the parent orchestration.

トリガー サンプルTrigger sample

シンプルな "Hello World" アクティビティ関数のコードの例を次に示します。The following example code shows what a simple "Hello World" activity function might look like:

C#C#

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

注意

前記のコードは Durable Functions 2.x 用です。The previous code is for Durable Functions 2.x. Durable Functions 1.x の場合、IDurableActivityContext の代わりに DurableActivityContext を使用する必要があります。For Durable Functions 1.x, you must use DurableActivityContext instead of IDurableActivityContext. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions Versions article.

.NET ActivityTriggerAttribute バインドの既定のパラメーター型は IDurableActivityContext です。The default parameter type for the .NET ActivityTriggerAttribute binding is IDurableActivityContext. ただし、.NET アクティビティ トリガーは、JSON にシリアル化できる型 (プリミティブ型を含む) への直接的なバインドもサポートしているため、同じ関数を次のように単純化できます。However, .NET activity triggers also support binding directly to JSON-serializeable types (including primitive types), so the same function could be simplified as follows:

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}

JavaScript (Functions 2.0 のみ)JavaScript (Functions 2.0 only)

module.exports = async function(context) {
    return `Hello ${context.bindings.name}!`;
};

JavaScript のバインドは、追加のパラメーターとして渡すこともできるため、同じ関数を次のように単純化できます。JavaScript bindings can also be passed in as additional parameters, so the same function could be simplified as follows:

module.exports = async function(context, name) {
    return `Hello ${name}!`;
};

入出力バインドを使用するUsing input and output bindings

アクティビティ トリガーのバインドに加えて、通常の入出力バインドを使用できます。You can use regular input and output bindings in addition to the activity trigger binding. たとえば、アクティビティ バインドへの入力を取得し、EventHub 出力バインドを使用して EventHub にメッセージを送信できます。For example, you can take the input to your activity binding, and send a message to an EventHub using the EventHub output binding:

{
  "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;
};

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

オーケストレーション クライアントのバインドを使用すると、オーケストレーター関数とやりとりする関数を記述できます。The orchestration client binding enables you to write functions that interact with orchestrator functions. これらの関数は、クライアント関数と呼ばれることもあります。These functions are sometimes referred to as client functions. たとえば、次のようにオーケストレーション インスタンスを操作できます。For example, you can act on orchestration instances in the following ways:

  • インスタンスを開始する。Start them.
  • インスタンスの状態をクエリする。Query their status.
  • インスタンスを終了する。Terminate them.
  • インスタンスの実行中にイベントを送信する。Send events to them while they're running.
  • インスタンスの履歴を消去します。Purge instance history.

Visual Studio を使用する場合は、Durable Functions 1.0 用の OrchestrationClientAttribute .NET 属性を使用してオーケストレーション クライアントにバインドできます。If you're using Visual Studio, you can bind to the orchestration client by using the OrchestrationClientAttribute .NET attribute for Durable Functions 1.0. Durable Functions 2.0 以降では、DurableClientAttribute .NET 属性を使用してオーケストレーション クライアントにバインドできます。Starting in the Durable Functions 2.0, you can bind to the orchestration client by using the DurableClientAttribute .NET attribute.

スクリプト言語 ( .csx ファイル、 .js ファイルなど) を使用して開発する場合、オーケストレーション トリガーは、function.jsonbindings 配列で次の JSON オブジェクトによって定義されます。If you're using scripting languages (for example, .csx or .js files) for development, the orchestration trigger is defined by the following JSON object in the bindings array of function.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 - 複数の関数アプリが同じストレージ アカウントを共有するが、相互に分離する必要があるシナリオで使用されます。taskHub - Used in scenarios where multiple function apps share the same storage account but need to be isolated from each other. 指定されていない場合は、host.json の既定値が使用されます。If not specified, the default value from host.json is used. この値は、ターゲットのオーケストレーター関数によって使用される値と一致している必要があります。This value must match the value used by the target orchestrator functions.
  • connectionName - ストレージ アカウント接続文字列を含むアプリ設定の名前。connectionName - The name of an app setting that contains a storage account connection string. この接続文字列で表されるストレージ アカウントは、ターゲットのオーケストレーター関数によって使用されるものと同じにする必要があります。The storage account represented by this connection string must be the same one used by the target orchestrator functions. 指定されない場合は、関数アプリの既定のストレージ アカウント接続文字列が使用されます。If not specified, the default storage account connection string for the function app is used.

注意

ほとんどの場合、これらのプロパティを省略し、既定の動作を使用することをお勧めします。In most cases, we recommend that you omit these properties and rely on the default behavior.

クライアントの使用Client usage

.NET 関数では、通常は、IDurableOrchestrationClient にバインドします。これにより、Durable Functions によってサポートされるすべてのオーケストレーション クライアント API にフル アクセスできます。In .NET functions, you typically bind to IDurableOrchestrationClient, which gives you full access to all orchestration client APIs supported by Durable Functions. 古い Durable Functions 2.x リリースでは、代わりに DurableOrchestrationClient クラスにバインドします。In the older Durable Functions 2.x releases, you instead bind to the DurableOrchestrationClient class. JavaScript では、同じ API が、getClient から返されるオブジェクトによって公開されます。In JavaScript, the same APIs are exposed by the object returned from getClient. クライアント オブジェクトの API には以下が含まれます。APIs on the client object include:

  • StartNewAsync
  • GetStatusAsync
  • TerminateAsync
  • RaiseEventAsync
  • PurgeInstanceHistoryAsync
  • CreateCheckStatusResponse
  • CreateHttpManagementPayload

.NET 関数は IAsyncCollector<T> にバインドすることもできます。TStartOrchestrationArgs または JObject です。Alternatively, .NET functions can bind to IAsyncCollector<T> where T is StartOrchestrationArgs or JObject.

これらの操作の詳細については、IDurableOrchestrationClient API のドキュメントを参照してください。For more information on these operations, see the IDurableOrchestrationClient API documentation.

クライアントのサンプル (Visual Studio での開発)Client sample (Visual Studio development)

"HelloWorld" オーケストレーションを開始するキューによってトリガーされる関数の例を次に示します。Here is an example queue-triggered function that starts a "HelloWorld" orchestration.

[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("HelloWorld", input);
}

注意

前記の C# コードは Durable Functions 2.x 用です。The previous C# code is for Durable Functions 2.x. Durable Functions 1.x では、DurableClient 属性の代わりに OrchestrationClient 属性を使用する必要があります。また、IDurableOrchestrationClient ではなく DurableOrchestrationClient パラメーター型を使用する必要があります。For Durable Functions 1.x, you must use OrchestrationClient attribute instead of the DurableClient attribute, and you must use the DurableOrchestrationClient parameter type instead of IDurableOrchestrationClient. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions Versions article.

クライアントのサンプル (Visual Studio 以外)Client sample (not Visual Studio)

開発用に Visual Studio を使用していない場合は、次の function.json ファイルを作成できます。If you're not using Visual Studio for development, you can create the following function.json file. この例は、永続的なオーケストレーション クライアントのバインドを使用するキューによってトリガーされる関数の構成方法を示しています。This example shows how to configure a queue-triggered function that uses the durable orchestration client binding:

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

注意

前記の JSON は Durable Functions 2.x 用です。The previous JSON is for Durable Functions 2.x. Durable Functions 1.x の場合、トリガー型として durableClient の代わりに orchestrationClient を使用する必要があります。For Durable Functions 1.x, you must use orchestrationClient instead of the durableClient as the trigger type. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions Versions article.

新しいオーケストレーター関数のインスタンスを開始する言語固有のサンプルを次に示します。Following are language-specific samples that start new orchestrator function instances.

C# スクリプトのサンプルC# Script Sample

次の例は、永続的なオーケストレーション クライアントのバインドを使用して、キューによってトリガーされる C# 関数から新しい関数インスタンスを開始する方法を示しています。The following sample shows how to use the durable orchestration client binding to start a new function instance from a queue-triggered C# function:

#r "Microsoft.Azure.WebJobs.Extensions.DurableTask"

using Microsoft.Azure.WebJobs.Extensions.DurableTask;

public static Task Run(string input, IDurableOrchestrationClient starter)
{
    return starter.StartNewAsync("HelloWorld", input);
}

注意

前記のコードは Durable Functions 2.x 用です。The previous code is for Durable Functions 2.x. Durable Functions 1.x の場合、IDurableOrchestrationClient の代わりに DurableOrchestrationClient パラメーター型を使用する必要があります。For Durable Functions 1.x, you must use the DurableOrchestrationClient parameter type instead of IDurableOrchestrationClient. バージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between versions, see the Durable Functions Versions article.

JavaScript のサンプルJavaScript Sample

次の例は、永続的なオーケストレーション クライアントのバインドを使用して、JavaScript 関数から新しい関数インスタンスを開始する方法を示しています。The following sample shows how to use the durable orchestration client binding to start a new function instance from a JavaScript function:

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);
};

インスタンスの開始の詳細については、インスタンスの管理に関する記事を参照してください。More details on starting instances can be found in Instance management.

エンティティ トリガーEntity trigger

エンティティ トリガーを使用すると、エンティティ関数を作成できます。Entity triggers allow you to author entity functions. このトリガーでは、特定のエンティティ インスタンスのイベントの処理がサポートされています。This trigger supports processing events for a specific entity instance.

Azure Functions 用の Visual Studio ツールを使用する場合、エンティティ トリガーは、EntityTriggerAttribute .NET 属性を使用して構成されます。When you use the Visual Studio tools for Azure Functions, the entity trigger is configured using the EntityTriggerAttribute .NET attribute.

注意

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

内部的には、このトリガーのバインドは、関数アプリの既定のストレージ アカウントで一連のキューをポーリングします。Internally this trigger binding polls a series of queues in the default storage account for the function app. これらのキューは拡張機能の内部実装の詳細であるため、バインド プロパティに明示的に構成されることはありません。These queues are internal implementation details of the extension, which is why they are not explicitly configured in the binding properties.

トリガーの動作Trigger behavior

エンティティ トリガーに関する注意事項を次に示します。Here are some notes about the entity trigger:

  • シングルスレッド: 特定のエンティティに対する操作を処理する場合は、単一のディスパッチャー スレッドが使用されます。Single-threaded: A single dispatcher thread is used to process operations for a particular entity. 複数のメッセージが同時に 1 つのエンティティに送信される場合、操作は一度に 1 つずつ処理されます。If multiple messages are sent to a single entity concurrently, the operations will be processed one-at-a-time.
  • 有害メッセージの処理 - エンティティ トリガーには、有害メッセージのサポートはありません。Poison-message handling - There is no poison message support in entity triggers.
  • メッセージの可視性 - エンティティ トリガー メッセージはキューから削除され、構成可能な期間にわたって非表示を保持します。Message visibility - Entity trigger messages are dequeued and kept invisible for a configurable duration. これらのメッセージの可視性は、関数アプリが正常に実行されている限り、自動的に更新されます。The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • 戻り値 - エンティティ関数では戻り値はサポートされていません。Return values - Entity functions do not support return values. 特定の API を使用することで、状態を保存したり、オーケストレーションに値を渡したりすることができます。There are specific APIs that can be used to save state or pass values back to orchestrations.

実行中にエンティティに対して行われた状態の変更はいずれも、実行の完了後も自動的に保持されます。Any state changes made to an entity during its execution will be automatically persisted after execution has completed.

トリガーの使用方法 (.NET)Trigger usage (.NET)

すべてのエンティティ関数は、IDurableEntityContext のパラメーター型を備え、それには次のメンバーが含まれています。Every entity function has a parameter type of IDurableEntityContext, which has the following members:

  • EntityName: 現在実行中のエンティティの名前です。EntityName: the name of the currently executing entity.
  • EntityKey: 現在実行中のエンティティのキーです。EntityKey: the key of the currently executing entity.
  • EntityId: 現在実行中のエンティティの ID です。EntityId: the ID of the currently executing entity.
  • OperationName: 現在の操作の名前です。OperationName: the name of the current operation.
  • HasState: エンティティが存在するかどうか、つまり、何らかの状態にあるかどうか。HasState: whether the entity exists, that is, has some state.
  • GetState<TState>() : エンティティの現在の状態を取得します。GetState<TState>(): gets the current state of the entity. まだ存在しない場合は、作成されて、default<TState> に初期化されます。If it does not already exist, it is created and initialized to default<TState>. TState パラメーターは、プリミティブ型または JSON にシリアル化できる型にする必要があります。The TState parameter must be a primitive or JSON-serializeable type.
  • GetState<TState>(initfunction) : エンティティの現在の状態を取得します。GetState<TState>(initfunction): gets the current state of the entity. まだ存在しない場合は、指定された initfunction パラメーターを呼び出して作成されます。If it does not already exist, it is created by calling the provided initfunction parameter. TState パラメーターは、プリミティブ型または JSON にシリアル化できる型にする必要があります。The TState parameter must be a primitive or JSON-serializeable type.
  • SetState(arg) : エンティティの状態を作成または更新します。SetState(arg): creates or updates the state of the entity. arg パラメーターは、JSON にシリアル化できるオブジェクトまたはプリミティブにする必要があります。The arg parameter must be a JSON-serializeable object or primitive.
  • DeleteState() : エンティティの状態を削除します。DeleteState(): deletes the state of the entity.
  • GetInput<TInput>() : 現在操作に対する入力を取得します。GetInput<TInput>(): gets the input for the current operation. TInput 型パラメーターは、プリミティブ型または JSON にシリアル化できる型にする必要があります。The TInput type parameter must be a primitive or JSON-serializeable type.
  • Return(arg) : 操作を呼び出したオーケストレーションに値を返します。Return(arg): returns a value to the orchestration that called the operation. arg パラメーターは、プリミティブ オブジェクトまたは JSON にシリアル化できるオブジェクトにする必要があります。The arg parameter must be a primitive or JSON-serializeable object.
  • SignalEntity(EntityId, operation, input) : エンティティに一方向のメッセージを送信します。SignalEntity(EntityId, operation, input): sends a one-way message to an entity. operation パラメーターは null 以外の文字列とし、input パラメーターはプリミティブ オブジェクトまたは JSON にシリアル化できるオブジェクトとする必要があります。The operation parameter must be a non-null string, and the input parameter must be a primitive or JSON-serializeable object.
  • CreateNewOrchestration(orchestratorFunctionName, input) : 新しいオーケストレーションを開始します。CreateNewOrchestration(orchestratorFunctionName, input): starts a new orchestration. input パラメーターは、プリミティブ オブジェクトまたは JSON にシリアル化できるオブジェクトにする必要があります。The input parameter must be a primitive or JSON-serializeable object.

エンティティ関数に渡される IDurableEntityContext オブジェクトには、Entity.Current 非同期ローカル プロパティを使用してアクセスできます。The IDurableEntityContext object passed to the entity function can be accessed using the Entity.Current async-local property. この方法は、クラスベースのプログラミング モデルを使用する場合に便利です。This approach is convenient when using the class-based programming model.

トリガーのサンプル (C# 関数ベースの構文)Trigger sample (C# function-based syntax)

次のコードは、持続的関数として実装されているシンプルな Counter エンティティの例です。The following code is an example of a simple Counter entity implemented as a durable function. この関数では 3 つの操作 addresetget が定義されていて、いずれも整数の状態に対して動作します。This function defines three operations, add, reset, and get, each of which operate on an integer state.

[FunctionName("Counter")]
public static void Counter([EntityTrigger] IDurableEntityContext ctx)
{
    switch (ctx.OperationName.ToLowerInvariant())
    {
        case "add":
            ctx.SetState(ctx.GetState<int>() + ctx.GetInput<int>());
            break;
        case "reset":
            ctx.SetState(0);
            break;
        case "get":
            ctx.Return(ctx.GetState<int>()));
            break;
    }
}

関数ベースの構文と使用方法の詳細については、「Function ベースの構文」を参照してください。For more information on the function-based syntax and how to use it, see Function-Based Syntax.

トリガーのサンプル (C# クラスベースの構文)Trigger sample (C# class-based syntax)

次の例は、クラスとメソッドを使用した Counter エンティティの同等の実装です。The following example is an equivalent implementation of the Counter entity using classes and methods.

[JsonObject(MemberSerialization.OptIn)]
public class Counter
{
    [JsonProperty("value")]
    public int CurrentValue { get; set; }

    public void Add(int amount) => this.CurrentValue += amount;

    public void Reset() => this.CurrentValue = 0;

    public int Get() => this.CurrentValue;

    [FunctionName(nameof(Counter))]
    public static Task Run([EntityTrigger] IDurableEntityContext ctx)
        => ctx.DispatchAsync<Counter>();
}

このエンティティの状態は Counter 型のオブジェクトになっています。これには、カウンターの現在の値を格納するフィールドが含まれます。The state of this entity is an object of type Counter, which contains a field that stores the current value of the counter. このオブジェクトは、ストレージに保持するために、Json.NET ライブラリによってシリアル化および逆シリアル化されます。To persist this object in storage, it is serialized and deserialized by the Json.NET library.

クラスベースの構文とその使用方法の詳細については、「エンティティ クラスの定義」を参照してください。For more information on the class-based syntax and how to use it, see Defining entity classes.

注意

エンティティ クラスを使用するときは、[FunctionName] 属性を持つ関数エントリ ポイント メソッドを、static と宣言する "必要があります"。The function entry point method with the [FunctionName] attribute must be declared static when using entity classes. 非静的なエントリ ポイント メソッドを使用すると、複数のオブジェクトが初期化されたり、他の未定義の動作が発生したりする可能性があります。Non-static entry point methods may result in multiple object initialization and potentially other undefined behaviors.

エンティティ クラスには、バインディングおよび .NET 依存関係の挿入を対話処理するための特別なメカニズムがあります。Entity classes have special mechanisms for interacting with bindings and .NET dependency injection. 詳細については、「エンティティの構築」をご覧ください。For more information, see Entity construction.

トリガーのサンプル (JavaScript)Trigger sample (JavaScript)

次のコードは、JavaScript で記述した持続的関数として実装されているシンプルな Counter エンティティの例です。The following code is an example of a simple Counter entity implemented as a durable function written in JavaScript. この関数では 3 つの操作 addresetget が定義されていて、いずれも整数の状態に対して動作します。This function defines three operations, add, reset, and get, each of which operate on an integer state.

function.jsonfunction.json

{
  "bindings": [
    {
      "name": "context",
      "type": "entityTrigger",
      "direction": "in"
    }
  ],
  "disabled": false
}

index.jsindex.js

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

module.exports = df.entity(function(context) {
    const currentValue = context.df.getState(() => 0);
    switch (context.df.operationName) {
        case "add":
            const amount = context.df.getInput();
            context.df.setState(currentValue + amount);
            break;
        case "reset":
            context.df.setState(0);
            break;
        case "get":
            context.df.return(currentValue);
            break;
    }
});

注意

durable-functions npm パッケージのバージョン 1.3.0 以降では、JavaScript で持続エンティティが利用できます。Durable entities are available in JavaScript starting with version 1.3.0 of the durable-functions npm package.

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

エンティティ クライアント バインディングを使用すると、エンティティ関数を非同期的にトリガーできます。The entity client binding enables you to asynchronously trigger entity functions. これらの関数は、クライアント関数と呼ばれることもあります。These functions are sometimes referred to as client functions.

Visual Studio を使用する場合は、DurableClientAttribute .NET 属性を使用してエンティティ クライアントにバインドできます。If you're using Visual Studio, you can bind to the entity client by using the DurableClientAttribute .NET attribute.

注意

また、[DurableClientAttribute] を使用して、オーケストレーション クライアントにバインドすることもできます。The [DurableClientAttribute] can also be used to bind to the orchestration client.

スクリプト言語 ( .csx ファイル、 .js ファイルなど) を使用して開発する場合、エンティティ トリガーは、function.jsonbindings 配列で次の JSON オブジェクトによって定義されます。If you're using scripting languages (for example, .csx or .js files) for development, the entity trigger is defined by the following JSON object in the bindings array of function.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": "out"
}
  • taskHub - 複数の関数アプリが同じストレージ アカウントを共有するが、相互に分離する必要があるシナリオで使用されます。taskHub - Used in scenarios where multiple function apps share the same storage account but need to be isolated from each other. 指定されていない場合は、host.json の既定値が使用されます。If not specified, the default value from host.json is used. この値は、ターゲットのエンティティ関数によって使用される値と一致している必要があります。This value must match the value used by the target entity functions.
  • connectionName - ストレージ アカウント接続文字列を含むアプリ設定の名前。connectionName - The name of an app setting that contains a storage account connection string. この接続文字列で表されるストレージ アカウントは、ターゲットのエンティティ関数によって使用されるものと同じにする必要があります。The storage account represented by this connection string must be the same one used by the target entity functions. 指定されない場合は、関数アプリの既定のストレージ アカウント接続文字列が使用されます。If not specified, the default storage account connection string for the function app is used.

注意

ほとんどの場合、オプションのプロパティを省略し、既定の動作を使用することをお勧めします。In most cases, we recommend that you omit the optional properties and rely on the default behavior.

エンティティ クライアントの使用Entity client usage

.NET 関数では、通常は、IDurableEntityClient にバインドします。これにより、持続エンティティによってサポートされるすべてのクライアント API にフル アクセスできます。In .NET functions, you typically bind to IDurableEntityClient, which gives you full access to all client APIs supported by Durable Entities. また、IDurableOrchestrationClient インターフェイスにバインドすることもできます。これにより、エンティティとオーケストレーションの両方のクライアント API にアクセスできるようになります。You can also bind to the IDurableOrchestrationClient interface, which provides access to client APIs for both entities and orchestrations. クライアント オブジェクトの API には以下が含まれます。APIs on the client object include:

  • ReadEntityStateAsync<T> : エンティティの状態を読み取ります。ReadEntityStateAsync<T>: reads the state of an entity. ターゲット エンティティが存在するかどうかを示す応答が返されます。存在する場合は、その状態も返されます。It returns a response that indicates whether the target entity exists, and if so, what its state is.
  • SignalEntityAsync: エンティティに一方向のメッセージを送信し、エンキューされるまで待機します。SignalEntityAsync: sends a one-way message to an entity, and waits for it to be enqueued.

シグナルを送信する前にターゲット エンティティを作成する必要はありません。エンティティの状態は、シグナルを処理するエンティティ関数内で作成できます。There is no need to create the target entity before sending a signal - the entity state can be created from within the entity function that handles the signal.

注意

クライアントから送信された "シグナル" は、単にエンキューされ、後で非同期的に処理されることを理解しておくことが重要です。It's important to understand that the "signals" sent from the client are simply enqueued, to be processed asynchronously at a later time. 特に、SignalEntityAsync は、通常、エンティティが操作を開始する前に戻ります。戻り値を取得したり、例外を監視したりすることはできません。In particular, the SignalEntityAsync usually returns before the entity even starts the operation, and it is not possible to get back the return value or observe exceptions. より強力な保証が必要な場合 (ワークフローの場合など)、オーケストレーター関数を使用する必要があります。これにより、エンティティ操作の完了を待機し、戻り値を処理して例外を監視することができます。If stronger guarantees are required (e.g. for workflows), orchestrator functions should be used, which can wait for entity operations to complete, and can process return values and observe exceptions.

例: クライアントがエンティティにシグナル通知を直接出す - C#Example: client signals entity directly - C#

"Counter" エンティティを呼び出す、キューによってトリガーされる関数の例を次に示します。Here is an example queue-triggered function that invokes a "Counter" entity.

[FunctionName("AddFromQueue")]
public static Task Run(
    [QueueTrigger("durable-function-trigger")] string input,
    [DurableClient] IDurableEntityClient client)
{
    // Entity operation input comes from the queue message content.
    var entityId = new EntityId(nameof(Counter), "myCounter");
    int amount = int.Parse(input);
    return client.SignalEntityAsync(entityId, "Add", amount);
}

例: クライアントがインターフェイスを介してエンティティにシグナル通知を出す - C#Example: client signals entity via interface - C#

可能な場合は、より多くの型チェックが提供されるので、インターフェイスを介してエンティティにアクセスすることをお勧めします。Where possible, we recommend accessing entities through interfaces because it provides more type checking. たとえば、前述の Counter エンティティによって、次のように定義された ICounter インターフェイスが実装されたとします。For example, suppose the Counter entity mentioned earlier implemented an ICounter interface, defined as follows:

public interface ICounter
{
    void Add(int amount);
    void Reset();
    Task<int> Get();
}

public class Counter : ICounter
{
    // ...
}

クライアント コードでは、SignalEntityAsync<ICounter> を使用してタイプセーフなプロキシを生成できます。Client code can then use SignalEntityAsync<ICounter> to generate a type-safe proxy:

[FunctionName("UserDeleteAvailable")]
public static async Task AddValueClient(
    [QueueTrigger("my-queue")] string message,
    [DurableClient] IDurableEntityClient client)
{
    var target = new EntityId(nameof(Counter), "myCounter");
    int amount = int.Parse(message);
    await client.SignalEntityAsync<ICounter>(target, proxy => proxy.Add(amount));
}

proxy パラメーターは動的に生成された ICounter のインスタンスであり、Add への呼び出しを、SignalEntityAsync への同等の (型指定されていない) 呼び出しに内部的に変換します。The proxy parameter is a dynamically generated instance of ICounter, which internally translates the call to Add into the equivalent (untyped) call to SignalEntityAsync.

注意

SignalEntityAsync API は一方向の操作を表します。The SignalEntityAsync APIs represent one-way operations. エンティティ インターフェイスから Task<T> が返された場合、T パラメーターの値は常に null または default になります。If an entity interfaces returns Task<T>, the value of the T parameter will always be null or default.

特に、値が返されないため、Get 操作にシグナル通知を出すことは意味がありません。In particular, it does not make sense to signal the Get operation, as no value is returned. 代わりに、クライアントは ReadStateAsync を使用してカウンターの状態に直接アクセスするか、Get 操作を呼び出すオーケストレーター関数を開始できます。Instead, clients can use either ReadStateAsync to access the counter state directly, or can start an orchestrator function that calls the Get operation.

例: クライアントがエンティティにシグナル通知を出す - JavaScriptExample: client signals entity - JavaScript

次に示すのは、キューによってトリガーされ "Counter" エンティティにシグナル通知を出す JavaScript 関数の例です。Here is an example queue-triggered function that signals a "Counter" entity in JavaScript.

function.jsonfunction.json

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

index.jsindex.js

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

module.exports = async function (context) {
    const client = df.getClient(context);
    const entityId = new df.EntityId("Counter", "myCounter");
    await context.df.signalEntity(entityId, "add", 1);
};

注意

durable-functions npm パッケージのバージョン 1.3.0 以降では、JavaScript で持続エンティティが利用できます。Durable entities are available in JavaScript starting with version 1.3.0 of the durable-functions npm package.

host.json 設定host.json settings

Durable Functions の構成設定。Configuration settings for Durable Functions.

Durable Functions 1.xDurable Functions 1.x

{
  "durableTask": {
    "hubName": "MyTaskHub",
    "controlQueueBatchSize": 32,
    "partitionCount": 4,
    "controlQueueVisibilityTimeout": "00:05:00",
    "workItemQueueVisibilityTimeout": "00:05:00",
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "maxQueuePollingInterval": "00:00:30",
    "azureStorageConnectionStringName": "AzureWebJobsStorage",
    "trackingStoreConnectionStringName": "TrackingStorage",
    "trackingStoreNamePrefix": "DurableTask",
    "traceInputsAndOutputs": false,
    "logReplayEvents": false,
    "eventGridTopicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName":  "EventGridKey",
    "eventGridPublishRetryCount": 3,
    "eventGridPublishRetryInterval": "00:00:30",
    "eventGridPublishEventTypes": ["Started", "Completed", "Failed", "Terminated"]
  }
}

Durable Functions 2.xDurable Functions 2.x

{
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "controlQueueBatchSize": 32,
      "partitionCount": 4,
      "controlQueueVisibilityTimeout": "00:05:00",
      "workItemQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "connectionStringName": "AzureWebJobsStorage",
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask"
    },
    "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",
          "Pending",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30
  }
}

タスク ハブの名前は、先頭文字をアルファベットとする必要があります。また、使用できるのはアルファベットと数値だけです。Task hub names must start with a letter and consist of only letters and numbers. 指定しない場合、関数アプリの既定のタスク ハブ名は DurableFunctionsHub です。If not specified, the default task hub name for a function app is DurableFunctionsHub. 詳細については、タスク ハブに関するページをご覧ください。For more information, see Task hubs.

プロパティProperty DefaultDefault 説明Description
hubNamehubName DurableFunctionsHubDurableFunctionsHub 代替タスク ハブ名を使用すると、複数の Durable Functions アプリケーションが同じストレージ バックエンドを使用している場合でも、これらのアプリケーションを互いに分離できます。Alternate task hub names can be used to isolate multiple Durable Functions applications from each other, even if they're using the same storage backend.
controlQueueBatchSizecontrolQueueBatchSize 3232 コントロール キューから一度にプルするメッセージの数。The number of messages to pull from the control queue at a time.
partitionCountpartitionCount 44 コントロール キューのパーティション数。The partition count for the control queue. 1 から 16 までの正の整数を使用できます。May be a positive integer between 1 and 16.
controlQueueVisibilityTimeoutcontrolQueueVisibilityTimeout 5 分5 minutes デキューされたコントロール キュー メッセージの表示タイムアウト。The visibility timeout of dequeued control queue messages.
workItemQueueVisibilityTimeoutworkItemQueueVisibilityTimeout 5 分5 minutes デキューされた作業項目キュー メッセージの表示タイムアウト。The visibility timeout of dequeued work item queue messages.
maxConcurrentActivityFunctionsmaxConcurrentActivityFunctions 現在のマシン上のプロセッサ数の 10 倍10X the number of processors on the current machine 1 つのホスト インスタンスで同時に処理できるアクティビティ関数の最大数。The maximum number of activity functions that can be processed concurrently on a single host instance.
maxConcurrentOrchestratorFunctionsmaxConcurrentOrchestratorFunctions 現在のマシン上のプロセッサ数の 10 倍10X the number of processors on the current machine 1 つのホスト インスタンスで同時に処理できるオーケストレーター関数の最大数。The maximum number of orchestrator functions that can be processed concurrently on a single host instance.
maxQueuePollingIntervalmaxQueuePollingInterval 30 秒30 seconds コントロールおよび作業項目キューの最大ポーリング間隔 (hh:mm:ss 形式)。The maximum control and work-item queue polling interval in the hh:mm:ss format. 値が高くなるほどメッセージ処理の待機時間が長くなる可能性があります。Higher values can result in higher message processing latencies. 値が低くなるほどストレージ コストが高くなる可能性があります。これは、ストレージ トランザクションが増加するからです。Lower values can result in higher storage costs because of increased storage transactions.
azureStorageConnectionStringNameazureStorageConnectionStringName AzureWebJobsStorageAzureWebJobsStorage 基になる Azure Storage リソースの管理に使用される Azure Storage 接続文字列を含むアプリ設定の名前。The name of the app setting that has the Azure Storage connection string used to manage the underlying Azure Storage resources.
azureStorageConnectionStringNametrackingStoreConnectionStringName 履歴テーブルとインスタンス テーブルに使用する接続文字列の名前。The name of a connection string to use for the History and Instances tables. 指定しない場合、azureStorageConnectionStringName 接続が使用されます。If not specified, the azureStorageConnectionStringName connection is used.
trackingStoreNamePrefixtrackingStoreNamePrefix trackingStoreConnectionStringName が指定されているときに履歴テーブルとインスタンス テーブルに使用されるプレフィックス。The prefix to use for the History and Instances tables when trackingStoreConnectionStringName is specified. 設定されていない場合、既定のプレフィックス値は DurableTask になります。If not set, the default prefix value will be DurableTask. trackingStoreConnectionStringName が指定されていない場合、履歴テーブルとインスタンス テーブルは hubName 値をプレフィックスとして使用し、trackingStoreNamePrefix の設定はすべて無視されます。If trackingStoreConnectionStringName is not specified, then the History and Instances tables will use the hubName value as their prefix, and any setting for trackingStoreNamePrefix will be ignored.
traceInputsAndOutputstraceInputsAndOutputs falsefalse 関数呼び出しの入力と出力をトレースするかどうかを示す値。A value indicating whether to trace the inputs and outputs of function calls. 関数の実行イベントをトレースした場合の既定の動作では、関数呼び出しのシリアル化された入力および出力のバイト数が記録されます。The default behavior when tracing function execution events is to include the number of bytes in the serialized inputs and outputs for function calls. この動作により、ログが肥大化することも、機密情報が誤って公開されることもなく、入力および出力に関する最小限の情報が示されます。This behavior provides minimal information about what the inputs and outputs look like without bloating the logs or inadvertently exposing sensitive information. このプロパティを true に設定すると、既定の関数ログ記録によって、関数の入力および出力の内容全体がログに記録されます。Setting this property to true causes the default function logging to log the entire contents of function inputs and outputs.
logReplayEventslogReplayEvents falsefalse オーケストレーションの再生イベントを Application Insights に書き込むかどうかを示す値。A value indicating whether to write orchestration replay events to Application Insights.
eventGridTopicEndpointeventGridTopicEndpoint Azure Event Grid カスタム トピック エンドポイントの URL。The URL of an Azure Event Grid custom topic endpoint. このプロパティが設定されている場合は、オーケストレーションのライフ サイクル通知イベントがこのエンドポイントに発行されます。When this property is set, orchestration life-cycle notification events are published to this endpoint. このプロパティは、アプリ設定の解決をサポートします。This property supports App Settings resolution.
eventGridKeySettingNameeventGridKeySettingName EventGridTopicEndpoint での Azure Event Grid カスタム トピックによる認証に使用されるキーを含むアプリ設定の名前。The name of the app setting containing the key used for authenticating with the Azure Event Grid custom topic at EventGridTopicEndpoint.
eventGridPublishRetryCounteventGridPublishRetryCount 00 Event Grid トピックへの発行が失敗した場合に再試行する回数。The number of times to retry if publishing to the Event Grid Topic fails.
eventGridPublishRetryIntervaleventGridPublishRetryInterval 5 分5 minutes Event Grid の発行を再試行する間隔 (hh:mm:ss 形式)。The Event Grid publishes retry interval in the hh:mm:ss format.
eventGridPublishEventTypeseventGridPublishEventTypes Event Grid に発行するイベントの種類の一覧。A list of event types to publish to Event Grid. 指定されていない場合は、すべてのイベントの種類が発行されます。If not specified, all event types will be published. 指定できる値は、StartedCompletedFailedTerminated です。Allowed values include Started, Completed, Failed, Terminated.

これらの設定の多くはパフォーマンスの最適化を目的としています。Many of these settings are for optimizing performance. 詳細については、パフォーマンスとスケールに関するページをご覧ください。For more information, see Performance and scale.

次の手順Next steps