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.

オーケストレーション クライアントのバインド上の StartNewAsync (.NET) または startNew (JavaScript) メソッドは、新しいインスタンスを開始します。The StartNewAsync (.NET) or startNew (JavaScript) method on the orchestration client binding starts a new instance. 内部的には、このメソッドは、メッセージをコントロール キューにエンキューし、これによりオーケストレーション トリガーのバインドを使用する、指定された名前の関数がトリガーされます。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 orchestration trigger binding.

この非同期操作は、オーケストレーション プロセスが正常にスケジュールされたときに完了します。This async operation completes when the orchestration process is successfully scheduled.

新しいオーケストレーション インスタンスを開始するためのパラメーターは次のとおりです。The parameters for starting a new orchestration instance are as follows:

  • Name:スケジュールするオーケストレーター関数の名前。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.

ヒント

インスタンス ID にはランダムな識別子を使用します。Use a random identifier for the instance ID. ランダムなインスタンス ID を使用すると、複数の VM にわたってオーケストレーター関数をスケーリングする場合に、負荷が均等に分散されるようになります。Random instance IDs help 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.

次のコードは、新しいオーケストレーション インスタンスを開始する関数の例です。The following code is an example function that starts a new orchestration instance:

C#C#

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

注意

前の 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.

JavaScriptJavaScript

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

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).

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

これは、パラメーターとして instanceId (必須)、showHistory (省略可能)、showHistoryOutput (省略可能)、showInput (省略可能) を使用します。It takes an instanceId (required), showHistory (optional), showHistoryOutput (optional), and showInput (optional) 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.

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

  • Name:オーケストレーター関数の名前。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 state is a transient state.
    • 失敗:インスタンスがエラーで失敗しました。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 (.NET) または undefined (JavaScript) を返します。This method returns null (.NET) or undefined (JavaScript) if the instance doesn't exist.

C#C#

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

注意

前の 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.

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,
    [DurableClient] IDurableOrchestrationClient 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));
    };
}

注意

前の 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.

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,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    var 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));
    };
}

注意

前の 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.

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.

オーケストレーション クライアントのバインド上の TerminateAsync (.NET) または terminate (JavaScript) メソッドを使用して、インスタンスを終了できます。You can use the TerminateAsync (.NET) or the terminate (JavaScript) method of the orchestration client binding to terminate instances. パラメーターは 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(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "It was time to be done.";
    return client.TerminateAsync(instanceId, reason);
}

注意

前の 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.

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.

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

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(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    int[] eventData = new int[] { 1, 2, 3 };
    return client.RaiseEventAsync(instanceId, "MyEvent", eventData);
}

注意

前の 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.

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, the event message is discarded. インスタンスが存在していても、まだイベントを待機していない場合、受信して処理する準備が整うまでイベントはインスタンスの状態で格納されます。If an instance exists but it is not yet waiting for the event, the event will be stored in the instance state until it is ready to be received and processed.

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: Name of the event to raise.
  • 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.

WaitForCompletionOrCreateCheckStatusResponseAsync (.NET) または waitForCompletionOrCreateCheckStatusResponse (JavaScript) メソッドを使用すると、オーケストレーション インスタンスからの実際の出力を同期的に取得できます。The WaitForCompletionOrCreateCheckStatusResponseAsync (.NET) or the waitForCompletionOrCreateCheckStatusResponse (JavaScript) method can be used to get the actual output from an orchestration instance synchronously. 既定では、これらのメソッドでは timeout には 10 秒、retryInterval には 1 秒が既定値として使用されます。By default, these 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.DurableTask;
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,
            [DurableClient] IDurableOrchestrationClient starter,
            string functionName,
            ILogger log)
        {
            // Function input comes from the request content.
            object 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 2018 06:14:29 GMT
        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 2018 06:13:51 GMT
        Location: http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}
        Retry-After: 10
        Transfer-Encoding: chunked
    
        {
            "id": "d3b72dddefce4e758d92f4d411567177",
            "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177/raiseEvent/{eventName}?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177/terminate?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.0 ホスト用の形式です。The preceding example is for the Azure Functions 2.0 host.

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

外部システムを使用して、オーケストレーションに対するイベントを監視したり、発生させたりできます。You can use an external system to monitor or to 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 は、オーケストレーション クライアントのバインドを使用してプログラムからアクセスすることもできます。The webhook URLs can alternatively be accessed programmatically using the orchestration client binding. CreateHttpManagementPayload (.NET) または createHttpManagementPayload (JavaScript) メソッドを使用して、これらの Webhook URL を含むシリアル化可能なオブジェクトを取得できます。The CreateHttpManagementPayload (.NET) or the createHttpManagementPayload (JavaScript) methods can be used to get a serializable object that contains these webhook URLs.

CreateHttpManagementPayload (.NET) と createHttpManagementPayload (JavaScript) メソッドには、1 つのパラメーターがあります。The CreateHttpManagementPayload (.NET) and createHttpManagementPayload (JavaScript) methods have one parameter:

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

このメソッドは次の文字列プロパティを持つオブジェクトを返します。The methods return an object 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.
  • PurgeHistoryDeleteUri:オーケストレーション インスタンスの "消去履歴" URL。PurgeHistoryDeleteUri: The "purge history" URL of the orchestration instance.

次の例に示すように、関数はこれらのオブジェクトのインスタンスを外部システムに送信して、対応するオーケストレーションでイベントを監視または発生させることができます。Functions can send instances of these objects to external systems to monitor or raise events on the corresponding orchestrations, as shown in the following examples:

C#C#

[FunctionName("SendInstanceInfo")]
public static void SendInstanceInfo(
    [ActivityTrigger] IDurableActivityContext ctx,
    [DurableClient] IDurableOrchestrationClient 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 };
}

