현상
2024.11.18-[Azure] 로컬 환경에서 Function 개발하기에서 정리했던 것처럼 로컬 환경에서 Azure Functions을 개발하면서 테스트를 진행하던 중 아래와 같은 에러가 발생했다.
Timeout value of 00:30:00 exceeded by function 'Functions.http_app_func'
타임 아웃이 발생해서 동작이 중단된 것 같은데, 일단 타임 아웃을 조정하는 방식으로 현상을 해결해보려고 한다.
host.json
host.json은 함수에 영향을 주는 구성 파일이다. https://learn.microsoft.com/ko-kr/azure/azure-functions/functions-host-json에서 예시 파일의 내용을 확인할 수 있다.
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensions": {
"http": {
"routePrefix": ""
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
}
functionTimeout
host.json에서 timeout과 관련된 설정은 여러 가지가 있는데, 그중에서도 function의 timeout은 functionTimeout으로 조정할 수 있다.
functionTimeout은 모든 Function에 대한 timeout에 영향을 주고, timespan 문자열 형식을 따른다. Function 유형에 따른 기본값과 최댓값은 아래와 같다.
플랜 유형 | 기본(분) | 최대(분) |
소비 | 5 | 10 |
프리미엄 | 30 | -1(제한 없음) |
전용(App Service) | 30 | -1(제한 없음) |
참고로 -1을 사용하여 제한을 두지 않는 것은 권장하지 않는다고 한다. 하지만! 이 글에서는 제한을 두지 않도록 설정을 해보겠다.
functionTimeout 적용 예시
functionTimeout은 host.json 파일의 최상위 속성에 해당하므로 적당한 위치에 추가하면 된다.
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
},
"extensions": {
"http": {
"routePrefix": ""
}
},
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[4.*, 5.0.0)"
},
"functionTimeout": "-1"
}
만약 functionTimeout을 00:00:10으로 설정하면 실행 후 10초가 지나면 타임아웃이 발생한다. 제한을 해제할 때는 시간 형식이 아닌 -1로 지정하면 되는 것 같다.
참고 문서