Durable Functions のバージョンの概要

Durable Functions は、サーバーレス環境でステートフル関数を記述できる、Azure FunctionsAzure WebJobs の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。 Durable Functions にまだ慣れていない場合は、概要ドキュメントをご覧ください。

2\.x の新機能

このセクションでは、バージョン 2.x で追加された Durable Functions の機能について説明します。

持続エンティティ

Durable Functions 2.x では、新しいエンティティ関数の概念が導入されました。

エンティティ関数では、"持続エンティティ" と呼ばれる小さい状態の読み取りと更新のための操作が定義されています。 オーケストレーター関数と同様、エンティティ関数は特殊なトリガー型である "エンティティ トリガー" を含む関数です。 オーケストレーター関数とは異なり、エンティティ関数には特定のコードの制約はありません。 また、エンティティ関数では、制御フローを介して状態を表す暗黙的ではなく、明示的に状態が管理されます。

詳細については、「持続エンティティ」の記事を参照してください。

持続的 HTTP

Durable Functions 2.x では、次のことを実行できる新しい持続的 HTTP 機能が導入されました。

  • オーケストレーション関数から HTTP API シリーズを直接呼び出す (ドキュメントに記載されているいくつかの制限事項があります)。
  • 自動クライアント側 HTTP 202 状態ポーリングを実装する。
  • Azure マネージド ID の組み込みサポート。

詳細については、HTTP 機能に関する記事を参照してください。

1\.x から 2.x に移行する

このセクションでは、既存のバージョン 1.x の Durable Functions をバージョン 2.x に移行し、新機能を活用する方法について説明します。

拡張機能をアップグレードする

プロジェクトに Durable Functions バインド拡張機能の最新 2.x バージョンをインストールします。

JavaScript、Python、PowerShell

Durable Functions 2.x は Azure Functions 拡張機能バンドルのバージョン 2.x で使用できます。

Durable Functions での Python のサポートには Durable Functions 2.x が必要です。

プロジェクトで拡張機能バンドルのバージョンを更新するには、host.json を開き、バージョン 2.x ([2.*, 3.0.0)) を使用するように extensionBundle セクションを更新します。

{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[2.*, 3.0.0)"
    }
}

Note

拡張機能バンドルのバージョンを変更しても Visual Studio Code に正しいテンプレートが表示されない場合は、Developer:Reload Window コマンド (Windows および Linux では Ctrl + R、macOS では Command + R) を実行して、ウィンドウを再度読み込みます。

.NET

Durable Functions バインド拡張機能の最新 2.x バージョンを使用するように .NET プロジェクトを更新します。

詳細については、「Azure Functions バインド拡張機能を登録する」を参照してください。

コードを更新する

Durable Functions 2.x では、いくつかの重大な変更が導入されています。 コードを変更しない場合、Durable Functions 1.x アプリケーションは、Durable Functions 2.x と互換性がありません。 このセクションでは、バージョン 1.x の関数を 2.x にアップグレードするときに行う必要がある変更の一部を示します。

Host.json スキーマ

Durable Functions 2.x では、新しいホストの json スキーマが使用されます。 1\.x からの主な変更点は次のとおりです。

  • ストレージ固有の構成用の "storageProvider" (および "azureStorage" サブセクション)。
  • 追跡とログ記録の構成用の "tracing"
  • イベント グリッド通知構成用の "notifications" (および "eventGrid" サブセクション)

詳細については、Durable Functions host. json のリファレンス ドキュメントを参照してください。

既定のタスクハブ名の変更

バージョン 1.x では、タスクハブ名が host.json で指定されていない場合、既定で "DurableFunctionsHub" になっていました。 バージョン 2.x では、既定のタスク ハブ名は関数アプリの名前から派生するようになりました。 このため、2.x にアップグレードするときにタスク ハブ名を指定していない場合、コードは新しいタスク ハブで動作し、すべての実行中のオーケストレーションでは、アプリケーションがそれらを処理しなくなります。 この問題を回避するには、タスク ハブ名を v1.x の既定値 "DurableFunctionsHub" に明示的に設定するか、実行中のオーケストレーションの重大な変更を処理する方法についての詳細が記載されている、ダウンタイムのないデプロイのガイダンスに関する記事に従うことができます。

パブリック インターフェイスの変更 (.NET のみ)

バージョン 1.x では、Durable Functions によってサポートされるさまざまな コンテキスト オブジェクトには、単体テストでの使用が意図される抽象基本クラスが含まれました。 Durable Functions 2.x の一部として、これらの抽象基本クラスはインターフェイスに置き換えられます。

次の表では、主な変更を示します。

1.x 2.x
DurableOrchestrationClientBase IDurableOrchestrationClient または IDurableClient
DurableOrchestrationContext または DurableOrchestrationContextBase IDurableOrchestrationContext
DurableActivityContext または DurableActivityContextBase IDurableActivityContext
OrchestrationClientAttribute DurableClientAttribute

抽象基本クラスに仮想メソッドが含まれていた場合、これらの仮想メソッドは DurableContextExtensions で定義される拡張メソッドに置き換えられています。

function.json の変更 (JavaScript および C# スクリプト)

Durable Functions 1.x では、オーケストレーション クライアントのバインドには orchestrationClienttype が使用されます。 バージョン 2.x では、代わりに durableClient が使用されます。

イベント発生の変更

Durable Functions 1.x では、イベント発生 API を呼び出して、存在しないインスタンスを指定すると、サイレント エラーが発生しました。 2\.x 以降では、存在しないオーケストレーションに対するイベント発生は例外になります。