Azure における Durable Functions でのインスタンスの管理Manage instances in Durable Functions in Azure

Azure Functions の Durable Functions 拡張機能を使っている場合、または使い始めたい場合に、それを最大限有効に活用できるようにします。If you're using the Durable Functions extension for Azure Functions, or want to start doing so, make sure you're getting the best use out of it. その管理方法を詳しく学習することにより、Durable Functions のオーケストレーション インスタンスを最適化できます。You can optimize your Durable Functions orchestration instances by learning more about how to manage them. この記事では、各インスタンスの管理操作について詳しく説明します。This article goes into the details of each instance management operation.

たとえば、インスタンスの開始や終了、およびすべてのインスタンスのクエリやフィルターを指定したインスタンスのクエリなどを実行できます。You can start and terminate instances, for example, and you can query instances, including the ability to query all instances and query instances with filters. さらに、インスタンスにイベントを送信、オーケストレーションの完了を待ってから、HTTP 管理 Webhook URL を取得することができます。Additionally, you can send events to instances, wait for orchestration completion, and retrieve HTTP management webhook URLs. この記事では、インスタンスの巻き戻し、インスタンスの履歴の消去、タスク ハブの削除など、他の管理操作についても説明します。This article covers other management operations, too, including rewinding instances, purging instance history, and deleting a task hub.

