Durable Functions におけるタスク ハブ (Azure Functions)Task hubs in Durable Functions (Azure Functions)

Durable Functionsタスク ハブは、オーケストレーションに使用される Azure Storage リソースの論理コンテナーです。A task hub in Durable Functions is a logical container for Azure Storage resources that are used for orchestrations. オーケストレーター関数とアクティビティ関数は、同じタスク ハブに属しているときに限り、情報をやり取りすることができます。Orchestrator and activity functions can only interact with each other when they belong to the same task hub.

複数の関数アプリがストレージ アカウントを共有している場合、各関数アプリには個別のタスク ハブ名を構成する必要がありますIf multiple function apps share a storage account, each function app must be configured with a separate task hub name. ストレージ アカウントには、複数のタスク ハブを含めることができます。A storage account can contain multiple task hubs. 次の図は、共有ストレージ アカウントと専用ストレージ アカウントの各関数アプリにタスク ハブが 1 つあることを示しています。The following diagram illustrates one task hub per function app in shared and dedicated storage accounts.

共有ストレージ アカウントと専用ストレージ アカウントの図

Azure Storage のリソースAzure Storage resources

タスク ハブは次のストレージ リソースから構成されます。A task hub consists of the following storage resources:

  • 1 つまたは複数のコントロールキュー。One or more control queues.
  • 1 つの作業項目キュー。One work-item queue.
  • 1 つの履歴テーブル。One history table.
  • 1 つのインスタンス テーブル。One instances table.
  • Lease Blob を少なくとも 1 つ含んだ 1 つのストレージ コンテナー。One storage container containing one or more lease blobs.
  • サイズの大きいメッセージ ペイロードを含むストレージ コンテナー (該当する場合)。A storage container containing large message payloads, if applicable.

これらすべてのリソースは、オーケストレーター、エンティティ、またはアクティビティ関数の実行時 (またはスケジュール時) に、既定の Azure Storage アカウントに自動的に作成されます。All of these resources are created automatically in the default Azure Storage account when orchestrator, entity, or activity functions run or are scheduled to run. これらのリソースがどのように使用されるかについては、パフォーマンスとスケーリングに関する記事で説明しています。The Performance and Scale article explains how these resources are used.

タスク ハブ名Task hub names

次の例に示すように、タスク ハブは host.json ファイルに宣言されている名前で識別されます。Task hubs are identified by a name that is declared in the host.json file, as shown in the following example:

host.json (Functions 2.0)host.json (Functions 2.0)

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "hubName": "MyTaskHub"
    }
  }
}

host.json (Functions 1.x)host.json (Functions 1.x)

{
  "durableTask": {
    "hubName": "MyTaskHub"
  }
}

次の host.json ファイルの例に示すように、タスク ハブはアプリの設定を使用して構成することもできます。Task hubs can also be configured using app settings, as shown in the following host.json example file:

host.json (Functions 1.0)host.json (Functions 1.0)

{
  "durableTask": {
    "hubName": "%MyTaskHub%"
  }
}

host.json (Functions 2.0)host.json (Functions 2.0)

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "hubName": "%MyTaskHub%"
    }
  }
}

タスク ハブ名は、MyTaskHub アプリ設定の値に設定されます。The task hub name will be set to the value of the MyTaskHub app setting. 次の local.settings.json は、MyTaskHub 設定を samplehubname として定義する方法を示しています。The following local.settings.json demonstrates how to define the MyTaskHub setting as samplehubname:

{
  "IsEncrypted": false,
  "Values": {
    "MyTaskHub" : "samplehubname"
  }
}

次のコードはプリコンパイル済みの C# の例であり、アプリ設定として構成されているタスク ハブを操作するためにオーケストレーション クライアント バインドを使用する関数の記述方法を示しています。The following code is a precompiled C# example of how to write a function that uses the orchestration client binding to work with a task hub that is configured as an App Setting:

C#C#

[FunctionName("HttpStart")]
public static async Task<HttpResponseMessage> Run(
    [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}")] HttpRequestMessage req,
    [OrchestrationClient(TaskHub = "%MyTaskHub%")] IDurableOrchestrationClient starter,
    string functionName,
    ILogger log)
{
    // Function input comes from the request content.
    dynamic eventData = await req.Content.ReadAsAsync<object>();
    string instanceId = await starter.StartNewAsync(functionName, eventData);

    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

    return starter.CreateCheckStatusResponse(req, instanceId);
}

注意

前記の C# の例は Durable Functions 2.x 用です。The previous C# example 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.

JavaScriptJavaScript

function.json ファイルのタスク ハブ プロパティは、アプリ設定を通じて設定されます。The task hub property in the function.json file is set via App Setting:

{
    "name": "input",
    "taskHub": "%MyTaskHub%",
    "type": "orchestrationClient",
    "direction": "in"
}

タスク ハブの名前は、先頭文字をアルファベットとする必要があります。また、使用できるのはアルファベットと数値だけです。Task hub names must start with a letter and consist of only letters and numbers. 指定しない場合、次の表に示すように、既定のタスク ハブ名が使用されます。If not specified, a default task hub name will be used as shown in the following table:

Durable の拡張機能のバージョンDurable extension version 既定のタスク ハブ名Default task hub name
2.x2.x Azure にデプロイする場合、タスク ハブ名は_関数アプリ_の名前から派生します。When deployed in Azure, the task hub name is derived from the name of the function app. Azure の外部で実行する場合、既定のタスク ハブ名は TestHubName です。When running outside of Azure, the default task hub name is TestHubName.
1.x1.x すべての環境で、既定のタスク ハブ名は DurableFunctionsHub です。The default task hub name for all environments is DurableFunctionsHub.

拡張機能のバージョン間の相違点の詳細については、Durable Functions のバージョンに関する記事を参照してください。For more information about the differences between extension versions, see the Durable Functions versions article.

注意

この名前は共有ストレージ アカウント内に複数のタスク ハブがある場合に、それぞれのタスク ハブを区別するものです。The name is what differentiates one task hub from another when there are multiple task hubs in a shared storage account. 共有ストレージ アカウントを共有する関数アプリが複数ある場合、host.json ファイルでタスク ハブごとに異なる名前を明示的に構成する必要があります。If you have multiple function apps sharing a shared storage account, you must explicitly configure different names for each task hub in the host.json files. このようにしないと、複数の関数アプリがメッセージをめぐって互いに競合し、その結果、オーケストレーションが Pending または Running 状態で予期せず "スタック" するなど、未定義の動作が発生する可能性があります。Otherwise the multiple function apps will compete with each other for messages, which could result in undefined behavior, including orchestrations getting unexpectedly "stuck" in the Pending or Running state.

次の手順Next steps