Durable Task Scheduler のエラーのトラブルシューティング

この記事は、Durable Task Scheduler アプリの一般的なシナリオのトラブルシューティングに役立ちます。 次の一覧でシナリオを見つけ、リンクされた手順に従って問題を診断して解決します。

一般的なシナリオ

Microsoft サポート エンジニアは、アプリケーションに関する問題の診断に役立ちます。 この記事を読んで問題を診断できない場合は、Azure ポータルの Durable Task Scheduler リソースの Help>Support + troubleshooting セクションに移動して、サポート チケットを提出できます。

Connection stringを確認し、Durable Task Scheduler にアクセスする

アプリが想定どおりに実行されていない場合は、次のことを確認します。

  • 接続文字列形式は正しいです。
  • 認証が正しく設定されています。

ローカル開発

  1. 接続文字列を確認します。この形式は Endpoint=http://localhost:<port number>;Authentication=None です。 8080コンテナー内で、ポート番号がにマップされていることを確認します。

  2. 永続的なタスク スケジューラ エミュレーターと共に、Azure Storage エミュレーター Azurite が開始されていることを確認します。 Azurite は、Functions に関連するアプリのコンポーネントに必要です。

Azureでの実行

  1. アプリで環境変数の DURABLE_TASK_SCHEDULER_CONNECTION_STRINGTASKHUB_NAMEを確認します。

  2. DURABLE_TASK_SCHEDULER_CONNECTION_STRING の値を確認します。 具体的には、スケジューラ エンドポイントと認証の種類が正しいことを確認します。 接続文字列を使用する場合は、次のように書式設定する必要があります。

    • ユーザー割り当てマネージド ID: Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}。ここで、 client id は ID のクライアント ID です。
    • システム割り当てマネージド ID: Endpoint={scheduler endpoint};Authentication=ManagedIdentity
  3. 指定したタスク ハブまたはスケジューラにアクセスするために必要な ID に、 必要なロールベースのアクセス制御 (RBAC) アクセス許可が付与されていることを確認します。

  4. ユーザー割り当てマネージド ID が使用されている場合は、 その ID がアプリに割り当てられていることを確認します。

AzureにアプリDurable Functions展開中にエラーが発生しました

Visual Studio Code からの Encountered an error (ServiceUnavailable) from host runtime などのエラーでデプロイが失敗した場合は、まずアプリを調べて、必要な 環境変数 が正しく設定されていることを確認します。 次に、アプリを再デプロイします。 関数の読み込み中にエラーが発生した場合は、[ 更新 ] ボタンを選択します。

このタスク ハブの詳細を取得中の不明なエラー

非消耗品タスク スケジューラ ダッシュボードで Unknown error retrieving details of this task hub エラーが発生した場合、その理由は次のようになります。

  1. ID (電子メール) には、そのタスク ハブに必要なアクセス許可が割り当てられません。 手順に従って アクセス許可を付与し、ダッシュボードに再度アクセスします。

  2. タスク ハブが削除されました。

リソースを削除できません

スケジューラ リソースを削除するには、まず、そのすべてのタスク ハブを削除する必要があります。 表示されていない場合は、次のエラー メッセージが表示されます。

{
  "error": {
    "code": "CannotDeleteResource",
    "message": "Cannot delete resource while nested resources exist. Some existing nested resource IDs include: 'Microsoft.DurableTask/schedulers/YOUR_SCHEDULER/taskhubs/YOUR_TASKHUB'. Please delete all nested resources before deleting this resource."
  }
}

これを解決するには、スケジューラでタスク ハブを一覧表示し、それらを削除します。

# List all task hubs in the scheduler
az durabletask taskhub list --resource-group RESOURCE_GROUP_NAME --scheduler-name SCHEDULER_NAME

# Delete each task hub
az durabletask taskhub delete --resource-group RESOURCE_GROUP_NAME --scheduler-name SCHEDULER_NAME --name TASKHUB_NAME

すべてのタスク ハブが削除されたら、スケジューラ リソースの削除を再試行します。

ビルドするプロジェクトを特定できない

Azurite を起動した後、次のエラーが発生した場合: “Can't determine Project to build. Expected 1 .csproj or .fsproj but found 2”:

  • アプリ内の bin ディレクトリと obj ディレクトリを削除します。
  • func startをもう一度実行してみてください。

ARM のネイティブ バイナリが見つかりません (Apple シリコン)

ARM のネイティブ バイナリが見つからない (Apple シリコン Mac の M1、M2 など) に関連する gRPC エラーが発生した場合は、 extensions.csproj ファイルに次の回避策を追加します。

  1. Contrib.Grpc.Core.M1 へのパッケージ参照を追加します。
  2. ARM64 gRPC ネイティブ ライブラリを正しい出力ディレクトリにコピーするカスタムのビルド後ターゲットを追加します。

次の ItemGroupTarget の要素を extensions.csprojに追加します。

<!-- Workaround for gRPC issues on ARM (Apple silicon) devices -->
<ItemGroup>
  <PackageReference Include="Contrib.Grpc.Core.M1" Version="2.41.0" />
</ItemGroup>
<Target Name="CopyGrpcNativeAssetsToOutDir" AfterTargets="Build">
  <ItemGroup>
    <NativeAssetToCopy Condition="$([MSBuild]::IsOSPlatform('OSX'))" Include="$(OutDir)runtimes/osx-arm64/native/*"/>
  </ItemGroup>
  <Copy SourceFiles="@(NativeAssetToCopy)" DestinationFolder="$(OutDir).azurefunctions/runtimes/osx-arm64/native"/>
</Target>