Durable Functions では、これらの各管理操作の実装方法に関するオプションがあります。In Durable Functions, you have options for how you want to implement each of these management operations. この記事では、.NET (C#) と JavaScript の両方について Azure Functions Core Tools を使用する例を提供します。This article provides examples that use the Azure Functions Core Tools for both .NET (C#) and JavaScript.

インスタンスを開始するStart instances

オーケストレーションのインスタンスを開始できることが重要です。It's important to be able to start an instance of orchestration. これは一般に、別の関数のトリガーで Durable Functions のバインドが使用されているときに行われます。This is commonly done when you are using a Durable Functions binding in another function's trigger.

DurableOrchestrationClient (.NET) の StartNewAsync メソッド、または DurableOrchestrationClient (JavaScript) の startNew では、新しいインスタンスが開始されます。The StartNewAsync method on the DurableOrchestrationClient (.NET) or startNew on the DurableOrchestrationClient (JavaScript) starts a new instance. このクラスのインスタンスを取得するには、orchestrationClient バインドを使用します。You acquire instances of this class by using the orchestrationClient binding. 内部的には、このメソッドは、メッセージをコントロール キューにエンキューし、これにより orchestrationTrigger トリガー バインドを使用する、指定された名前の関数がトリガーされます。Internally, this method enqueues a message into the control queue, which then triggers the start of a function with the specified name that uses the orchestrationTrigger trigger binding.

この非同期操作は、オーケストレーション プロセスが正常にスケジュールされたときに完了します。This async operation completes when the orchestration process is successfully scheduled. オーケストレーション プロセスは30 秒以内に開始する必要があります。The orchestration process should start within 30 seconds. それより長くかかると、TimeoutException が表示されます。If it takes longer, you'll see a TimeoutException.

警告

JavaScript でローカルに開発する場合、DurableOrchestrationClient でメソッドを使用するには、環境変数 WEBSITE_HOSTNAMElocalhost:<port> (例: localhost:7071) に設定します。When developing locally in JavaScript, set the environment variable WEBSITE_HOSTNAME to localhost:<port> (for example, localhost:7071) to use methods on DurableOrchestrationClient. この要件の詳細については、GitHub の問題に関するページをご覧ください。For more information about this requirement, see the GitHub issue.

.NET.NET

StartNewAsync のパラメーターは次のとおりです。The parameters to StartNewAsync are as follows:

  • 名前: スケジュールするオーケストレーター関数の名前。Name: The name of the orchestrator function to schedule.
  • 入力:オーケストレーター関数に入力として渡す必要のある JSON でシリアル化できる任意のデータ。Input: Any JSON-serializable data that should be passed as the input to the orchestrator function.
  • InstanceId: (省略可能) インスタンスの一意の ID。InstanceId: (Optional) The unique ID of the instance. このパラメーターを指定しない場合、メソッドではランダムな ID が使用されます。If you don't specify this parameter, the method uses a random ID.

単純な C# の例を次に示します。Here is a simple C# example:

[FunctionName("HelloWorldManualStart")]
public static async Task Run(
    [ManualTrigger] string input,
    [OrchestrationClient] DurableOrchestrationClient starter,
    ILogger log)
{
    string instanceId = await starter.StartNewAsync("HelloWorld", input);
    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

startNew へのパラメーターは次のとおりです。The parameters to startNew are as follows:

  • 名前: スケジュールするオーケストレーター関数の名前。Name: The name of the orchestrator function to schedule.
  • InstanceId: (省略可能) インスタンスの一意の ID。InstanceId: (Optional) The unique ID of the instance. このパラメーターを指定しない場合、メソッドではランダムな ID が使用されます。If you don't specify this parameter, the method uses a random ID.
  • 入力:(省略可能) オーケストレーター関数に入力として渡す必要のある JSON でシリアル化できる任意のデータ。Input: (Optional) Any JSON-serializable data that should be passed as the input to the orchestrator function.

単純な JavaScript の例を次に示します。Here is a simple JavaScript example:

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

module.exports = async function(context, input) {
    const client = df.getClient(context);

    const instanceId = await client.startNew("HelloWorld", undefined, input);
    context.log(`Started orchestration with ID = ${instanceId}.`);
};

ヒント

インスタンス ID にはランダムな識別子を使用します。Use a random identifier for the instance ID. これにより、複数の VM にわたってオーケストレーター関数をスケーリングするとき、負荷が均等に分散されるようになります。This helps ensure an equal load distribution when you're scaling orchestrator functions across multiple VMs. ランダムではないインスタンス ID を使用するのに適しているのは、外部ソースから ID を取得する必要があるとき、またはシングルトン オーケストレーター パターンを実装するときです。The proper time to use non-random instance IDs is when the ID must come from an external source, or when you're implementing the singleton orchestrator pattern.

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable start-new コマンドを使用して、インスタンスを直接開始することもできます。You can also start an instance directly by using the Azure Functions Core Tools durable start-new command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • function-name (必須): 開始する関数の名前。function-name (required): Name of the function to start.
  • input (省略可能): 関数への入力 (インラインまたは JSON ファイル経由のどちらか)。input (optional): Input to the function, either inline or through a JSON file. ファイルの場合は、@ でファイルへのパスにプレフィックスを追加します (例: @path/to/file.json)。For files, add a prefix to the path to the file with @, such as @path/to/file.json.
  • id (省略可能): オーケストレーション インスタンスの ID。id (optional): ID of the orchestration instance. このパラメーターを指定しないと、コマンドではランダムな GUID が使用されます。If you don't specify this parameter, the command uses a random GUID.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、AzureWebJobsStorage です。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、DurableFunctionsHub です。The default is DurableFunctionsHub. host.json で durableTask:HubName を使用してこれを設定することもできます。You can also set this in host.json by using durableTask:HubName.

注意

Core Tools のコマンドでは、関数アプリのルート ディレクトリから実行されることが想定されています。Core Tools commands assume you are running them from the root directory of a function app. connection-string-setting および task-hub-name パラメーターを明示的に指定した場合、任意のディレクトリからコマンドを実行できます。If you explicitly provide the connection-string-setting and task-hub-name parameters, you can run the commands from any directory. 関数アプリのホストが実行されていなくても、これらのコマンドを実行できますが、ホストが実行されていない場合、一部の効果を観察できないことがあります。Although you can run these commands without a function app host running, you might find that you can't observe some effects unless the host is running. たとえば、start-new コマンドではターゲットのタスク ハブに開始メッセージがエンキューされますが、メッセージを処理できる関数アプリのホスト プロセスが実行されていない限り、オーケストレーションは実際に実行されません。For example, the start-new command enqueues a start message into the target task hub, but the orchestration doesn't actually run unless there is a function app host process running that can process the message.

次のコマンドでは、HelloWorld という名前の関数が開始されて、counter-data.json ファイルの内容がその関数に渡されます。The following command starts the function named HelloWorld, and passes the contents of the file counter-data.json to it:

func durable start-new --function-name HelloWorld --input @counter-data.json --task-hub-name TestTaskHub

インスタンスのクエリを実行するQuery instances

オーケストレーション管理作業の一環として、ほとんどの場合、オーケストレーション インスタンスの状態に関する情報を収集する必要があります (たとえば、正常に完了したか、失敗したか)。As part of your effort to manage your orchestrations, you'll most likely need to gather information about the status of an orchestration instance (for example, whether it has completed normally or failed).

DurableOrchestrationClient クラスの GetStatusAsync メソッド (.NET) または DurableOrchestrationClient クラスの getStatus メソッド (JavaScript) は、オーケストレーション インスタンスの状態のクエリを実行します。The GetStatusAsync method on the DurableOrchestrationClient class (.NET) or the getStatus method on the DurableOrchestrationClient class (JavaScript) queries the status of an orchestration instance.

これは、パラメーターとして instanceId (必須)、showHistory (省略可能)、showHistoryOutput (省略可能)、および showInput (省略可能、.NET のみ) を取ります。It takes an instanceId (required), showHistory (optional), showHistoryOutput (optional), and showInput (optional, .NET only) as parameters.

  • showHistory:true に設定すると、応答に実行履歴が含まれます。showHistory: If set to true, the response contains the execution history.
  • showHistoryOutput:true に設定すると、実行履歴にアクティビティ出力が含まれます。showHistoryOutput: If set to true, the execution history contains activity outputs.
  • showInput:false にすると、応答に関数の入力が含まれます。showInput: If set to false, the response won't contain the input of the function. 既定値は true です。The default value is true. (.NET のみ)(.NET only)

このメソッドは次のプロパティを持つ JSON オブジェクトを返します。The method returns a JSON object with the following properties:

  • 名前: オーケストレーター関数の名前。Name: The name of the orchestrator function.
  • InstanceId: オーケストレーションのインスタンス ID (instanceId 入力と同じにする必要があります)。InstanceId: The instance ID of the orchestration (should be the same as the instanceId input).
  • CreatedTime: オーケストレーター関数が実行を開始した時刻。CreatedTime: The time at which the orchestrator function started running.
  • LastUpdatedTime: オーケストレーションが最後にチェックポイントされた時刻。LastUpdatedTime: The time at which the orchestration last checkpointed.
  • 入力:JSON 値としての関数の入力。Input: The input of the function as a JSON value. showInput が false の場合、このフィールドは設定されません。This field isn't populated if showInput is false.
  • CustomStatus: JSON 形式でのカスタム オーケストレーションの状態。CustomStatus: Custom orchestration status in JSON format.
  • 出力:JSON 値としての関数の出力 (関数が完了している場合)。Output: The output of the function as a JSON value (if the function has completed). オーケストレーター関数が失敗した場合、このプロパティには、エラーの詳細が含まれます。If the orchestrator function failed, this property includes the failure details. オーケストレーター関数が終了した場合、このプロパティには終了の理由が含まれます (存在する場合)。If the orchestrator function was terminated, this property includes the reason for the termination (if any).
  • RuntimeStatus: 次のいずれかの値です。RuntimeStatus: One of the following values:
    • Pending: インスタンスはスケジュールされたが、まだ実行を開始していません。Pending: The instance has been scheduled but has not yet started running.
    • Running: インスタンスが実行を開始しました。Running: The instance has started running.
    • Completed: インスタンスが正常に完了しました。Completed: The instance has completed normally.
    • ContinuedAsNew: インスタンスが新しい履歴で自身を再開しました。ContinuedAsNew: The instance has restarted itself with a new history. これは遷移状態です。This is a transient state.
    • Failed: インスタンスがエラーで失敗しました。Failed: The instance failed with an error.
    • Terminated: インスタンスが突然停止されました。Terminated: The instance was stopped abruptly.
  • 履歴: オーケストレーションの実行履歴。History: The execution history of the orchestration. このフィールドにデータが設定されるのは、showHistorytrue に設定した場合のみです。This field is only populated if showHistory is set to true.

インスタンスが存在しないか、まだ開始されていない場合、このメソッドは null を返します。This method returns null if the instance either doesn't exist or has not yet started running.

C#C#

[FunctionName("GetStatus")]
public static async Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    var status = await client.GetStatusAsync(instanceId);
    // do something based on the current status.
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, instanceId) {
    const client = df.getClient(context);

    const status = await client.getStatus(instanceId);
    // do something based on the current status.
}

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable get-runtime-status コマンドを使用して、オーケストレーション インスタンスの状態を直接取得することもできます。It's also possible to get the status of an orchestration instance directly, by using the Azure Functions Core Tools durable get-runtime-status command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • id (必須): オーケストレーション インスタンスの ID。id (required): ID of the orchestration instance.
  • show-input (省略可能): true に設定すると、応答に関数の入力が含まれます。show-input (optional): If set to true, the response contains the input of the function. 既定値は false です。The default value is false.
  • show-output (省略可能): true に設定すると、応答に関数の出力が含まれます。show-output (optional): If set to true, the response contains the output of the function. 既定値は false です。The default value is false.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.

次のコマンドでは、0ab8c55a66644d68a3a8b220b12d209c というオーケストレーション インスタンス ID を持つインスタンスの状態 (入力と出力を含む) が取得されます。The following command retrieves the status (including input and output) of an instance with an orchestration instance ID of 0ab8c55a66644d68a3a8b220b12d209c. 関数アプリのルート ディレクトリから func コマンドを実行することが想定されています。It assumes that you are running the func command from the root directory of the function app:

func durable get-runtime-status --id 0ab8c55a66644d68a3a8b220b12d209c --show-input true --show-output true

durable get-history コマンドを使用して、オーケストレーション インスタンスの履歴を取得できます。You can use the durable get-history command to retrieve the history of an orchestration instance. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • id (必須): オーケストレーション インスタンスの ID。id (required): ID of the orchestration instance.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.
func durable get-history --id 0ab8c55a66644d68a3a8b220b12d209c

すべてのインスタンスのクエリを実行するQuery all instances

オーケストレーションで一度に 1 つのインスタンスのクエリを実行するのではなく、一度にすべてのインスタンスのクエリを実行する方が効率的な場合があります。Rather than query one instance in your orchestration at a time, you might find it more efficient to query all of them at once.

GetStatusAsync (.NET) または getStatusAll (JavaScript) メソッドを使用して、すべてのオーケストレーション インスタンスの状態のクエリを実行できます。You can use the GetStatusAsync (.NET) or getStatusAll (JavaScript) method to query the statuses of all orchestration instances. .NET では、それを取り消したい場合、CancellationToken オブジェクトを渡すことができます。In .NET, you can pass a CancellationToken object in case you want to cancel it. このメソッドは、GetStatusAsync メソッドと同じプロパティを含むオブジェクトをパラメーターと共に返します。The method returns objects with the same properties as the GetStatusAsync method with parameters.

C#C#

[FunctionName("GetAllStatus")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
    [OrchestrationClient] DurableOrchestrationClient client,
    ILogger log)
{
    IList<DurableOrchestrationStatus> instances = await client.GetStatusAsync(); // You can pass CancellationToken as a parameter.
    foreach (var instance in instances)
    {
        log.LogInformation(JsonConvert.SerializeObject(instance));
    };
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, req) {
    const client = df.getClient(context);

    const instances = await client.getStatusAll();
    instances.forEach((instance) => {
        context.log(JSON.stringify(instance));
    });
};

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable get-instances コマンドを使用して、インスタンスのクエリを直接実行することもできます。It's also possible to query instances directly, by using the Azure Functions Core Tools durable get-instances command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • top (省略可能): このコマンドは、ページングをサポートします。top (optional): This command supports paging. このパラメーターは、要求ごとに取得されるインスタンス数に対応します。This parameter corresponds to the number of instances retrieved per request. 既定値は 10 です。The default is 10.
  • continuation-token (省略可能): 取得するインスタンスのページまたはセクションを示すトークン。continuation-token (optional): A token to indicate which page or section of instances to retrieve. get-instances を実行するたびに、次の一連のインスタンスにトークンが返されます。Each get-instances execution returns a token to the next set of instances.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.
func durable get-instances

フィルターを使用してインスタンスのクエリを実行するQuery instances with filters

標準のインスタンス クエリで提供できるすべての情報が本当は必要ないときはどうしますか。What if you don't really need all the information that a standard instance query can provide? たとえば、オーケストレーションの作成時刻やオーケストレーションの実行時の状態だけを調べている場合です。For example, what if you're just looking for the orchestration creation time, or the orchestration runtime status? フィルターを適用することで、クエリを絞り込むことができます。You can narrow your query by applying filters.

一連の定義済みのフィルターに一致するオーケストレーション インスタンスの一覧を取得するには、GetStatusAsync (.NET) または getStatusBy (JavaScript) メソッドを使用します。Use the GetStatusAsync (.NET) or getStatusBy (JavaScript) method to get a list of orchestration instances that match a set of predefined filters.

C#C#

[FunctionName("QueryStatus")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
    [OrchestrationClient] DurableOrchestrationClient client,
    ILogger log)
{
    IEnumerable<OrchestrationRuntimeStatus> runtimeStatus = new List<OrchestrationRuntimeStatus> {
        OrchestrationRuntimeStatus.Completed,
        OrchestrationRuntimeStatus.Running
    };
    IList<DurableOrchestrationStatus> instances = await starter.GetStatusAsync(
        new DateTime(2018, 3, 10, 10, 1, 0),
        new DateTime(2018, 3, 10, 10, 23, 59),
        runtimeStatus
    ); // You can pass CancellationToken as a parameter.
    foreach (var instance in instances)
    {
        log.LogInformation(JsonConvert.SerializeObject(instance));
    };
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, req) {
    const client = df.getClient(context);

    const runtimeStatus = [
        df.OrchestrationRuntimeStatus.Completed,
        df.OrchestrationRuntimeStatus.Running,
    ];
    const instances = await client.getStatusBy(
        new Date(2018, 3, 10, 10, 1, 0),
        new Date(2018, 3, 10, 10, 23, 59),
        runtimeStatus
    );
    instances.forEach((instance) => {
        context.log(JSON.stringify(instance));
    });
};

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Tools では、durable get-instances コマンドでフィルターを使用することもできます。In the Azure Functions Core Tools, you can also use the durable get-instances command with filters. 前述の topcontinuation-tokenconnection-string-settingtask-hub-name パラメーターに加えて、3 つのフィルター パラメーター (created-aftercreated-beforeruntime-status) を使用できます。In addition to the aforementioned top, continuation-token, connection-string-setting, and task-hub-name parameters, you can use three filter parameters (created-after, created-before, and runtime-status).

  • created-after (省略可能): この日付/時刻 (UTC) の後に作成されたインスタンスを取得します。created-after (optional): Retrieve the instances created after this date/time (UTC). ISO 8601 形式の日時が受け入れられます。ISO 8601 formatted datetimes accepted.
  • created-before (省略可能): この日付/時刻 (UTC) の前に作成されたインスタンスを取得します。created-before (optional): Retrieve the instances created before this date/time (UTC). ISO 8601 形式の日時が受け入れられます。ISO 8601 formatted datetimes accepted.
  • runtime-status (省略可能): 特定の状態 (たとえば、実行中または完了) のインスタンスを取得します。runtime-status (optional): Retrieve the instances with a particular status (for example, running or completed). 複数の (スペースで区切られた) 状態を指定できます。Can provide multiple (space separated) statuses.
  • top (省略可能): 要求ごとに取得されるインスタンスの数。top (optional): Number of instances retrieved per request. 既定値は 10 です。The default is 10.
  • continuation-token (省略可能): 取得するインスタンスのページまたはセクションを示すトークン。continuation-token (optional): A token to indicate which page or section of instances to retrieve. get-instances を実行するたびに、次の一連のインスタンスにトークンが返されます。Each get-instances execution returns a token to the next set of instances.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.

フィルター (created-aftercreated-beforeruntime-status) を何も指定しないと、コマンドでは、実行状態や作成時刻に関係なく、単に top インスタンスが取得されます。If you don't provide any filters (created-after, created-before, or runtime-status), the command simply retrieves top instances, with no regard to runtime status or creation time.

func durable get-instances --created-after 2018-03-10T13:57:31Z --created-before  2018-03-10T23:59Z --top 15

インスタンスを終了するTerminate instances

実行に時間がかかっているオーケストレーション インスタンスがある場合、または単に何らかの理由で完了する前にインスタンスを停止する必要がある場合のため、インスタンスを終了するオプションがあります。If you have an orchestration instance that is taking too long to run, or you just need to stop it before it completes for any reason, you have the option to terminate it.

DurableOrchestrationClient クラスの TerminateAsync メソッド (.NET) または DurableOrchestrationClient クラスの terminate メソッド (JavaScript) を使用できます。You can use the TerminateAsync method of the DurableOrchestrationClient class (.NET), or the terminate method of the DurableOrchestrationClient class (JavaScript). パラメーターは instanceIdreason 文字列の 2 つでは、これらはログとインスタンスの状態に書き込まれます。The two parameters are an instanceId and a reason string, which are written to logs and to the instance status. 終了されたインスタンスは、次の await (.NET) ポイントまたは yield (JavaScript) ポイントに到達してすぐに実行を停止するか、既に await または yield になっている場合は直ちに終了します。A terminated instance stops running as soon as it reaches the next await (.NET) or yield (JavaScript) point, or it terminates immediately if it's already on an await or yield.

C#C#

[FunctionName("TerminateInstance")]
public static Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "It was time to be done.";
    return client.TerminateAsync(instanceId, reason);
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, instanceId) {
    const client = df.getClient(context);

    const reason = "It was time to be done.";
    return client.terminate(instanceId, reason);
};

