Azure Functions 타임아웃: AI 영상 Job은 기다리지 마세요
Azure Functions는 Consumption 플랜에서 기본 5분 뒤에 타임아웃되고, HTTP 트리거는 230초 안에 응답해야 합니다. 영상 Job은 콜백과 함께 제출하세요.

Azure Functions 타임아웃은 함수 앱의 functionTimeout에서 정해집니다. 레거시 Consumption 플랜에서는 기본 5분, 최대 10분이고, Flex Consumption, Premium, Dedicated 플랜에서는 기본 30분이며 최댓값은 무제한일 수 있습니다. 이와 별개로 HTTP 트리거 함수는 설정과 상관없이 230초 안에 응답해야 합니다. AI 영상 생성은 보통 30초에서 몇 분이 걸리므로 함수 안에서 기다리지 마세요. 두 번째 HTTP 트리거 함수를 가리키는 callback_url과 함께 Job을 제출하고 반환하세요.
Azure 관련 내용은 Microsoft Learn의 호스팅 옵션, host.json, HTTP 트리거, 오류 처리, 안정성 페이지에서, Sume 관련 내용은 영상 생성 (영문), Job과 결과 (영문), 웹훅 (영문)에서 가져왔습니다. 모두 2026-09-27에 확인했습니다. Sume에는 Azure 전용 커넥터가 없으며, 함수가 Sume의 HTTPS API를 직접 호출합니다. Vercel에서 생기는 같은 문제는 Vercel 함수 타임아웃과 영상 생성에서 다룹니다.
Azure Function은 얼마나 오래 실행될 수 있나요?
한도는 host.json의 functionTimeout에 [d.]hh:mm:ss 형식으로 설정합니다. -1은 무제한이라는 뜻이지만, Microsoft는 고정된 상한을 두라고 권장합니다. 실행이 이 한도를 넘기면 타임아웃 오류가 발생하고 언어 작업자 프로세스가 다시 시작됩니다. HTTP 한도는 별개입니다. HTTP 트리거 함수가 230초 안에 완료되지 않으면 Azure Load Balancer가 502를 반환하며, 함수는 응답하지 못한 채 계속 실행됩니다.
| 플랜 | 기본값 | 최댓값 |
|---|---|---|
| Flex Consumption | 30분 | 무제한 |
| Premium | 30분 | 무제한 |
| Dedicated | 30분 | 무제한(Always On 사용 시) |
| Container Apps | 30분 | 무제한 |
| Consumption(레거시) | 5분 | 10분 |
| HTTP 트리거 응답, 모든 플랜 | — | 230초 |
함수가 타임아웃되면 영상은 어떻게 되나요?
아무것도 멈추지 않습니다. 클라이언트 쪽 타임아웃은 Sume Job을 취소하지 않습니다. Job은 계속 실행되고 계속 과금되며, 여러분은 지켜보기를 멈췄을 뿐입니다. 제출에 대한 2xx는 Job이 존재하고 유료 작업이 진행 중이라는 뜻이지, 끝났다는 뜻이 아닙니다.
비용이 드는 쪽은 재시도입니다. Queue Storage 트리거는 확장을 통해 재시도하고 타이머 트리거에는 재시도 정책을 걸 수 있으므로, 타임아웃 뒤 같은 제출이 다시 실행될 수 있습니다. Sume 문서는 워커가 타임아웃됐다는 이유만으로 유료 요청을 다시 제출하지 말고, 재시도될 수 있는 모든 유료 제출에 Idempotency-Key를 보내라고 안내합니다. 다시 보낸 요청에는 원래 Job이 반환됩니다. 키도 같고 본문도 같아야 하며, 다른 페이로드로 재사용한 키는 409 idempotency_conflict입니다.
기다리지 않고 Job을 제출하려면 어떻게 하나요?
제출하고, ID를 저장하고, 반환합니다. 이 Python v2 함수는 HTTPS 호출 한 번에 걸리는 시간 안에 응답합니다.
callback_url은 공개 HTTPS URL이어야 하며, Job이 종료 상태에 도달하면 Sume가 그 URL로 POST합니다.202응답의 Job ID를 저장하세요. Sume 문서에 따르면 이 ID가 있으면 프로세스가 재시작된 뒤에도 작업을 복구할 수 있습니다.SUME_API_KEY는 앱 설정에 두거나 Key Vault 참조로 두세요. Key Vault 참조도 코드에서는 다른 앱 설정처럼 읽으며, 앱 설정은 환경 변수로 코드에 전달됩니다.- Requests는
timeout을 넘기지 않으면 타임아웃되지 않으므로, 제출 요청에 설정하세요.
import os, requests
import azure.functions as func
app = func.FunctionApp(http_auth_level=func.AuthLevel.FUNCTION)
@app.route(route="videos", methods=[func.HttpMethod.POST])
def start_video(req: func.HttpRequest) -> func.HttpResponse:
order_id = req.params.get("order_id")
if not order_id:
return func.HttpResponse("order_id is required", status_code=400)
r = requests.post(
"https://api.sume.com/v1/videos",
headers={"Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
"Idempotency-Key": f"order-{order_id}-video-v1"},
json={"model": "sume/auto", "prompt": "A slow pan across a desk, morning light",
"callback_url": "https://<app-name>.azurewebsites.net/api/sume-webhook"},
timeout=30,
)
r.raise_for_status()
job = r.json() # id, polling_url, status: "pending", model
save_job(order_id, job["id"]) # your table, before you return
return func.HttpResponse(job["id"], status_code=202)두 번째 함수는 결과를 어떻게 받나요?
인증 수준이 anonymous인 HTTP 트리거로 만들고, Azure 키 대신 Sume의 서명을 확인하세요. Sume는 종료 Job 이벤트인 job.completed, job.failed, job.canceled만 보내고, 시도마다 10초를 주며, 최대 10회 시도합니다. Python 검증 코드 전체는 Durable Functions 외부 이벤트 대기에 있습니다.
req.get_body()의 원본 바이트를 검증하세요. 빈 서명 시크릿은 거부하고,<timestamp>.<raw_body>에 대한 HMAC-SHA256을 계산해sume-v1=항목 중 하나라도 상수 시간 비교로 일치하는지, 타임스탬프가 오 분 범위 안에 있는지 확인합니다.- 이벤트를 저장한 뒤
2xx로 응답하세요. 시간이 더 걸리는 작업이라면 HTTP 페이로드를 큐에 넘겨 큐 트리거 함수가 처리하게 하라고 Microsoft는 제안합니다. 그러면 웹훅이 즉시 응답할 수 있습니다. - 2xx가 아닌 응답과 네트워크 오류는 재시도되므로,
job_id를 멱등성 키로 쓰세요. - 폴링을 백업으로 유지하세요. 시도 열 번이 모두 거부되면 실패한 전달이 남을 뿐, Job은 그래도 종료 상태에 도달해 있습니다.
타임아웃을 늘려야 하나요, Durable Functions를 써야 하나요?
Premium이나 Flex Consumption 플랜에서 functionTimeout을 늘리면 실행 하나가 더 오래 돌 수 있지만, HTTP 트리거는 여전히 230초 안에 응답해야 하고, 영상이 렌더링되는 동안 함수는 하는 일 없이 기다립니다. 더 긴 처리에 대해 Microsoft가 직접 권하는 방법은 Durable Functions 비동기 패턴, 또는 작업을 뒤로 미루고 즉시 응답을 반환하는 것입니다. Durable Functions를 쓰면 오케스트레이터가 웹훅을 외부 이벤트로 기다릴 수 있고, Consumption 플랜에서는 그 대기에 요금이 청구되지 않습니다. Durable Functions 외부 이벤트 대기를 참고하세요.
출처
- 영상 생성 (영문)
- Job과 결과 (영문)
- Generation admission
- 웹훅 (영문)
- Azure Functions: 호스팅 옵션(타임아웃) (2026-09-27 확인)
- Azure Functions: host.json 레퍼런스 (2026-09-27 확인)
- Azure Functions: HTTP 트리거 (2026-09-27 확인)
- Azure Functions: 오류 처리와 재시도 (2026-09-27 확인)
- Azure Functions: 성능과 안정성 개선 (2026-09-27 확인)
- Azure App Service: Key Vault 참조 (2026-09-27 확인)
- Azure Functions: 함수 앱 설정 구성 (2026-09-27 확인)
- Azure Durable Functions: 외부 이벤트 (2026-09-27 확인)
- Requests: 빠른 시작 (2026-09-27 확인)
관련 글
연동 카테고리의 다른 글
- Bubble API Connector: Sume API로 AI 영상 생성하기
Sume용 Bubble API Connector 설정법입니다. 키는 비공개 헤더에 두고, 수동 응답으로 설정 비용을 없애고, 백엔드에서 Job을 폴링합니다.
- Claude Agent SDK MCP 서버: API 키로 Sume 연결
API 키 헤더로 Sume 호스팅 MCP 서버를 Claude Agent SDK에 추가하고, 필요한 도구만 허용하고, 유료 호출은 제출 전에 dry-run으로 확인하세요.
- Claude API MCP 커넥터와 Sume: 지금 쓸 수 있는 방법
Claude API의 MCP 커넥터로 Sume 호스팅 MCP에 인증하는 방법은 현재 문서화되어 있지 않습니다. 그 이유와 Agent SDK 같은 대안을 정리했습니다.
- Cloudflare Workers cron job: AI 영상 예약 실행
Cron Trigger와 scheduled() 핸들러를 추가하면 Worker가 일정에 따라 실행됩니다. AI 영상이라면 실행의 키를 scheduledTime으로 만들고 바로 반환하세요.
작성자 Sume