Netherite ストレージ プロバイダーで Durable Functions を構成する

Durable Functions は、オーケストレーションとエンティティ ランタイム状態を格納するために、複数のストレージ プロバイダー ("バックエンド" とも呼ばれます) を提供しています。 既定では、Azure Storage プロバイダーを使用するように新しいプロジェクトが構成されます。 この記事では、Netherite ストレージ プロバイダーを使用するように Durable Functions アプリを構成する方法について説明します。

Note

Netherite は、高スループットシナリオのために Microsoft Research によって設計および開発されました。 一部のベンチマークでは、既定の Azure Storage プロバイダーと比較して、桁違いのスループット向上が記録されました。 Netherite ストレージ プロバイダーを使用するタイミングの詳細については、ストレージ プロバイダーに関するドキュメントを参照してください。

データ移行に関する注意

ストレージ プロバイダー間でのタスク ハブ データの移行は、現在サポートされていません。 既存のランタイム データを含む関数アプリは、Netherite バックエンドへの切り替え後、新しい空のタスク ハブで開始されます。 同様に、NetheriteL を使用して作成されたタスク ハブの内容は、別のストレージ プロバイダーに切り替える際に保持できません。

前提条件

次の手順では、既存の Durable Functions アプリから開始し、その操作方法についてよく理解していることを前提としています。

特に、このクイックスタートでは、既に以下を実行済みであることを前提としています。

  1. ローカル コンピューターでの Azure Functions プロジェクトの作成。
  2. オーケストレーター関数と、それをトリガーするクライアント関数を使用した、プロジェクトへの Durable Functions の追加。
  3. ローカル デバッグ用にプロジェクトを構成済みである。
  4. Azure Functions プロジェクトを Azure にデプロイする方法について学んでいる。

そうでない場合は、次のいずれかの記事から始めることをお勧めします。これらの記事に、上記のすべての要件を達成する方法の詳細な手順が示されています。

Netherite 拡張機能を追加する (.NET のみ)

Note

アプリで拡張機能バンドルを使用している場合は、拡張機能バンドルによって手動の拡張機能の管理が不要になるため、このセクションは無視してください。

Netherite 拡張機能の最新バージョンを NuGet にインストールする必要があります。 これは通常は、それに対する参照を .csproj ファイルに含めて、プロジェクトをビルドすることを意味します。

インストールする拡張機能パッケージは、使用している .NET ワーカーによって異なります。

次の Azure Functions Core Tools CLI コマンドを使用して拡張機能をインストールできます。

func extensions install --package <package name depending on your worker model> --version <latest version>

Core Tools CLI を使用して Azure Functions 拡張機能をインストールする方法の詳細については、「func extensions install」を参照してください。

ローカル開発用に local.settings.json を構成する

Netherite バックエンドでは、Azure で実行するために Event Hubs への接続文字列が必要です。 ただし、ローカル開発では、文字列 "SingleHost" を指定すると、Event Hubs の必要性が回避されます。

local.settings.json で、次に示すように EventHubsConnection の値を SingleHost に設定します。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "EventHubsConnection": "SingleHost",
    "FUNCTIONS_WORKER_RUNTIME": "<dependent on your programming language>"
  }
}

Note

FUNCTIONS_WORKER_RUNTIME の値は、選択したプログラミング言語によって異なります。 詳細については、そのリファレンス ドキュメントを参照してください。

host.json を更新する

host.json ファイルのストレージ プロバイダー セクションを編集して、typeNetherite に設定します。

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "storageProvider": {
        "type": "Netherite"
        }
    }
  }
}

上記のスニペットは、"最小限" の構成にすぎません。 後で、他のパラメーターを検討することもできます。

ローカルでテストする

アプリのローカル開発の準備ができました。関数アプリを起動してテストできます。 これを行う方法の 1 つは、アプリケーションのルートで func host start を実行し、単純なオーケストレーター関数を実行することです。

関数アプリの実行中に、Netherite はアクティブなパーティションに関する読み込み情報を "DurableTaskPartitions" という名前の Azure Storage テーブルに発行します。 Azure Storage Explorer を使用して、期待どおりに動作していることを確認できます。 Netherite が正しく実行されている場合、テーブルは空になりません。次の例を参照してください。

Azure Storage Explorer の

Note

このテーブルの内容の詳細については、パーティション テーブルに関する記事を参照してください。