注意

インスタンスの終了は、現在、伝達されません。Instance termination doesn't currently propagate. アクティビティ関数およびサブオーケストレーションは、これらを呼び出したオーケストレーション インスタンスが終了しているかどうかに関係なく、完了するまで実行されます。Activity functions and sub-orchestrations run to completion, regardless of whether you've terminated the orchestration instance that called them.

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable terminate コマンドを使用して、オーケストレーション インスタンスを直接終了することもできます。You can also terminate an orchestration instance directly, by using the Azure Functions Core Tools durable terminate command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • id (必須): 終了するオーケストレーション インスタンスの ID。id (required): ID of the orchestration instance to terminate.
  • reason (省略可能): 終了の理由。reason (optional): Reason for termination.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.

次のコマンドでは、ID が 0ab8c55a66644d68a3a8b220b12d209c のオーケストレーション インスタンスを終了します。The following command terminates an orchestration instance with an ID of 0ab8c55a66644d68a3a8b220b12d209c:

func durable terminate --id 0ab8c55a66644d68a3a8b220b12d209c --reason "It was time to be done."

インスタンスにイベントを送信するSend events to instances

一部のシナリオでは、オーケストレーター関数が待機して外部イベントをリッスンできることが重要です。In some scenarios, it's important for your orchestrator functions to be able to wait and listen for external events. これには、監視関数や、人による操作を待機している関数が含まれます。This includes monitor functions and functions that are waiting for human interaction.

