次の方法で共有


クイック スタート: Azure Functions Durable Task Scheduler を使用するように Durable Functions アプリを構成する (プレビュー)

Azure Functions の機能である Durable Functions を使用して、サーバーレス環境でステートフル関数を記述します。 Durable Functions が便利なシナリオには、マイクロサービスとワークフローの調整、ファンアウト/ファンインなどのステートフル パターン、実行時間の長いタスクなどがあります。

Durable Task Scheduler を Durable Functions のバックエンドとして使用して、オーケストレーションとエンティティのランタイム状態を格納できます。

このクイック スタートでは次の作業を行います。

  • Durable Task Scheduler を使用するように既存の Durable Functions アプリを構成します。
  • ローカル開発用に Durable Task エミュレーターを設定します。
  • Visual Studio Code を使用して App Service プランでアプリを Azure にデプロイします。
  • Durable Task Scheduler ダッシュボードで、アプリとタスク ハブの状態を監視します。

Durable Task Scheduler では現在、 Functions Premium プランと App Service プランで実行されている Durable Functions のみがサポートされています。

[前提条件]

このクイック スタートでは、以下のものと一緒にローカル コンピューターに Azure Functions プロジェクトが既に存在することを前提としています。

これらの前提条件を満たしていない場合は、次のいずれかのクイックスタートから始め、ローカル Functions プロジェクトを設定することをお勧めします。

以下も必要です。

  • Durable Task Scheduler エミュレーターを実行するためにインストールされた Docker
  • Azurite がインストールされています。
  • データをセキュリティで保護する HTTP テスト ツール

Durable Task Scheduler パッケージを追加する

dotnet add package コマンドを使用して、Microsoft.Azure.Functions.Worker.Extensions.DurableTask.AzureManaged パッケージの最新バージョンをインストールします。

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

Durable Task Scheduler 拡張機能には、 Microsoft.Azure.Functions.Worker.Extensions.DurableTask バージョン 1.2.2 以降が必要です。

host.jsonで、Durable Task Scheduler パッケージを含むプレビュー バージョンを使用するように、 extensionBundle プロパティを更新します。

{
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle.Preview",
    "version": "[4.29.0, 5.0.0)"
  }
}

host.json を更新する

バックエンドとして Durable Task Scheduler を使用するように、host.json を次のように更新します。

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

local.settings.json の設定

ローカル開発用の接続情報を追加します。

{
  "IsEncrypted": false,
  "Values": {
    "FUNCTIONS_WORKER_RUNTIME": "<DEPENDENT ON YOUR PROGRAMMING LANGUAGE>",
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "DURABLE_TASK_SCHEDULER_CONNECTION_STRING": "Endpoint=http://localhost:8080;Authentication=None",
    "TASKHUB_NAME": "default"
  }
}

Durable Task エミュレーターを設定する

  1. エミュレーターを含む Docker イメージをプルします。

    docker pull mcr.microsoft.com/dts/dts-emulator:latest
    
  2. エミュレーターを実行します。

    docker run -d -p 8080:8080 -p 8082:8082 mcr.microsoft.com/dts/dts-emulator:latest
    

    次の出力は、エミュレーターが正常に開始されたことを示しています。

    ターミナルでエミュレーターが正常に開始されたことを示すスクリーンショット。

  3. Docker デスクトップで公開されているポートをメモしておきます。 スケジューラは、さまざまな目的で複数のポートを公開します。

    • 8080: アプリがスケジューラに接続できるようにする gRPC エンドポイント
    • 8082: Durable Task Scheduler ダッシュボードのエンドポイント

    Docker 上のポートのスクリーンショット。