Note

Windows OS でローカル ストレージ エミュレーションを使用している場合は、従来の "Azure Storage Emulator" コンポーネントは使用せずに、必ず Azurite ストレージ エミュレーターを使用 してください。 Netherite を使用したローカル ストレージ エミュレーションは、Azurite 経由でのみサポートされます。

Azure でアプリを実行する

Azure で Azure Functions アプリを作成する必要があります。 これを行うには、次の手順の「関数アプリを作成する」セクションの手順に従います。

Event Hubs を設定する

Azure で Netherite を実行するには、Event Hubs 名前空間を設定する必要があります。 ローカル開発中に Event Hubs を使用する場合は、設定することもできます。

Note

Event Hubs 名前空間は、Durable Functions によって使用されているかどうかに関係なく、継続的なコストが発生します。 初めて Azure をご利用になる場合、Microsoft では 12 か月間無料の Azure サブスクリプション アカウントを提供しています。

Event Hubs 名前空間を作成します

Azure portal に Event Hubs 名前空間を作成するには、これらの手順に従います。 名前空間を作成するときに、次のメッセージが表示される場合があります。

  1. "リソース グループ" を選択する: 関数アプリと同じリソース グループを使用します。
  2. "プラン" を選択し、"スループット ユニット" をプロビジョニングします。 既定値を選択します。この設定は後で変更できます。
  3. "保持" 時間の選択: 既定値を選択します。この設定は Netherite には影響しません。

Azure Event Hubs の接続文字列を取得する

Event Hubs 名前空間の接続文字列を取得するには、Azure portal で Event Hubs 名前空間に移動し、[共有アクセス ポリシー] を選択し、[RootManagedSharedAccessKey] を選択します。 これにより、[接続文字列 - 主キー] という名前のフィールドが表示され、そのフィールドの値が接続文字列になります。

ポータルでこのデータを検索する方法のスクリーンショットを次に示します。

ポータルで接続文字列 - 主キーを探します

アプリケーション設定として接続文字列を追加する

接続文字列をアプリケーション設定として関数アプリに追加する必要があります。 Azure portal でこれを行うには、関数アプリ ビューに移動し、[構成] を選択し、[新しいアプリケーション設定] を選択します。 ここで、EventHubsConnection を割り当てて接続文字列にマップできます。 ガイドとなる画像を下にいくつか示します。

[関数アプリ] ビューで、[構成] に移動し、[新しいアプリケーション設定] を選択します。名前として「EventHubsConnection」と入力し、値として接続文字列を入力します。

ランタイム スケーリングを有効にする (Elastic Premium のみ)

Note

アプリが Elastic Premium プランに含まれていない場合は、このセクションをスキップします。

アプリが Elastic Premium プランで実行されている場合は、スケーリングを向上するためにランタイム スケール監視を有効にすることをお勧めします。 これを行うには、[構成] に移動し、[関数ランタイム設定] を選択し、[ランタイム スケール監視] を [オン] に切り替えます。

ポータルでランタイム スケール監視を有効にする方法。

アプリで 64 ビット アーキテクチャを使用していることを確認する (Windows のみ)

Note

アプリが Linux で実行されている場合は、このセクションをスキップします。

Netherite を動作させるには、64 ビット アーキテクチャが必要です。 Functions V4 以降では、これが既定である必要があります。 これは通常、ポータルで検証できます。[構成][全般設定] を選択し、[プラットフォーム] フィールドが [64 ビット] に設定されていることを確認します。 ポータルにこのオプションが表示されない場合は、64 ビット プラットフォームで既に実行されている可能性があります。 たとえば、Linux アプリでは 64 ビットのみがサポートされているため、この設定は表示されません。

ポータルで 64 ビットを使用するようにランタイムを構成します。

デプロイ

これで、コードをクラウドにデプロイし、その上でテストまたはワークロードを実行できるようになりました。 Netherite が正しく構成されていることを検証するには、ポータルで Event Hubs のメトリックを確認して、アクティビティがあることを確認します。

Note

Azure へのプロジェクトのデプロイに関するガイダンスについては、前提条件のセクションで選択したプログラミング言語に関する記事のデプロイ手順を確認してください。

パフォーマンス ベンチマークを含む Netherite のアーキテクチャ、構成、ワークロードの動作の詳細については、Netherite のドキュメントを参照することをお勧めします。