実行中のインスタンスにイベント通知を送信するには、DurableOrchestrationClient クラスの RaiseEventAsync メソッド (.NET) または DurableOrchestrationClient クラスの raiseEvent メソッド (JavaScript) を使用します。Send event notifications to running instances by using the RaiseEventAsync method of the DurableOrchestrationClient class (.NET) or the raiseEvent method of the DurableOrchestrationClient class (JavaScript). これらのイベントを処理できるインスタンスは、WaitForExternalEvent (.NET) または waitForExternalEvent (JavaScript) への呼び出しを待っているインスタンスです。Instances that can handle these events are those that are awaiting a call to WaitForExternalEvent (.NET) or waitForExternalEvent (JavaScript).

RaiseEventAsync (.NET) および raiseEvent (JavaScript) へのパラメーターは次のとおりです。The parameters to RaiseEventAsync (.NET) and raiseEvent (JavaScript) are as follows:

  • InstanceId: インスタンスの一意の ID。InstanceId: The unique ID of the instance.
  • EventName: 送信するイベントの名前。EventName: The name of the event to send.
  • EventData: インスタンスに送信する JSON でシリアル化できるペイロード。EventData: A JSON-serializable payload to send to the instance.

C#C#

[FunctionName("RaiseEvent")]
public static Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    int[] eventData = new int[] { 1, 2, 3 };
    return client.RaiseEventAsync(instanceId, "MyEvent", eventData);
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, instanceId) {
    const client = df.getClient(context);

    const eventData = [ 1, 2, 3 ];
    return client.raiseEvent(instanceId, "MyEvent", eventData);
};

