Durable Functions のバージョンの概要
Durable Functions は、サーバーレス環境でステートフル関数を記述できる、Azure Functions と Azure WebJobs の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。 Durable Functions にまだ慣れていない場合は、概要ドキュメントをご覧ください。
2\.x の新機能
このセクションでは、バージョン 2.x で追加された Durable Functions の機能について説明します。
Note
このセクションは、.Net 分離ワーカーの Durable Functions には適用されません。 それについては、分離プロセスの 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 を開き、バージョン 4.x ([4.*, 5.0.0)
) を使用するように extensionBundle
セクションを更新します。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
Note
拡張機能バンドルのバージョンを変更しても Visual Studio Code に正しいテンプレートが表示されない場合は、Developer:Reload Window コマンド (Windows および Linux では Ctrl + R、macOS では Command + R) を実行して、ウィンドウを再度読み込みます。
Java
Durable Functions 2.x は Azure Functions 拡張機能バンドルのバージョン 4.x 以降で使用できます。 Java 関数を実行するには、Azure Functions 4.0 ランタイムを使用する必要があります。
プロジェクトで拡張機能バンドルのバージョンを更新するには、host.json を開き、バージョン 4.x ([4.*, 5.0.0)
) を使用するように extensionBundle
セクションを更新します。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
.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 の変更
Durable Functions 1.x では、オーケストレーション クライアントのバインドには orchestrationClient
の type
が使用されます。 バージョン 2.x では、代わりに durableClient
が使用されます。
イベント発生の変更
Durable Functions 1.x では、イベント発生 API を呼び出して、存在しないインスタンスを指定すると、サイレント エラーが発生しました。 2\.x 以降では、存在しないオーケストレーションに対するイベント発生は例外になります。