Durable Functions とは

完了

Durable Functions を使用すると、サーバーレス環境で複雑なステートフル機能を実装できます。

このシナリオ例では、現状、会社でプロジェクト設計提案について手動承認プロセスに従っています。 このプロセスには複数のステップがあり、プロセスの各ステップは期間が異なる場合があります。 自動化されたプロセスを社内で実装することは複雑でコストがかかります。 各手順の調整には労力がかかります。 さらに、カスタム ロジックをワークフローに組み込むことができる必要があります。

このユニットでは、Durable Functions の利点について学習します。 Durable Functions のさまざまな関数の種類とそれに関連する主要な概念について学習します。

Durable Functions

Durable Functions は Azure Functions の拡張機能です。 Azure Functions はステートレス環境で動作しますが、Durable Functions は複数の関数呼び出しにまたがって状態を保持できます。 このアプローチを利用すると、サーバーレス環境の複雑なステートフル実行を簡単にすることができます。

Durable Functions は必要に応じてスケールします。また、クラウドで複雑なワークフローを実装するコスト効率の高い方法が用意されています。 Durable Functions を使用する利点をいくつか紹介します。

  • イベント ドリブン コードを書くことができます。 永続関数では、1 つ以上の外部イベントを非同期的に待機してから、それらのイベントに応答して一連のタスクを実行できます。

  • 複数の関数を連結することができます。 一般的なパターンを実装できます。たとえば、1 つの関数を使用して他の関数を並行して呼び出し、その結果を累積するファンアウト/ファンインなどです。

  • 関数の調整と連携を行い、関数を実行する順序を指定できます。

  • 状態は自動的に管理されます。 実行時間の長い関数の状態情報を保存するために独自のコードを書く必要はありません。

Durable Functions では、"オーケストレーション関数" を使用してステートフル ワークフローを定義できます。 オーケストレーション関数には、さらに次の利点があります。

  • コードでワークフローを定義できます。 JSON の説明を書いたり、ワークフロー設計ツールを使用したりする必要はありません。

  • 関数は同期的にも非同期的にも呼び出すことができます。 呼び出された関数の出力はローカルで変数に保存され、以降の関数呼び出しで使用されます。

  • 関数が待機すると、Azure では関数の進行状況に自動的にチェックポイントが設定されます。 Azure では、リソースを節約しコストを削減するために、関数の待機中に関数を退避してその状態を保存することもできます。 関数の実行が再開されると、リハイドレートされ、状態が復元されます。

関数の種類

次の 3 種類の永続関数を使用できます。クライアントオーケストレーターアクティビティです。

クライアント関数は、Durable Functions オーケストレーションのインスタンス作成のエントリ ポイントです。 新しい HTTP 要求の受信、メッセージ キューへのメッセージの登録、イベント ストリームへのイベントの受信など、さまざまなソースからのイベントに応答して実行できます。 サポートされているいずれかの言語を使用して書くことができます。

オーケストレーター関数は、アクションが実行される方法とアクションの実行順序を記述します。 オーケストレーション ロジックはコード (C# または JavaScript) に書きます。

アクティビティ関数は、Durable Functions オーケストレーションの基本作業単位です。 アクティビティ関数には、調整対象のタスクによって実行された実際の作業が含まれています。

アプリケーション パターン

Durable Functions を使用して多くの一般的なワークフロー パターンを実装できます。 たとえば、次のようなパターンがあります。

  • 関数チェーン:このパターンでは、ワークフローによって一連の関数が指定した順序で実行されます。 ある関数の出力が、シーケンス内の次の関数の入力に適用されます。 最後の関数の出力は、結果の生成に使用されます。

    Diagram illustrating a function chaining pattern.

  • ファン アウト/ファン イン:このパターンでは、複数の関数を並列で実行し、すべての関数が完了するまで待機します。 並列実行の結果は、集計したり、最終的な結果の計算に使用したりすることができます。

    Diagram illustrating a fan out/fan in pattern.

  • 非同期 HTTP API:このパターンでは、外部クライアントとの間の実行時間の長い操作の状態を調整するという問題に対処します。 HTTP 呼び出しでは、実行時間の長いアクションをトリガーし、クライアントを状態エンドポイントにリダイレクトできます。 クライアントでは、このエンドポイントをポーリングすることで操作が完了したタイミングを把握できます。

    Diagram illustrating an async HTTP API pattern.

  • モニター:このパターンでは、状態の変化を探すなどの目的で、ワークフロー内に反復プロセスを実装します。 たとえば、このパターンを使用して、特定の条件が満たされるまでポーリングすることができます。

    Diagram illustrating a monitor pattern.

  • 人による操作:このパターンは、何らかの人による操作も伴う自動化されたプロセスを組み合わせています。 自動化されたプロセス内に手動プロセスがあると、人はほとんどのコンピューターのように可用性と応答性が高くないため注意が必要です。 人による操作を組み込むには、タイムアウトと、指定された応答時間内に人が正しく応答しなかった場合に実行される補正ロジックを使用します。 承認プロセスは、人による操作を含むプロセスの一例です。

    Diagram illustrating a human interaction pattern.

Logic Apps との比較

Durable Functions と Logic Apps は、いずれもサーバーレス ワークロードを可能にする Azure サービスです。 Azure Durable Functions は、カスタム ロジックを実行する強力なサーバーレス コンピューティング オプションとして設計されています。 Azure Logic Apps は、Azure のサービスとコンポーネントの統合に適しています。 どちらのテクノロジを使用しても複雑なオーケストレーションを作成できます。 Azure Durable Functions でオーケストレーションを開発するには、コードを書き、Durable Functions 拡張機能を使用します。 Logic Apps でオーケストレーションを作成するには、設計画面を使用するか、構成ファイルを編集します。

Azure Durable Functions と Azure Logic Apps の主な違いを次の表に示します。

タスク Azure Durable Functions Azure Logic Apps
開発 コード優先 (命令型) 設計優先 (宣言型)
接続 組み込みのバインド型 (約 10 種類)。 カスタム バインドのためにコードを書くことができます。 コネクタの豊富なコレクション。 B2B 向けの Enterprise Integration Pack。 カスタム コネクタも作成できます。
アクション 個々のアクティビティが Azure 関数です。 アクティビティ関数のコードを書きます。 既製のアクションの豊富なコレクション。 カスタム コネクタを介してカスタム ロジックを統合します。
監視 Azure Application Insights Azure portal、Azure Monitor ログ
管理 REST API、PowerShell、Visual Studio Azure portal、REST API、PowerShell、Visual Studio、Visual Studio Code 拡張機能

自分の知識をチェックする

1.

Durable Functions とは

2.

次のうち、ワークフローにおけるオーケストレーター関数の役割を最も適切に説明しているものはどれですか。

3.

次のうち、人による操作アプリケーション パターンが Durable Functions の恩恵を受ける理由を最も適切に説明しているものはどれですか。