重要

指定したインスタンス ID のオーケストレーション インスタンスが存在しない場合、または指定したイベント名でインスタンスが待機していない場合、イベント メッセージは破棄されます。If there is no orchestration instance with the specified instance ID, or if the instance is not waiting on the specified event name, the event message is discarded. この動作の詳細については、GitHub の問題に関するトピックをご覧ください。For more information about this behavior, see the GitHub issue.

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable raise-event コマンドを使用して、オーケストレーション インスタンスに対するイベントを直接発生させることもできます。You can also raise an event to an orchestration instance directly, by using the Azure Functions Core Tools durable raise-event command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • id (必須): オーケストレーション インスタンスの ID。id (required): ID of the orchestration instance.
  • event-name (省略可能): 発生させるイベントの名前。event-name (optional): Name of the event to raise. 既定では、 $"Event_{RandomGUID}"です。The default is $"Event_{RandomGUID}".
  • event-data (省略可能): オーケストレーション インスタンスに送信するデータ。event-data (optional): Data to send to the orchestration instance. これは JSON ファイルへのパスにするか、コマンド ラインでデータを直接指定することができます。This can be the path to a JSON file, or you can provide the data directly on the command line.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.
func durable raise-event --id 0ab8c55a66644d68a3a8b220b12d209c --event-name MyEvent --event-data @eventdata.json
func durable raise-event --id 1234567 --event-name MyOtherEvent --event-data 3

オーケストレーションの完了の待機Wait for orchestration completion

実行時間の長いオーケストレーションでは、オーケストレーションの結果を待機して取得することが必要な場合があります。In long-running orchestrations, you may want to wait and get the results of an orchestration. このような場合は、オーケストレーションに対してタイムアウト期間も定義できると便利です。In these cases, it's also useful to be able to define a timeout period on the orchestration. タイムアウトを過ぎた場合は、結果ではなく、オーケストレーションの状態が返されます。If the timeout is exceeded, the state of the orchestration should be returned instead of the results.

.NET では、DurableOrchestrationClient クラスで WaitForCompletionOrCreateCheckStatusResponseAsync API が公開されています。The DurableOrchestrationClient class exposes a WaitForCompletionOrCreateCheckStatusResponseAsync API in .NET. この API を使用して、オーケストレーション インスタンスから実際の出力を同期的に取得できます。You can use this API to get the actual output from an orchestration instance synchronously. JavaScript では、DurableOrchestrationClient クラスが同じ目的のために waitForCompletionOrCreateCheckStatusResponse API を公開します。In JavaScript, the DurableOrchestrationClient class exposes a waitForCompletionOrCreateCheckStatusResponse API for the same purpose. これらを設定しないと、メソッドでは既定値として、timeout には 10 秒、retryInterval には 1 秒が使用されます。When they are not set, the methods use a default value of 10 seconds for timeout, and 1 second for retryInterval.

