Alternative Architecture DOJO

オルターブースのクラウドネイティブ特化型ブログです。

Azure Functions durable task schedulerを試してみた

こんにちは、先日娘が「ママとイオンの矢印に行ってきた!」というので一体何のことかと思ったら無印(良品)のことだと気づいて大笑いした木村です。

先日、Azure Functions durable task schedulerがパブリックプレビューとしてリリースされました。早速こちらを試してみたので、その体験を共有したいと思います。

techcommunity.microsoft.com

Durable task Schedulerとは?

Durable task Schedulerは、Azure FunctionsのDurable Functionsにおける新しいストレージプロバイダーです。ストレージプロバイダーは、Durable Functionsのオーケストレーションやアクティビティの状態を管理するために使用されます。
既存のストレージプロバイダーと比較して、Durable task schedulerは以下のような特徴を持っています。

  • Azure管理型リソース: 独自のストレージアカウントを用意する必要がなく、Azureが完全に管理
  • 高性能とスケーラビリティ: オーケストレーションとエンティティの処理スループットが向上し、大規模なアプリケーションに最適
  • ダッシュボード: オーケストレーションの状態やエラーを視覚的に確認でき、管理やデバッグが容易
  • セキュリティ: RBACを使用したエンタープライズグレードの認証
  • ローカルエミュレーター: 開発環境でのデバッグを簡素化するためのエミュレーターを提供

これにより、より大規模なアプリケーションを構築することができ、また、オーケストレーションの実行状況をより効率的に管理できるようになります。
今回はその中でも特に、ダッシュボードを通じてオーケストレーションの動作を視覚的に確認できる点をお伝えしたいと思います。

試してみた手順

1. Durable Functionsのサンプルプログラムを作成

まず、C#でDurable Functionsのサンプルプログラムを作成しました。これは、Azure Functionsの公式ドキュメントの通りに作成しました。
dotnetのバージョンだけ、dotnet 9に変更しました。

learn.microsoft.com

2. ストレージプロバイダーをDurable task schedulerに変更

次に、以下のドキュメントに従い、ストレージプロバイダーをDurable Task Schedulerに変更しました。

learn.microsoft.com

まず、NugetパッケージのMicrosoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManagedMicrosoft.Azure.Functions.Worker.Extensions.DurableTaskを更新します。

dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged --prerelease
dotnet add package Microsoft.Azure.Functions.Worker.Extensions.DurableTask --prerelease

次に、host.jsonを更新します。storageProviderの所ですね。

{
  "extensions": {
    "durableTask": {
      "hubName": "%TASKHUB_NAME%",
      "storageProvider": {
        "type": "azureManaged",
        "connectionStringName": "DURABLE_TASK_SCHEDULER_CONNECTION_STRING"
      }
    }
  }
}

そして、hubNameDURABLE_TASK_SCHEDULER_CONNECTION_STRINGlocal.settings.jsonで指定します。

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;Authentication=None",
    "TASKHUB_NAME": "default"  }
}

DURABLE_TASK_SCHEDULER_CONNECTION_STRINGの値は、この後起動するdurable task scheduler emulatorのURLを指定します。

3. durable task scheduler emulatorを起動

dockerを用いて、durable task scheduler emulatorを起動します。

docker pull mcr.microsoft.com/dts/dts-emulator:v0.0.5
docker run -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:v0.0.5

これでdurable task scheduler emulatorがlocalhost:8080で起動し、ダッシュボードがlocalhost:8082で起動します。

durable task scheduler emulatorが起動したら、Durable Functionsのサンプルプログラムを実行します。

func start

4. ダッシュボードでオーケストレーションを確認

ブラウザでダッシュボードにアクセスすると以下のような画面になります。
まだオーケストレーションは実行されていないので、履歴は空になっています。

ダッシュボードのトップ画面

hubの画面。まだオーケストレーションを起動してないので履歴が空。

オーケストレーションを起動するために、以下のコマンドを実行します。
{HTTPトリガーのURL}は、func startを実行した際に表示されるURLを使用してください。

 curl -X POST {HTTPトリガーのURL} -d '{}'

ダッシュボードを更新すると、オーケストレーションが実行されていることが確認できます。

起動したオーケストレーションが表示されている

オーケストレーションの状態や、アクティビティの状態が表示されます。

オーケストレーションのタイムライン。アクティビティ関数の実行の様子が一目で分かる。

オーケストレーションのシーケンス表示

5. Azureにデプロイ

では、このDurable FunctionアプリをAzureにデプロイしてみます。
公式ドキュメントに従い、プレミアムプランまたはApp ServiceプランのFunction Appを作ります。今回はApp Serviceプランで作成しました。

続いて、「Durable Functions」タブで、ストレージバックエンドに「Durableタスクスケジューラ」を選択します。リージョンはまだ日本は選べず、Pricing plansもDedicatedのみです。Pricing plansは、今後はConsumptionが選べるようになるようなので楽しみに待つことにします。

ストレージバックエンドの選択

リソースの作成に成功したら、Durable Functionアプリをデプロイします。リソースの作成は私が行ったときには15分くらいかかりましたので気長に待ちましょう。

6. ダッシュボードに接続

次に、Durable task schedulerのリソースに移動し、概要の「タスクハブ名」をクリックします。

durable task schedulerの概要

「アクセス制御(IAM)」から、アクセスするプリンシパルにDurable Task Data Contributorを割り当てます。
私が試したときには、共同作成者のロールのアカウントだと画面にはアクセスできますが、unknown errorとなってオーケストレーションの状態が取得できませんでしたので忘れず割り当てをします。

割り当て後、概要の「ダッシュボードURL」にアクセスすると、ダッシュボードにアクセスできます。

Azure上のダッシュボード

7. オーケストレーションを動かす

では、オーケストレーションを動かしてみましょう。Funciton Appsのページから、デプロイしたHTTPトリガー関数のURLを取得して先ほどと同じくPOSTメソッドで呼び出します。

そして、ダッシュボードにアクセスしてみます。

履歴が表示されている

タイムラインが表示されている

このように、ダッシュボードでは、オーケストレーションの状態や履歴が一目で分かり、開発にも運用にも非常に便利だと感じました。

感想

Durable task schedulerを使うことで、Durable Functionsの開発と運用がさらに効率的になると感じました。
特に、ダッシュボードではオーケストレーションの状況を視覚的に確認できるので、開発時のデバッグや運用時の状況確認が容易になります。今後の正式リリースが楽しみです。

皆さんの参考になれば幸いです。


サービス一覧 www.alterbooth.com cloudpointer.tech www.alterbooth.com