注意

前記の C# のコードは Durable Functions 2.x 用です。The previous C# code is for Durable Functions 2.x. Durable Functions 1.x では、IDurableActivityContext ではなく DurableActivityContext を使用する必要があり、DurableClient 属性の代わりに OrchestrationClient 属性を使用する必要があり、IDurableOrchestrationClient ではなく DurableOrchestrationClient パラメーター型を使用する必要があります。For Durable Functions 1.x, you must use DurableActivityContext instead of IDurableActivityContext, you must use the 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.

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 information on error handling and retry policies, see the Error handling article.

オーケストレーション クライアントのバインド上の RewindAsync (.NET) または rewind (JavaScript) メソッドを使用して、オーケストレーションを実行中の状態に戻します。Use the RewindAsync (.NET) or rewind (JavaScript) method of the orchestration client binding to put the orchestration back into the Running state. またこのメソッドは、オーケストレーション エラーの原因となったアクティビティやサブ オーケストレーションの実行失敗も再実行します。This method will also rerun the activity or sub-orchestration 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) または rewind (JavaScript) API を使用すると、アプリケーション管理者は構成エラーを修正し、失敗したオーケストレーションを失敗の直前の状態に巻き戻すことができます。With the RewindAsync (.NET) or rewind (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 re-approved, 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(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "Orchestrator failed and needs to be revived.";
    return client.RewindAsync(instanceId, reason);
}

注意

前の 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.

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. 既定では、host.json ファイル内のタスク ハブ名が使用されます。By default, the task hub name in the host.json file is used.
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 delete any Azure Table rows and large message blobs associated with a completed instance. これを行うには、オーケストレーション クライアントのバインドPurgeInstanceHistoryAsync (.NET) または purgeInstanceHistory (JavaScript) メソッドを使用します。To do so, use the PurgeInstanceHistoryAsync (.NET) or purgeInstanceHistory (JavaScript) method of the orchestration client binding.

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

[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    return client.PurgeInstanceHistoryAsync(instanceId);
}
const df = require("durable-functions");

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

次の例では、指定した時間間隔後に完了したすべてのオーケストレーション インスタンスの履歴を消去する、タイマーによってトリガーされる関数を示します。The next 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(
    [DurableClient] IDurableOrchestrationClient client,
    [TimerTrigger("0 0 12 * * *")]TimerInfo myTimer)
{
    return client.PurgeInstanceHistoryAsync(
        DateTime.MinValue,
        DateTime.UtcNow.AddDays(-30),  
        new List<OrchestrationStatus>
        {
            OrchestrationStatus.Completed
        });
}

注意

前記の 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.

JavaScriptpurgeInstanceHistoryBy メソッドを使用して、複数のインスタンスのインスタンス履歴を条件付きで消去することができます。JavaScript The purgeInstanceHistoryBy method can be used to conditionally purge instance history for multiple instances.

注意

履歴の消去の操作を成功させるには、ターゲット インスタンスの実行時の状態が完了終了、または失敗になっている必要があります。For the purge history operation to succeed, the runtime status of the target instance 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. 既定では、host.json ファイル内のタスク ハブ名が使用されます。By default, the task hub name in the host.json file is used.

次のコマンドでは、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 コマンドを使用して、Azure storage のテーブル、キュー、BLOB などの、特定のタスクハブに関連付けられているすべてのストレージ成果物を削除できます。Using the Azure Functions Core Tools durable delete-task-hub command, you can delete all storage artifacts associated with a particular task hub, including 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. 既定では、host.json ファイル内のタスク ハブ名が使用されます。By default, the task hub name in the host.json file is used.

次のコマンドでは、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