Durable Functions は、サーバーレス環境でステートフル関数を記述できる Azure Functions と Azure WebJobs の拡張機能です。 この拡張機能は状態、チェックポイント、再起動を管理します。 Durable Functions にまだ慣れていない場合は、 概要のドキュメントを参照してください。
Microsoft.Azure.WebJobs.Extensions.DurableTask v3.x
このセクションでは、新しい Microsoft.Azure.WebJobs.Extensions.DurableTask v3 パッケージ (後続のセクションでは WebJobs.Extensions.DurableTask と呼ばれます) について説明し、その更新と変更の詳細を説明します。 この更新プログラムは、 インプロセス モデルを使用する Durable C# アプリを実行しているお客様にとって重大な変更と見なされます。
注
Durable Functions .NET アウトプロセス パッケージである Microsoft.Azure.Functions.Worker.Extensions.DurableTask は、基になるアセンブリとして Microsoft.Azure.WebJobs.Extensions.DurableTask を参照します。 したがって、この更新プログラムは、バージョン 1.2.x 以降の Microsoft.Azure.Functions.Worker.Extensions.DurableTask にも適用されます。
新しい Azure Storage SDK
既定では、Durable Functions は Azure Storage をストレージ バックエンドとして使用し、アプリケーションの状態を永続的に保存します。 WebJobs.Extensions.DurableTask v3 では、Azure Storage バックエンドは、Azure Storage SDK の最新バージョン (Azure.Data.Tables、Azure.Storage.Blobs、Azure.Storage.Queues) を使用するようにアップグレードされました。 新しい Azure Storage SDK のセキュリティが強化され、マネージド ID のサポートが強化されています。 また、パフォーマンスの向上、より効率的なデータ処理、およびその他の最新のストレージ機能も提供します。
Azure Storage バックエンドのコスト効率の向上
Azure Storage バックエンドでは、パーティション マネージャーは、パーティション/制御キューをワーカー間で分散する役割を担います。 WebJobs.Extensions.DurableTask v3 パッケージでは、既定で Partition Manager V3 が使用されます。これは、Azure テーブルを利用して Azure BLOB リースではなくパーティション割り当てを管理する新しい設計です。 この設計により、デバッグを容易にしながら、ストレージ コストを大幅に削減できます。 Partition Manager V3 を使用すると、という名前のPartitions
がストレージ アカウントに作成されるため、パーティション情報を簡単に確認できます。
Functions v1 ランタイムのサポートを削除しました
WebJobs.Extensions.DurableTask v3 では、バージョン 1.x の Azure Functions ランタイムがサポートされなくなりました。サポートは 2026 年 9 月に終了する予定です。 Functions ランタイム v1 を使用する必要がある場合は、 v2.11.0 より前の Durable Functions 拡張機能バージョンを使用してください。 サポートのスケジュールが終了すると、Durable Functions でもランタイム v1 のサポートが削除されることに注意してください。
.NET Framework アップデート
WebJobs.Extensions.DurableTask v3 では、.NET Framework を .NET Core 3.1 から .NET 6 に更新し、パフォーマンスが向上し、最新の .NET の機能とライブラリとの互換性が強化されています。 この更新プログラムは、Azure Functions 拡張機能バンドルの将来のリリースに合わせて調整されます。
WebJobs.Extensions.DurableTask v2.x から v3.x への移行
WebJobs.Extensions.DurableTask v2.x から v3.x への移行は、変更がバックグラウンドで行われるので、コードを変更する必要なく簡単に行うように設計されています。 v3.x の新機能と機能強化を利用し始めるために、依存関係を更新するだけです。
- .NET インプロセス ユーザーの場合: Microsoft.Azure.WebJobs.Extensions.DurableTask バージョン 3.0.0 以降に更新します。
- .NET 分離ユーザーの場合: Microsoft.Azure.Functions.Worker.Extensions.DurableTask バージョン 1.2.0 以降に更新します。
- 拡張機能バンドルを使用する他の言語のユーザーの場合: 拡張機能バンドルでの Durable Functions v3 のサポートは、バージョン 4.22.0 以降で利用できるようになります。
注
WebJobs.Extensions.DurableTask v3 では、最新バージョンの Azure Storage SDK が使用されます。これは、v2 (UTF-8) で使用されるテキスト エンコード (Base64) と異なります。 下位互換性を確保するために v3.x から v2.x にダウングレードする必要がある場合は、少なくとも v2.13.5 を使用してください。 Microsoft.Azure.Functions.Worker.Extensions.DurableTask を使用する .NET アウトプロセス ユーザーの場合、 v1.2.x 以降から元に戻す場合は v1.1.5 以降にダウングレードします。
v2.x のサポートとメンテナンス
WebJobs.Extensions.DurableTask v2.x は引き続きセキュリティ更新プログラムとバグ修正プログラムを受け取り、既存のアプリケーションの安全性と安定性を維持します。 ただし、すべての新機能と拡張機能は、v3.x にのみ追加されます。 このため、最新の機能と継続的な機能強化を利用するには、できるだけ早く WebJobs.Extensions.DurableTask v3 にアップグレードする必要があります。
Microsoft.Azure.WebJobs.Extensions.DurableTask v2.x の新機能
このセクションでは、バージョン 2.x で追加される Durable Functions の機能について説明します。
注
このセクションは、dotnet 分離ワーカーの Durable Functions には適用されません。 詳細については、 非消耗品関数分離プロセスの概要を参照してください。
持続エンティティ
Durable Functions 2.x では、新しい エンティティ関数 の概念が導入されました。
エンティティ関数では、"持続エンティティ" と呼ばれる小さい状態の読み取りと更新のための操作が定義されています。 オーケストレーター関数と同様、エンティティ関数は特殊なトリガー型である "エンティティ トリガー" を含む関数です。 オーケストレーター関数とは異なり、エンティティ関数には特定のコード制約はありません。 また、エンティティ関数では、制御フローを介して状態を表す暗黙的ではなく、明示的に状態が管理されます。
詳細については、 永続エンティティ に関する記事を参照してください。
堅牢なHTTP
Durable Functions 2.x では、次のことが可能な新しい Durable 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 (extensionBundle
) を使用するように [4.*, 5.0.0)
セクションを更新します。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
注
拡張機能バンドルのバージョンを変更した後に Visual Studio Code に正しいテンプレートが表示されない場合は、 Developer: Reload Window コマンド (Windows および Linux の場合は Ctrl + R 、macOS の 場合は Command + R ) を実行してウィンドウを再読み込みします。
ジャワ
Durable Functions 2.x は、 Azure Functions 拡張機能バンドルのバージョン 4.x 以降で使用できます。 Java 関数を実行するには、Azure Functions 4.0 ランタイムを使用する必要があります。
プロジェクトで拡張機能バンドルのバージョンを更新するには、host.json を開き、バージョン 4.x (extensionBundle
) を使用するように [4.*, 5.0.0)
セクションを更新します。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
}
}
。網
Durable Functions バインド拡張機能の最新バージョンを使用するように .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 では、新しい host.json スキーマが使用されます。 1.x からの主な変更点は次のとおりです。
-
"storageProvider"
(および"azureStorage"
サブセクション) を使用してストレージ固有の構成を行います。 -
トレースとログの構成用の
"tracing"
。 -
"notifications"
(および"eventGrid"
サブセクション) を使用して Event Grid 通知を構成します。
詳細については、 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 のオーケストレーション クライアントのバインドには、type
の orchestrationClient
が使われます。 バージョン 2.x では、代わりに durableClient
が使用されます。
イベント生成の変更点
Durable Functions 1.x では、 raise イベント API を呼び出し、存在しないインスタンスを指定すると、サイレント エラーが発生しました。 2.x 以降では、存在しないオーケストレーションにイベントを発生させると、例外が発生します。