この API の使用方法を示す HTTP トリガー関数の例を次に示します。Here is an example HTTP-trigger function that demonstrates how to use this API:

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace VSSample
{
    public static class HttpSyncStart
    {
        private const string Timeout = "timeout";
        private const string RetryInterval = "retryInterval";

        [FunctionName("HttpSyncStart")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}/wait")]
            HttpRequestMessage req,
            [OrchestrationClient] DurableOrchestrationClientBase 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}'.");

            TimeSpan timeout = GetTimeSpan(req, Timeout) ?? TimeSpan.FromSeconds(30);
            TimeSpan retryInterval = GetTimeSpan(req, RetryInterval) ?? TimeSpan.FromSeconds(1);
            
            return await starter.WaitForCompletionOrCreateCheckStatusResponseAsync(
                req,
                instanceId,
                timeout,
                retryInterval);
        }

        private static TimeSpan? GetTimeSpan(HttpRequestMessage request, string queryParameterName)
        {
            string queryParameterStringValue = request.RequestUri.ParseQueryString()[queryParameterName];
            if (string.IsNullOrEmpty(queryParameterStringValue))
            {
                return null;
            }

            return TimeSpan.FromSeconds(double.Parse(queryParameterStringValue));
        }
    }
}
const df = require("durable-functions");

const timeout = "timeout";
const retryInterval = "retryInterval";

module.exports = async function (context, req) {
    const client = df.getClient(context);
    const instanceId = await client.startNew(req.params.functionName, undefined, req.body);

    context.log(`Started orchestration with ID = '${instanceId}'.`);

    const timeoutInMilliseconds = getTimeInSeconds(req, timeout) || 30000;
    const retryIntervalInMilliseconds = getTimeInSeconds(req, retryInterval) || 1000;

    return client.waitForCompletionOrCreateCheckStatusResponse(
        context.bindingData.req,
        instanceId,
        timeoutInMilliseconds,
        retryIntervalInMilliseconds);
};

function getTimeInSeconds (req, queryParameterName) {
    const queryValue = req.query[queryParameterName];
    return queryValue
        ? queryValue // expected to be in seconds
        * 1000 : undefined;
}

次の行で関数を呼び出します。Call the function with the following line. タイムアウトには 2 秒、再試行間隔には 0.5 秒を使用します。Use 2 seconds for the timeout and 0.5 seconds for the retry interval:

    http POST http://localhost:7071/orchestrators/E1_HelloSequence/wait?timeout=2&retryInterval=0.5

オーケストレーション インスタンスからの応答を取得するために必要な時間に応じて 2 つのケースがあります。Depending on the time required to get the response from the orchestration instance, there are two cases:

  • オーケストレーション インスタンスが、定義されたタイムアウト (このケースでは 2 秒) 内に完了すると、応答は、同期して提供される実際のオーケストレーション インスタンス出力です。The orchestration instances complete within the defined timeout (in this case 2 seconds), and the response is the actual orchestration instance output, delivered synchronously:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        Date: Thu, 14 Dec 2017 06:14:29 GMT
        Server: Microsoft-HTTPAPI/2.0
        Transfer-Encoding: chunked
    
        [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ]
    
  • オーケストレーション インスタンスが、定義されたタイムアウト内に完了できない場合、応答は「HTTP API URL の検出」で説明されている既定のものになります。The orchestration instances can't complete within the defined timeout, and the response is the default one described in HTTP API URL discovery:

        HTTP/1.1 202 Accepted
        Content-Type: application/json; charset=utf-8
        Date: Thu, 14 Dec 2017 06:13:51 GMT
        Location: http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}
        Retry-After: 10
        Server: Microsoft-HTTPAPI/2.0
        Transfer-Encoding: chunked
    
        {
            "id": "d3b72dddefce4e758d92f4d411567177",
            "sendEventPostUri": "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d3b72dddefce4e758d92f4d411567177/raiseEvent/{eventName}?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "statusQueryGetUri": "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "terminatePostUri": "http://localhost:7071/admin/extensions/DurableTaskExtension/instances/d3b72dddefce4e758d92f4d411567177/terminate?reason={text}&taskHub={taskHub}&connection={connection}&code={systemKey}",
            "rewindPostUri": "https://localhost:7071/admin/extensions/DurableTaskExtension/instances/d3b72dddefce4e758d92f4d411567177/rewind?reason={text}&taskHub={taskHub}&connection={connection}&code={systemKey}"
        }
    

注意

Webhook URL の形式は、実行している Azure Functions ホストのバージョンによって異なる場合があります。The format of the webhook URLs might differ, depending on which version of the Azure Functions host you are running. 前の例は、Azure Functions 2.x ホストに対するものです。The preceding example is for the Azure Functions 2.x host.

HTTP 管理 Webhook URL を取得するRetrieve HTTP management webhook URLs

外部システムを使用して、オーケストレーションに対するイベントを監視したり、発生させたりできます。You can use an external system to monitor or raise events to an orchestration. 外部システムは、HTTP API URL の検出に関するページで説明されている既定の応答の一部である Webhook URL を介して、Durable Functions と通信できます。External systems can communicate with Durable Functions through the webhook URLs that are part of the default response described in HTTP API URL discovery. ただし、Webhook URL には、オーケストレーション クライアントまたはアクティビティ関数のプログラムでアクセスすることもできます。However, the webhook URLs also can be accessed programmatically in the orchestration client or in an activity function. そのためには、DurableOrchestrationClient クラスの CreateHttpManagementPayload メソッド (.NET) または DurableOrchestrationClient クラスの createHttpManagementPayload メソッド (JavaScript) を使用します。Do this by using the CreateHttpManagementPayload method of the DurableOrchestrationClient class (.NET), or the createHttpManagementPayload method of the DurableOrchestrationClient class (JavaScript).

CreateHttpManagementPayloadcreateHttpManagementPayload には、次の 1 つのパラメーターがあります。CreateHttpManagementPayload and createHttpManagementPayload have one parameter:

  • instanceId: インスタンスの一意の ID。instanceId: The unique ID of the instance.