ローカルでテストする

  1. アプリのルート ディレクトリに移動し、Azurite を起動します。

    azurite start
    
  2. アプリケーションを実行します。

    func start
    

    アプリに関数の一覧が表示されます。 Durable Functions のクイックスタートのいずれかに従ってアプリを作成した場合、次のような出力が表示されます。

    アプリをローカルで実行するときに表示される関数のスクリーンショット。

  3. 選択した HTTP POSTを使用して、URL エンドポイントに HTTP 要求を送信して、オーケストレーション インスタンスを開始します。

  4. statusQueryGetUriの URL 値をコピーし、ブラウザーのアドレス バーに貼り付けます。 オーケストレーション インスタンスの状態が表示されます。

      {
        "name": "DurableFunctionsOrchestrationCSharp1",
        "instanceId": "b50f8b723f2f44149ab9fd2e3790a0e8",
        "runtimeStatus": "Completed",
        "input": null,
        "customStatus": null,
        "output": [
          "Hello Tokyo!",
          "Hello Seattle!",
          "Hello London!"
        ],
        "createdTime": "2025-02-21T21:09:59Z",
        "lastUpdatedTime": "2025-02-21T21:10:00Z"
      }
    
  5. オーケストレーション インスタンスの詳細を表示するには、Durable Task Scheduler ダッシュボード http://localhost:8082/ アクセスする方法に関するページを参照してください。

  6. 既定のタスク ハブをクリックすると、そのダッシュボードが表示されます。

Durable Task Scheduler ダッシュボードの詳細を確認します。

Durable Task Scheduler エミュレーターは、オーケストレーション データをメモリに格納します。つまり、シャットダウン時にすべてのデータが失われます。

テストで問題が発生しましたか? トラブルシューティング ガイドを参照してください。

Azure でアプリを実行する

必要なリソースを作成する

関数アプリ統合作成フローに従って、Durable Task Scheduler インスタンスと Azure Functions アプリを Azure 上に作成します。 このエクスペリエンスでは、ID ベースのアクセスが自動的に設定され、スケジューラにアクセスするためにアプリに必要な環境変数が構成されます。

  1. [関数アプリの作成] ブレードに移動し、ホスティング オプションとして [Functions Premium ] または [App Service ] を選択します。

    関数アプリのホスティング オプションと App Service の選択のスクリーンショット。

  2. [ 関数アプリの作成 (App Service)] ブレードで、[ 基本 ] タブの情報を入力します。

    App Service プラン関数アプリを作成するための [基本] タブのスクリーンショット。

    フィールド 説明
    サブスクリプション Azure のサブスクリプションを選択します。
    リソース グループ 既存のリソース グループを選択するか、[ 新規作成 ] をクリックして新しいリソース グループを作成します。
    関数アプリ名 関数アプリの一意の名前を作成します。
    コードまたはコンテナー イメージをデプロイしますか? [コード] オプションをオンのままにします。
    ランタイム スタック (実行時スタック) このクイック スタートで使用しているランタイムを選択します。
    バージョン ランタイム スタックのバージョンを選択します。
    リージョン サポートされているリージョンのいずれかを選択します
    オペレーティング システム オペレーティング システムを選択します。
  3. [ Durable Functions ] タブを選択します。

  4. 永続的な関数のバックエンド プロバイダーとして Durable Task Scheduler を選択します。

  5. スケジューラ リソースを作成します。 このアクションにより、タスク ハブが自動的に作成されます。

    App Service プラン関数アプリの作成のスクリーンショット。

    フィールド 説明
    ストレージ バックエンド Durable Task Scheduler を選択します
    リージョン スケジューラと関数アプリのリージョンは同じである必要があります。
    耐久性のあるタスクスケジューラ 提供されているスケジューラ名を使用するか、[ 新規作成 ] をクリックしてカスタム名を作成します。
    計画 現時点では 専用 のみ利用可能です。
    容量ユニット 現時点では、オプションとして選択できる容量ユニットは 1 つだけです。
  6. [ 確認と作成 ] をクリックして、リソースの作成を確認します。

    必要なロールベースのアクセス制御 (RBAC) アクセス許可を持つユーザー割り当てマネージド ID が自動的に作成され、関数アプリに追加されます。 次のようなマネージド ID リソースに関連する概要ビュー情報を確認できます。

    • 割り当てられたロール (永続タスク データ共同作成者)

    • タスク ハブ レベルにスコープが設定された割り当て

      [確認と作成] タブで選択され、レビュー中のフィールドとプロパティのスクリーンショット。

  7. 検証に合格したら、[ 作成 ] をクリックします。

