이 문서는 지속성 작업 스케줄러 앱의 일반적인 시나리오 문제를 해결하는 데 도움이 됩니다. 다음 목록에서 시나리오를 찾고 연결된 단계에 따라 문제를 진단하고 해결합니다.
일반적인 시나리오
- 지속성 작업 스케줄러에 대한 연결 문자열 및 접근 확인
- Durable Functions 앱을 Azure에 배포하는 동안 오류가 발생했습니다
- 이 작업 허브의 세부 정보를 검색하는 동안 알 수 없는 오류 발생
- 리소스를 삭제할 수 없음
- 빌드할 프로젝트를 확인할 수 없음
- ARM에 대한 네이티브 이진 파일을 찾을 수 없습니다(Apple 실리콘)
메모
Microsoft 지원 엔지니어는 애플리케이션 관련 문제를 진단하는 데 도움을 줄 수 있습니다. 이 문서를 진행한 후 문제를 진단할 수 없는 경우 Azure 포털에서 지속성 작업 스케줄러 리소스의 Help>Support + 문제 해결 섹션으로 이동하여 지원 티켓을 제출할 수 있습니다.
지속성 작업 스케줄러에 대한 연결 문자열 및 액세스를 확인하세요.
앱이 예상대로 실행되지 않는 경우 다음을 확인합니다.
- 연결 문자열 형식이 올바릅니다.
- 인증이 올바르게 설정됩니다.
지역 개발
다음 형식
Endpoint=http://localhost:<port number>;Authentication=None이 있어야 하는 연결 문자열을 확인합니다. 포트 번호가8080를 실행하는 컨테이너에 매핑된 번호인지 확인합니다.지속성 작업 스케줄러 에뮬레이터와 함께 Azure Storage 에뮬레이터인 Azurite가 시작되었는지 확인합니다. 함수와 관련된 앱의 구성 요소에는 Azurite가 필요합니다.
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용 네이티브 이진 파일을 찾을 수 없다는 내용의 gRPC 오류가 표시되는 경우 (예: Apple 실리콘 Mac인 M1, M2 등), 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>