これらのメソッドでは、HttpManagementPayload のインスタンス (.NET) またはオブジェクト (JavaScript) と、次の文字列プロパティが返されます。The methods return an instance of HttpManagementPayload (.NET) or an object (JavaScript), with the following string properties:

  • Id:オーケストレーションのインスタンス ID (InstanceId 入力と同じにする必要があります)。Id: The instance ID of the orchestration (should be the same as the InstanceId input).
  • StatusQueryGetUri: オーケストレーション インスタンスの状態の URL。StatusQueryGetUri: The status URL of the orchestration instance.
  • SendEventPostUri: オーケストレーション インスタンスの "イベント発生" URL。SendEventPostUri: The "raise event" URL of the orchestration instance.
  • TerminatePostUri: オーケストレーション インスタンスの "終了" URL。TerminatePostUri: The "terminate" URL of the orchestration instance.
  • RewindPostUri: オーケストレーション インスタンスの "rewind" URL。RewindPostUri: The "rewind" URL of the orchestration instance.

アクティビティ関数は、オーケストレーションへのイベントを監視したり、発生させたりするために、これらのオブジェクトのインスタンスを外部システムに送信できます。Activity functions can send an instance of these objects to external systems to monitor or raise events to an orchestration:

C#C#

[FunctionName("SendInstanceInfo")]
public static void SendInstanceInfo(
    [ActivityTrigger] DurableActivityContext ctx,
    [OrchestrationClient] DurableOrchestrationClient client,
    [DocumentDB(
        databaseName: "MonitorDB",
        collectionName: "HttpManagementPayloads",
        ConnectionStringSetting = "CosmosDBConnection")]out dynamic document)
{
    HttpManagementPayload payload = client.CreateHttpManagementPayload(ctx.InstanceId);

    // send the payload to Cosmos DB
    document = new { Payload = payload, id = ctx.InstanceId };
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

modules.exports = async function(context, ctx) {
    const client = df.getClient(context);

    const payload = client.createHttpManagementPayload(ctx.instanceId);

    // send the payload to Cosmos DB
    context.bindings.document = JSON.stringify({
        id: ctx.instanceId,
        payload,
    });
};

インスタンスを巻き戻す (プレビュー)Rewind instances (preview)

予期しない理由でオーケストレーション エラーが発生した場合は、その目的のために作成されている API を使用して、以前の正常な状態にインスタンスを "巻き戻す" ことができます。If you have an orchestration failure for an unexpected reason, you can rewind the instance to a previously healthy state by using an API built for that purpose.

注意

この API は、適切なエラー処理や再試行ポリシーの代わりとなるものではありません。This API is not intended to be a replacement for proper error handling and retry policies. 予期しない理由でオーケストレーション インスタンスが失敗する場合にのみ使用するものです。Rather, it is intended to be used only in cases where orchestration instances fail for unexpected reasons. エラー処理と再試行ポリシーについて詳しくは、エラー処理に関するトピックをご覧ください。For more details on error handling and retry policies, see the Error handling topic.

オーケストレーションを "実行中" 状態に戻すには、RewindAsync (.NET) または rewindAsync (JavaScript) API を使用します。Use the RewindAsync (.NET) or rewindAsync (JavaScript) API to put the orchestration back into the Running state. オーケストレーション エラーの原因となったアクティビティやサブオーケストレーションの実行失敗を再実行します。Rerun the activity or suborchestration execution failures that caused the orchestration failure.

たとえば、一連の人による承認が含まれるワークフローがあるものとします。For example, let's say you have a workflow involving a series of human approvals. 承認が必要であることをユーザーに通知し、リアルタイムの応答を待機する一連のアクティビティ関数があるとします。Suppose there are a series of activity functions that notify someone that their approval is needed, and wait out the real-time response. すべての承認アクティビティが応答を受信するかタイムアウトになった後、アプリケーションの構成ミス (無効なデータベース接続文字列など) により別のアクティビティが失敗します。After all of the approval activities have received responses or timed out, suppose that another activity fails due to an application misconfiguration, such as an invalid database connection string. 結果として、ワークフローの深い部分でオーケストレーションが失敗します。The result is an orchestration failure deep into the workflow. RewindAsync (.NET) または rewindAsync (JavaScript) API を使用すると、アプリケーション管理者は構成エラーを修正し、失敗したオーケストレーションを失敗の直前の状態に巻き戻すことができます。With the RewindAsync (.NET) or rewindAsync (JavaScript) API, an application administrator can fix the configuration error, and rewind the failed orchestration back to the state immediately before the failure. 人間の対話手順はいずれも再承認が不要で、オーケストレーションは正常に完了できるようになります。None of the human-interaction steps need to be reapproved, and the orchestration can now complete successfully.

注意

"巻き戻し" 機能では、永続タイマーを使用したオーケストレーション インスタンスの巻き戻しはサポートされません。The rewind feature doesn't support rewinding orchestration instances that use durable timers.

C#C#

[FunctionName("RewindInstance")]
public static Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "Orchestrator failed and needs to be revived.";
    return client.RewindAsync(instanceId, reason);
}

JavaScript (Functions 2.x のみ)JavaScript (Functions 2.x only)

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

module.exports = async function(context, instanceId) {
    const client = df.getClient(context);

    const reason = "Orchestrator failed and needs to be revived.";
    return client.rewind(instanceId, reason);
};

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable rewind コマンドを使用して、オーケストレーション インスタンスを直巻き戻すこともできます。You can also rewind an orchestration instance directly by using the Azure Functions Core Tools durable rewind command. 使用できるパラメーターは次のとおりです。It takes the following parameters:

  • id (必須): オーケストレーション インスタンスの ID。id (required): ID of the orchestration instance.
  • reason (省略可能): オーケストレーション インスタンスを巻き戻す理由。reason (optional): Reason for rewinding the orchestration instance.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.
