この記事は、Durable Task Scheduler アプリの一般的なシナリオのトラブルシューティングに役立ちます。 次の一覧でシナリオを見つけ、リンクされた手順に従って問題を診断して解決します。
一般的なシナリオ
- 接続文字列とDurable Task Schedulerへのアクセスを確認します
- Durable Functions アプリを Azure にデプロイする際のエラー
- このタスク ハブの詳細を取得中の不明なエラー
- リソースを削除できません
- ビルドするプロジェクトを特定できない
- ARM のネイティブ バイナリが見つかりません (Apple シリコン)
注
Microsoft サポート エンジニアは、アプリケーションに関する問題の診断に役立ちます。 この記事を読んで問題を診断できない場合は、Azure ポータルの Durable Task Scheduler リソースの Help>Support + troubleshooting セクションに移動して、サポート チケットを提出できます。
Connection stringを確認し、Durable Task Scheduler にアクセスする
アプリが想定どおりに実行されていない場合は、次のことを確認します。
- 接続文字列形式は正しいです。
- 認証が正しく設定されています。
ローカル開発
接続文字列を確認します。この形式は
Endpoint=http://localhost:<port number>;Authentication=Noneです。8080コンテナー内で、ポート番号がにマップされていることを確認します。永続的なタスク スケジューラ エミュレーターと共に、Azure Storage エミュレーター Azurite が開始されていることを確認します。 Azurite は、Functions に関連するアプリのコンポーネントに必要です。
Azureでの実行
アプリで環境変数の
DURABLE_TASK_SCHEDULER_CONNECTION_STRINGとTASKHUB_NAMEを確認します。DURABLE_TASK_SCHEDULER_CONNECTION_STRINGの値を確認します。 具体的には、スケジューラ エンドポイントと認証の種類が正しいことを確認します。 接続文字列を使用する場合は、次のように書式設定する必要があります。-
ユーザー割り当てマネージド ID:
Endpoint={scheduler endpoint};Authentication=ManagedIdentity;ClientID={client id}。ここで、client idは ID のクライアント ID です。 -
システム割り当てマネージド ID:
Endpoint={scheduler endpoint};Authentication=ManagedIdentity
-
ユーザー割り当てマネージド ID:
指定したタスク ハブまたはスケジューラにアクセスするために必要な ID に、 必要なロールベースのアクセス制御 (RBAC) アクセス許可が付与されていることを確認します。
- ダッシュボードにアクセスするときは、アクセス許可が 自分の ID (電子メール) に割り当てられていることを確認します。
ユーザー割り当てマネージド ID が使用されている場合は、 その ID がアプリに割り当てられていることを確認します。
AzureにアプリDurable Functions展開中にエラーが発生しました
Visual Studio Code からの Encountered an error (ServiceUnavailable) from host runtime などのエラーでデプロイが失敗した場合は、まずアプリを調べて、必要な 環境変数 が正しく設定されていることを確認します。 次に、アプリを再デプロイします。 関数の読み込み中にエラーが発生した場合は、[ 更新 ] ボタンを選択します。
このタスク ハブの詳細を取得中の不明なエラー
非消耗品タスク スケジューラ ダッシュボードで Unknown error retrieving details of this task hub エラーが発生した場合、その理由は次のようになります。
ID (電子メール) には、そのタスク ハブに必要なアクセス許可が割り当てられません。 手順に従って アクセス許可を付与し、ダッシュボードに再度アクセスします。
タスク ハブが削除されました。
リソースを削除できません
スケジューラ リソースを削除するには、まず、そのすべてのタスク ハブを削除する必要があります。 表示されていない場合は、次のエラー メッセージが表示されます。
{
"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 ファイルに次の回避策を追加します。
-
Contrib.Grpc.Core.M1へのパッケージ参照を追加します。 - ARM64 gRPC ネイティブ ライブラリを正しい出力ディレクトリにコピーするカスタムのビルド後ターゲットを追加します。
次の ItemGroup と Target の要素を 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>