リソースのデプロイには約 15 ~ 20 分かかる場合があります。 完了したら、アプリを Azure にデプロイできます。

関数アプリを Azure にデプロイする

重要

既存の関数アプリにデプロイすると、Azure にあるそのアプリの内容が常に上書きされます。

  1. コマンド パレットで、入力して [Azure Functions: 関数アプリにデプロイする] を選択します。

  2. 作成したばかりの関数アプリを選びます。 前のデプロイの上書きを求められたら、[デプロイ] を選択して、関数コードを新しい関数アプリ リソースにデプロイします。

  3. デプロイの完了後、[出力の表示] を選択すると、作成済みの Azure リソースなど、作成とデプロイの結果が表示されます。 通知を見逃した場合は、右下隅にあるベル アイコンを選択して、再度確認します。

    [出力の表示] ウィンドウのスクリーンショット。

Functions Premium プラン上のアプリ

アプリが Functions Premium プランで実行されている場合は、デプロイ後に ランタイム スケール監視 設定をオンにして、読み込みに基づいてアプリが自動スケーリングされるようにします。

az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites

関数アプリをテストする

次のコマンドを実行して、関数の URL を取得します。

az functionapp function list --resource-group <RESOURCE_GROUP_NAME> --name <FUNCTION_APP_NAME>  --query '[].{Function:name, URL:invokeUrlTemplate}' --output json

オーケストレーションの状態を確認する

Durable Task Scheduler ダッシュボードで、オーケストレーション インスタンスの状態とアクティビティの詳細を確認します。 ダッシュボードにアクセスするには、ログインする必要があります。

次の手順は、特定のタスク ハブを対象としたロールの割り当てを示しています。 スケジューラ 内のすべての タスク ハブにアクセスする必要がある場合は、スケジューラ レベルで割り当てを実行します。

  1. ポータルで持続的タスク スケジューラ リソースに移動します。

  2. タスク ハブ名をクリックします。

  3. 左側のメニューで [アクセス制御 (IAM)] を選択します。

  4. [ 追加] をクリックしてロールの割り当てを追加します。

    ポータルの [アクセス制御] ウィンドウでのロールの割り当ての追加のスクリーンショット。

  5. [永続タスク データ共同作成者] を検索して選択します。 [次へ] をクリックします。

    ポータルで Durable Task Data Contributor ロールの割り当てを選択するスクリーンショット。

  6. [ メンバー ] タブの [ アクセスの割り当て] で、[ ユーザー、グループ、またはサービス プリンシパル] を選択します。

  7. [メンバー] の場合は、[+ メンバーの選択] をクリックします。

  8. [ メンバーの選択 ] ウィンドウで、自分の名前または電子メールを検索します。

    ポータルでユーザー割り当てマネージド ID の種類を選択するスクリーンショット。

  9. メールを選び、[ 選択 ] ボタンをクリックします。

  10. [ 確認と割り当て ] をクリックしてロールの割り当てを完了します。

  11. ロールが割り当てられたら、タスク ハブ リソースの左側のメニューで [ 概要 ] をクリックし、上部の [要点 ] セクションにあるダッシュボードの URL に移動します。

リソースをクリーンアップする

クイックスタートを完了するために作成したリソースが不要になった場合は、Azure サブスクリプションで関連コストが発生するのを避けるため、リソース グループは削除し、関連するすべてのリソースも削除してください。

次のステップ