func durable rewind --id 0ab8c55a66644d68a3a8b220b12d209c --reason "Orchestrator failed and needs to be revived."

インスタンスの履歴を消去するPurge instance history

オーケストレーションに関連付けられているすべてのデータを削除するには、インスタンスの履歴を消去できます。To remove all the data associated with an orchestration, you can purge the instance history. たとえば、Azure テーブルの行や大きいメッセージ BLOB が存在する場合にそれを削除したいことがあります。For example, you might want to get rid of Azure Table rows and large message blobs, if they exist. これを行うには、PurgeInstanceHistoryAsync API を使用します。To do so, use the PurgeInstanceHistoryAsync API.

注意

PurgeInstanceHistoryAsync API は現在、C# でのみ使用できます。The PurgeInstanceHistoryAsync API is currently available only for C#.

このメソッドには 2 つのオーバーロードがあります。The method has two overloads. 1 つ目は、オーケストレーション インスタンスの ID によって履歴を消去します。The first one purges history by the ID of the orchestration instance:

[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    return client.PurgeInstanceHistoryAsync(instanceId);
}

2 番目の例では、指定した時間間隔後に完了したすべてのオーケストレーション インスタンスの履歴を消去する、タイマーによってトリガーされる関数を示します。The second example shows a timer-triggered function that purges the history for all orchestration instances that completed after the specified time interval. この場合は、30 日以上前に完了したすべてのインスタンスのデータが削除されます。In this case, it removes data for all instances completed 30 or more days ago. これは、1 日 1 回、午前 12 時に実行するようにスケジュールされています。It's scheduled to run once per day, at 12 AM:

[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [OrchestrationClient] DurableOrchestrationClient client,
    [TimerTrigger("0 0 12 * * *")]TimerInfo myTimer)
{
    return client.PurgeInstanceHistoryAsync(
                    DateTime.MinValue,
                    DateTime.UtcNow.AddDays(-30),  
                    new List<OrchestrationStatus>
                    {
                        OrchestrationStatus.Completed
                    });
}

注意

時刻によってトリガーされる関数プロセスが成功するためには、実行状態が完了終了、または失敗になっている必要があります。For the time-triggered function process to succeed, the runtime status must be Completed, Terminated, or Failed.

Azure Functions Core ToolsAzure Functions Core Tools

Azure Functions Core Toolsdurable purge-history コマンドを使用して、オーケストレーション インスタンスの履歴を消去することもできます。You can purge an orchestration instance's history by using the Azure Functions Core Tools durable purge-history command. 前のセクションの 2 つ目の C# の例と同様に、指定した時間間隔中に作成されたすべてのオーケストレーション インスタンスの履歴が消去されます。Similar to the second C# example in the preceding section, it purges the history for all orchestration instances created during a specified time interval. さらに、実行状態によって消去されるインスタンスをフィルター処理できます。You can further filter purged instances by runtime status. コマンドにはいくつかのパラメーターがあります。The command has several parameters:

  • created-after (省略可能): この日付/時刻 (UTC) の後に作成されたインスタンスの履歴を消去します。created-after (optional): Purge the history of instances created after this date/time (UTC). ISO 8601 形式の日時が受け入れられます。ISO 8601 formatted datetimes accepted.
  • created-before (省略可能): この日付/時刻 (UTC) の前に作成されたインスタンスの履歴を消去します。created-before (optional): Purge the history of instances created before this date/time (UTC). ISO 8601 形式の日時が受け入れられます。ISO 8601 formatted datetimes accepted.
  • runtime-status (省略可能): 特定の状態 (たとえば、実行中または完了) のインスタンスの履歴を消去します。runtime-status (optional): Purge the history of instances with a particular status (for example, running or completed). 複数の (スペースで区切られた) 状態を指定できます。Can provide multiple (space separated) statuses.
  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.

次のコマンドでは、2018 年 11 月 14 日午後 7 時 35 分 (UTC) より前に作成されたすべての失敗したインスタンスの履歴が削除されます。The following command deletes the history of all failed instances created before November 14, 2018 at 7:35 PM (UTC).

func durable purge-history --created-before 2018-11-14T19:35:00.0000000Z --runtime-status failed

タスク ハブを削除するDelete a task hub

Azure Functions Core Toolsdurable delete-task-hub コマンドを使用して、特定のタスク ハブに関連付けられているすべてのストレージ成果物を削除できます。Using the Azure Functions Core Tools durable delete-task-hub command, you can delete all storage artifacts associated with a particular task hub. これには、Azure ストレージのテーブル、キュー、BLOB が含まれます。This includes Azure storage tables, queues, and blobs. コマンドには 2 つのパラメーターがあります。The command has two parameters:

  • connection-string-setting (省略可能): 使用するストレージ接続文字列を含むアプリケーション設定の名前。connection-string-setting (optional): Name of the application setting containing the storage connection string to use. 既定では、 AzureWebJobsStorageです。The default is AzureWebJobsStorage.
  • task-hub-name (省略可能): 使用する Durable Functions タスク ハブの名前。task-hub-name (optional): Name of the Durable Functions task hub to use. 既定では、 DurableFunctionsHubです。The default is DurableFunctionsHub. これは、host.json で durableTask:HubName を使用して設定することもできます。It can also be set in host.json, by using durableTask:HubName.

次のコマンドでは、UserTest タスク ハブに関連付けられている Azure ストレージ データがすべて削除されます。The following command deletes all Azure storage data associated with the UserTest task hub.

func durable delete-task-hub --task-hub-name UserTest

次の手順Next steps