작성
·
39
0
강사님 안녕하세요. airflow의 rest api를 이용하여 task를 재실행하는 코드를 개발하는 중 궁금한 점이 생겨서 문의드립니다. (참고로 실행환경은 회사pc입니다)
~/v1/dags/{dag_id}/dagRuns/{execution_date}/taskInstances/{task_id}/clear
위와같이 특정 task의 실행 시간으로 실행하면 404에러가 뜨고
"detail": "The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.",
"status": 404,
"title": "Not Found",
"type": "about:blank"
REST-API문서를 살펴보니 clearTaskInstances가 있어서
~/api/v1/dags/{dag_id}/clearTaskInstances
이렇게 조회하면 405 에러가 뜹니다.
"detail": "The method is not allowed for the requested URL.",
"status": 405,
"title": "Method Not Allowed",
"type": "about:blank"
/clear이든 /clearTaskInstances 둘다 작동하지 않은데, 방법이 있을까요?
두번째의 경우 서버에서 작동을 막는것일까요?
답변 2
0
안녕하세요 미요님!
혹시나 해서 해봤는데 둘 다 잘 동작했습니다.
먼저 첫 번째꺼는 404 에러라 URL 자체를 잘못작성하신 케이스에요.
curl -X POST "http://localhost:8080/api/v1/dags/dags_bash_operator/dagRuns/scheduled__2025-03-30T15:00:00+00:00/clear" \
-H "Content-Type: application/json" \
-u "airflow:airflow" \
-d '{
"dry_run": false
}'
이렇게 Clear할 DagRun의 ID를 적고 /clear로 마치면 됩니다.
두번째 케이스는 기간별 한번에 DAG Clear할 수 있는 API 이고 URL은 잘 작성하신것 같은데 Method를 잘못주신거 아닌가 싶습니다. 저는 아래처럼 작성해서 잘 동작했어요.
curl -X POST "http://localhost:8080/api/v1/dags/dags_bash_operator/clearTaskInstances" \
-H "Content-Type: application/json" \
-u "airflow:airflow" \
-d '{
"dry_run": false,
"reset_dag_runs": true,
"only_failed": false,
"only_running": false,
"include_subdags": true,
"include_parentdag": true,
"start_date": "2025-04-01T00:00:00Z",
"end_date": "2025-04-05T00:00:00Z"
}'
참고로 Airflow 공식 사이트에 API 정리가 잘 돼있습니다.
참고해보세요 ^^
0
안녕하세요, 인프런 AI 인턴입니다. 미요님.
Airflow의 REST API를 활용하여 특정 task를 재실행하려고 할 때 발생하는 문제에 대해 문의 주셨군요. REST API 호출에서 발생하는 404와 405 에러는 주로 URL 설정이나 HTTP 메소드 사용에 문제가 있을 때 발생합니다. 아래에서 각각의 에러와 해결 옵션을 설명드리겠습니다.
요청하신 URL이 존재하지 않을 때 발생합니다. 이 경우에는 URL을 정확하게 입력했는지 다시 확인하시기 바랍니다. 대소문자나 경로의 오타가 없는지, 입력한 파라미터들이 실제로 존재하는지 확인하세요.
Airflow의 REST API 버전이 맞는지, 서버 설정에서 API 엔드포인트가 활성화되어 있는지도 고려해야 합니다.
API 엔드포인트가 특정 HTTP 메소드(예: GET, POST, DELETE 등)를 지원하지 않을 때 발생합니다. 이 경우, 사용하려는 API 문서에서 지원하는 메소드를 확인하시고 적절하게 변경해야 합니다.
/api/v1/dags/{dag_id}/clearTaskInstances
는 일반적으로 POST 메소드를 사용하여 task instances를 지우게 되므로, 올바른 HTTP 메소드를 사용하고 있는지 확인합니다.
API 문서 재확인: 사용하고 있는 Airflow의 버전에 맞는 공식 REST API 문서를 꼭 확인하시고, 올바른 경로와 메소드를 사용했는지 점검합니다.
대체 메소드 사용: 만약 REST API에 직접 접근하는 것이 여의치 않다면, Airflow CLI 명령어나 Python API를 사용하여 task를 재실행하는 방법도 고려해 보세요.
서버 설정 확인: 회사 내부 정책에 따라 특정 엔드포인트나 메소드가 제한될 수 있습니다. 이런 경우 관련 IT 부서에 문의하여 서버 설정을 확인해야 합니다.
관련 질문과 해결 방법에 대한 토론이 포함된 이 게시물을 참고하시면 좀 더 구체적인 문제 해결에 도움이 되실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.