Durable Functions は、内部で Durable Task Framework (DTFx) によって支援される一連の Azure Functions トリガーおよびバインディングです。 DTFx では、Durable Functions によって使用される Azure Storage プロバイダーなど、さまざまなバックエンド ストレージ プロバイダーがサポートされています。 Durable Functions v2.5.0 の時点で、ユーザーは、Azure Storage プロバイダー以外の DTFx ストレージ プロバイダーを使用するように関数アプリを構成できます。
注
Durable Functions の既定の Azure Storage プロバイダーは、追加の構成を必要としないため、最も使い方が簡単です。 ただし、代替バックエンド プロバイダーの使用を優先する可能性があるコスト、スケーラビリティ、およびデータ管理のトレードオフがあります。
Durable Functions では、"Bring Your Own (BYO)" と Azure Managed の 2 種類のバックエンド プロバイダーがサポートされています。 BYO オプションには 、Azure Storage、Netherite、Microsoft SQL Server (MSSQL) が含まれます。 Azure マネージド オプションは、現在プレビュー段階にある新しい 永続的タスク スケジューラ です。 この記事では、サポートされているすべてのバックエンド プロバイダーについて説明し、それらを相互に比較し、使用を開始する方法に関する基本情報を提供します。
注
現在、あるストレージ バックエンド プロバイダーから別のストレージ バックエンド プロバイダーにデータを移行することはできません。 新しいプロバイダーを使用する場合は、新しいプロバイダーで構成された新しいアプリを作成する必要があります。
永続的タスク スケジューラ (プレビュー)
Durable タスク スケジューラは、Durable Functions 用のフル マネージドのハイ パフォーマンス バックエンド プロバイダーです。 Microsoft Research の支援を得て、ゼロから設計および構築されました。 この新しいプロバイダーは、管理、可観測性、パフォーマンス、セキュリティなどの側面で最適なユーザー エクスペリエンスを提供することを目的としています。
持続的タスク スケジューラの主な利点は次のとおりです。
- BYO バックエンド プロバイダーと比較して、管理と操作のオーバーヘッドが低い
- 高水準の可観測性と管理ダッシュボードが標準で提供されます。
- 現在、すべてのバックエンドの最高スループットをサポートします。
- マネージド ID を使用した認証のサポート。
既存の Durable Functions ユーザーは、コードを変更なしでスケジューラを利用できます。 永続的なタスク スケジューラの詳細と、作業を開始する方法について説明します。
持続的タスク スケジューラのサンプルは、 GitHub にあります。
Azure Storage
Azure Storage は、Durable Functions の既定のストレージ プロバイダーです。 これにより、キュー、テーブル、BLOB が使用され、オーケストレーションとエンティティの状態が保持されます。 また、パーティション管理のために BLOB と BLOB のリースが使用されます。 多くの場合、Durable Functions のランタイム状態の保存に使用されるストレージ アカウントは、Azure Functions (AzureWebJobsStorage
) で使用される既定のストレージ アカウントと同じです。 ただし、別のストレージ アカウントを使用して Durable Functions を構成することもできます。 Azure Storage プロバイダーは、Durable Functions 拡張機能に組み込まれており、他の依存関係はありません。
Azure Storage プロバイダーの主な利点を次に示します。
- セットアップが不要 - 関数アプリのセットアップ エクスペリエンスによって作成されたストレージ アカウントを使用できます。
- 最もコストの低いサーバーレス課金モデル - Azure Storage には、使用量に完全に基づいた使用量ベースの価格モデルがあります (詳細情報)。
- 最適なツールのサポート - Azure Storage では、クロスプラットフォーム ローカル エミュレーションが提供され、Visual Studio、Visual Studio Code、Azure Functions Core Tools と統合されます。
- 最高の成熟度 - Azure Storage は、Durable Functions 用のオリジナルのストレージ バックエンドであり、最も厳しいテストを通過しています。
- ストレージ プロバイダーに接続する際にシークレットではなく ID を使用するためのサポート。
Azure Storage ストレージ プロバイダーの DTFx コンポーネントのソース コードは、Azure/durabletask GitHub リポジトリで確認できます。
注
Azure Storage プロバイダーを使用する場合、標準の汎用 Azure Storage アカウントが必要です。 他のストレージ アカウント タイプはどれもサポートされていません。 従来の v1 汎用ストレージ アカウントを使用することを強くお勧めします。これは、Durable Functions ワークロードでは新しい v2 ストレージ アカウントの方がコストが高くなる可能性があるためです。 Azure Storage アカウントの種類について詳しくは、「ストレージ アカウントの概要」ドキュメントを参照してください。
Netherite
注
Durable Functions での Netherite ストレージ バックエンドの使用のサポートは、2028 年 3 月 31 日に終了します。 現在 Netherite を使用しているワークロードの Durable Task Scheduler の評価を開始することをお勧めします。 サポート終了のお知らせを参照してください。
Netherite ストレージ バックエンドは、Microsoft Research によって設計および開発されました。 これは、Azure ページ BLOB 上で Azure Event Hubs と FASTER データベース テクノロジを使用します。 Netherite の設計により、他のプロバイダーと比較してオーケストレーションとエンティティの高スループット処理が可能になります。 一部のベンチマーク シナリオでは、既定の Azure Storage プロバイダーと比較して、桁違いのスループットが記録されました。
Netherite ストレージ プロバイダーの主な利点を次に示します。
- 他のストレージ プロバイダーと比較して、低コストでスループットが高くなります。
- 価格 - パフォーマンスの最適化がサポートされ、必要に応じてパフォーマンスをスケールアップできます。
- Event Hubs Basic と Standard SKU を使用した最大 32 のデータ パーティションがサポートされます。
- 高スループットのワークロードに対して、他のプロバイダーよりもコスト効率に優れています。
Netherite ストレージ プロバイダーの使用を開始する方法など、技術的な詳細については、Netherite のドキュメントを参照してください。 Netherite ストレージ プロバイダーのソース コードは、microsoft/durabletask-netherite GitHub リポジトリで確認できます。 Netherite ストレージ プロバイダーの詳細な評価については、研究論文「Serverless Workflows with Durable Functions and Netherite」を参照してください。
注
Netherite という名前は、Minecraft の世界が元になっています。
Microsoft SQL Server (MSSQL)
Microsoft SQL Server (MSSQL) ストレージ プロバイダーは、すべての状態を Microsoft SQL Server データベースに保存します。 これは、SQL Server のオンプレミスとクラウドホステッドの両方のデプロイで、 Azure SQL Database を含むと互換性があります。
MSSQL ストレージ プロバイダーの主な利点を次に示します。
- 切断された環境をサポート - SQL Server インストールを使用する場合、Azure 接続は必要ありません。
- Azure ホステッド、オンプレミスなど、複数の環境およびクラウド間で移植可能です。
- 厳密なデータの整合性により、データ損失なしでバックアップ/復元およびフェイルオーバーを実行できます。
- カスタム データ暗号化 (SQL Server の機能) がネイティブ サポートされます。
- 組み込みストアド プロシージャを介して、既存のデータベース アプリケーションと統合されます。
MSSQL ストレージ プロバイダーの使用を開始する方法など、技術的な詳細については、Microsoft SQL プロバイダーのドキュメントを参照してください。 MSSQL ストレージ プロバイダーのソース コードは、microsoft/durabletask-mssql GitHub リポジトリで確認できます。
Azure Storage プロバイダーの構成
Azure Storageプロバイダーは既定のストレージ プロバイダーであるため、明示的な構成、NuGet パッケージ参照、または拡張機能バンドル参照は不要です。
こちらの パスで、extensions/durableTask/storageProvider
構成オプションの全セットを確認できます。
接続
host.json の connectionName
プロパティは、アプリを Azure Storage に接続する方法を指定する環境構成への参照です。 次が指定されている場合があります。
- まとめて ID ベースの接続を定義する、複数のアプリケーション設定の共有プレフィックスの名前。 マネージド ID は、Microsoft Entra 認証を使って、ストレージ アカウントへの最も安全な接続を提供します。
- 接続文字列を含むアプリケーション設定の名前。 接続文字列を取得するには、「ストレージ アカウント アクセス キーを管理する」の手順に従います。
構成された値が、1 つの設定に完全一致し、プレフィックスがその他の設定とも一致する場合は、完全一致が使用されます。 host.json で値が指定されていない場合、既定値は AzureWebJobsStorage
です。
ID ベースの接続
バージョン 2.7.0 以降の拡張機能と Azure Storage プロバイダーを使っている場合は、シークレットを含む接続文字列を使う代わりに、アプリで Microsoft Entra の ID を使用できます。 これを行うには、トリガーおよびバインド構成の connectionName
プロパティにマップされる共通のプレフィックスに設定を定義します。
Durable Functions で ID ベースの接続を使用するには、次のアプリ設定を構成します。
プロパティ | 環境変数テンプレート | 説明 | 値の例 |
---|---|---|---|
Blob service の URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
HTTPS スキームを使用する、ストレージ アカウントの BLOB サービスのデータ プレーン URI。 | https://<storage_account_name>.blob.core.windows.net |
Queue サービス の URI | <CONNECTION_NAME_PREFIX>__queueServiceUri |
HTTPS スキームを使用する、ストレージ アカウントのキュー サービスのデータ プレーン URI。 | https://<storage_account_name>.queue.core.windows.net |
テーブル サービスの URI | <CONNECTION_NAME_PREFIX>__tableServiceUri |
HTTPS スキームを使用する、ストレージ アカウントのテーブル サービスのデータ プレーン URI。 | https://<storage_account_name>.table.core.windows.net |
接続をカスタマイズするには、プロパティを追加設定します。 「ID ベース接続に共通のプロパティ」を参照してください。
Azure Functions サービスでホストされている場合、ID ベースの接続では、マネージド ID が使用されます。 ユーザー割り当て ID を credential
および clientID
プロパティで指定できますが、システム割り当て ID が既定で使用されます。 リソース ID を使用したユーザー割り当て ID の構成はサポートされていないことに注意してください。 ローカル開発などの他のコンテキストで実行する場合は、代わりに開発者 ID が使用されますが、カスタマイズすることもできます。
ID ベースの接続によるローカル開発に関するページをご覧ください。
ID にアクセス許可を付与する
使用されている ID が何であれ、目的のアクションを実行するためのアクセス許可が必要です。 ほとんどの Azure では、これはそれらのアクセス許可を提供する組み込みロールまたはカスタム ロールを使って、Azure RBAC でロールを割り当てる必要があることを意味します。
重要
すべてのコンテキストに必要ではない一部のアクセス許可がターゲット サービスによって公開される場合があります。 可能であれば、最小限の特権の原則に従い、必要な特権だけを ID に付与します。 たとえば、アプリがデータ ソースからの読み取りのみを行う必要がある場合は、読み取りアクセス許可のみを持つロールを使用します。 サービスへの書き込みも可能なロールを割り当てることは、読み取り操作に対するアクセス許可が過剰になるため、不適切です。 同様に、ロールの割り当てが、読み取る必要のあるリソースだけに限定されていることを確認する必要があります。
実行時に Azure ストレージへのアクセスを提供するロールの割り当てを作成する必要があります。 所有者のような管理ロールでは十分ではありません。 通常の操作で Durable Functions 拡張機能を使用する場合、次の組み込みロールが推奨されます。
アプリケーションでは、記述したコードに基づいて追加のアクセス許可が必要になる場合があります。 既定の動作を使用している場合、または明示的に "AzureWebJobsStorage" に connectionName
を設定 している場合は、その他のアクセス許可に関する考慮事項については、 ID を使用したホスト ストレージへの接続 に関するページを参照してください。
代替ストレージ プロバイダーの構成
代替ストレージ プロバイダーの構成は、通常、2 段階のプロセスです。
- 適切な NuGet パッケージを関数アプリに追加します (この要件は、拡張機能バンドルを使用するアプリでは一時的な要件です)。
- host.json ファイルを更新して、使用するストレージ プロバイダーを指定します。
host.json でストレージ プロバイダーが明示的に構成されていない場合、既定では Azure Storage プロバイダーが有効になります。
持続的タスク スケジューラの構成 (プレビュー)
持続的タスク スケジューラを始めるためのドキュメントを参照してください。
MSSQL ストレージ プロバイダーの構成
MSSQL ストレージ プロバイダーを有効にする際には、host.json
での構成変更が必要になります。 C# ユーザーの場合は、追加のインストール手順も必要になります。
host.json
構成
次の例は、MSSQL ストレージ プロバイダーを有効にするために必要な最小構成を示しています。
{
"version": "2.0",
"extensions": {
"durableTask": {
"storageProvider": {
"type": "mssql",
"connectionStringName": "SQLDB_Connection"
}
}
}
}
詳細なセットアップ手順については、MSSQL プロバイダーの概要に関するドキュメントと github.io に関するドキュメントを参照してください。
Durable Task MSSQL 拡張機能をインストールする (.NET のみ)
注
アプリで拡張機能バンドルを使用している場合は、拡張機能バンドルによって手動の拡張機能の管理が不要になるため、このセクションは無視してください。
NuGet: Microsoft.Azure.Functions.Worker.Extensions.DurableTask.SqlServer
に最新バージョンの MSSQL ストレージ プロバイダー拡張機能をインストールする必要があります。 これは通常は、それに対する参照を .csproj
ファイルに含めて、プロジェクトをビルドすることを意味します。
ストレージ プロバイダーの比較
サポートされている各種のストレージ プロバイダー間には、重要なトレードオフが多数あります。 次の表を使用すると、これらのトレードオフを理解でき、ニーズに最も合うストレージ プロバイダーを判別できます。
注
Durable Functions での Netherite ストレージ バックエンドの使用のサポートは、2028 年 3 月 31 日に終了します。 現在 Netherite を使用しているワークロードの Durable Task Scheduler の評価を開始することをお勧めします。 サポート終了のお知らせを参照してください。
ストレージ プロバイダー | Azure Storage | Netherite | MSSQL | DTS |
---|---|---|---|---|
公式サポートの状況 | ✅ 一般提供 (GA) | ✅ 一般提供 (GA) | ✅ 一般提供 (GA) | パブリック プレビュー |
外部依存関係 | Azure Storage アカウント (汎用 v1) | Azure Event Hubs Azure Storage アカウント (汎用) |
SQL Server 2019 または Azure SQL Database | 該当なし |
ローカル開発とエミュレーションのオプション | Azurite v3.12+ (クロス プラットフォーム) | タスク ハブのメモリ内エミュレーションをサポートします (詳細情報) | SQL Server Developer エディション (Windows、Linux、Docker のコンテナーをサポート) | 耐久性のあるタスクスケジューラエミュレーター |
タスク ハブの構成 | 明示 | 明示 | 既定で暗黙 (詳細情報) | 明示 |
最大スループット | 中 | 非常に高 | 中 | 非常に高 |
最大オーケストレーション/エンティティ スケールアウト (ノード数) | 16 | 32 | 該当なし | 該当なし |
最大アクティビティ スケールアウト (ノード数) | 該当なし | 32 | 該当なし | 該当なし |
Durable Entities のサポート | ✅ 完全サポート | ✅ 完全サポート | ⚠️ .NET Isolated を使用する場合を除き、サポート対象 | ✅ 完全サポート |
KEDA 2.0 スケーリングのサポート (詳細情報) |
❌ サポート対象外 | ❌ サポート対象外 | ✅ MSSQL スケーラーを使用する場合にサポート対象 (詳細情報) | もうすぐです! |
拡張機能バンドルのサポート (非 .NET アプリで推奨) | ✅ 完全サポート | ✅ 完全サポート | ✅ 完全サポート | もうすぐです! |
価格 - パフォーマンスを構成できるか? | ❌ いいえ | ✅ はい (Event Hubs TU と CU) | ✅ はい (SQL vCPU) | もうすぐです! |
切断された環境のサポート | ❌ Azure 接続が必要 | ❌ Azure 接続が必要 | ✅ 完全サポート | ❌ Azure 接続が必要 |
ID ベースの接続 | ✅ 完全サポート | ❌ サポート対象外 | ⚠️ ランタイム駆動型スケーリングが必要 | ✅ 完全サポート |
Flex 従量課金プラン | ✅ 完全にサポートされています (メモを参照) | ❌ サポート対象外 | ✅ 完全サポート | ❌ サポート対象外 |