EventBridge로 Lambda 함수를 스케줄에 따라 실행하는 방법

EventBridge Scheduler로 cron 또는 rate 스케줄에 따라 Lambda 함수를 호출하세요. 매일 만드는 AI 영상이라면 예약 시각으로 만든 키로 실행을 시작하고 바로 반환하세요.

읽는 시간 6분Sume
전체 글

Lambda 함수를 스케줄에 따라 실행하려면 그 함수를 대상으로 하는 Amazon EventBridge Scheduler 스케줄을 만들고, 원하는 시간대에서 해석되는 cron 또는 rate 표현식을 지정하세요. 그러면 EventBridge Scheduler가 정해진 시각마다 함수를 비동기로 호출합니다. 예약된 AI 영상이라면 함수는 예약 시각으로 만든 Idempotency-Key와 함께 Sume 실행을 시작하고, 몇 초 안에 반환하며, 완성된 영상은 웹훅으로 받습니다.

AWS 관련 내용은 스케줄에 따라 Lambda 함수 호출하기를 비롯해 출처에 나열한 Lambda와 EventBridge Scheduler 문서에서, Sume 관련 내용은 Format 호출하기 (영문), 실행과 결과 (영문), Scheduled에서 가져왔습니다. 모두 2026-09-27에 확인했습니다. Sume에는 AWS 전용 연동이 없으며, 함수는 일반 HTTPS 호출을 한 번 보냅니다. 같은 패턴을 Vercel에서 구현하는 방법은 Vercel Cron Jobs: 중복 없이 매일 Sume API 호출하기에 있습니다.

Lambda를 매시간 또는 매일 실행하는 스케줄 표현식은 무엇인가요?

cron 표현식에는 분, 시, 일(day-of-month), 월, 요일(day-of-week), 연도의 여섯 필드가 있습니다. 두 날짜 필드에 모두 *를 쓸 수는 없으므로 한쪽에 ?를 넣으세요. 스케줄은 60초 정밀도로 실행되며, 일광 절약 시간제가 있는 시간대에서는 봄에 건너뛰는 시각은 그날 실행되지 않고, 가을에 반복되는 시각은 한 번만 실행됩니다.

EventBridge Scheduler의 스케줄 유형 페이지 기준, 2026-09-27 확인.
목표표현식참고
매시 정각cron(0 * * * ? *)day-of-month가 *이므로 day-of-week에 ?
매일 오전 8:30cron(30 8 * * ? *)--schedule-expression-timezone "America/New_York" 또는 다른 IANA 시간대를 추가
5분마다rate(5 minutes)rate 단위는 minutes, hours, days
한 번at(2026-10-01T09:00:00)일회성 스케줄. AWS는 실행 후 삭제를 권장

스케줄은 어떻게 만들고, 예약 시각은 어떻게 넘기나요?

Lambda 콘솔에서는 Add trigger를 고른 뒤 Scheduler를 선택하세요. AWS CLI에서는 함수의 ARN을 지정하면 템플릿 Lambda 대상이 되며, 스케줄의 실행 역할에는 lambda:InvokeFunction이 필요합니다. 입력에는 <aws.scheduler.scheduled-time>을 넣으세요. EventBridge Scheduler가 이 값을 2022-03-22T18:59:43Z처럼 그 호출에 지정한 시각으로 바꿉니다. 반면 <aws.scheduler.execution-id>는 시도마다 고유하므로 키로는 쓸모가 없습니다.

aws scheduler create-schedule --name daily-recap-video \
  --schedule-expression "cron(0 9 * * ? *)" \
  --schedule-expression-timezone "America/New_York" \
  --flexible-time-window '{ "Mode": "OFF" }' \
  --target '{ "RoleArn": "ROLE_ARN", "Arn": "FUNCTION_ARN",
    "Input": "{ \"scheduled_time\": \"<aws.scheduler.scheduled-time>\" }" }'

함수는 Sume API에 무엇을 보내야 하나요?

input에 그날의 데이터를 담고 예약 시각으로 키를 만든 POST /v1/formats/{handle}/{slug}/runs 요청 하나입니다. input의 형태는 직접 정하며, 최상위 키 최대 64개, 최대 2 MiB입니다. 재시도가 같은 본문을 보내도록 그 회차에 고정된 데이터로 만드세요. urlopen은 오류 상태에서 HTTPError를 일으키므로 호출이 실패합니다. 예제는 간결하게 하려고 환경 변수에서 키를 읽지만, AWS는 API 키에 Secrets Manager를 권장합니다.

import json, os, urllib.request

def lambda_handler(event, context):
    slot = event["scheduled_time"]  # the same value on every retry of this slot
    body = {
        "input": {"scheduled_time": slot, "totals": totals_for(slot)},  # fixed per slot
        "communication": {"webhook_url": "https://example.com/hooks/sume"},
    }
    req = urllib.request.Request(
        "https://api.sume.com/v1/formats/acme/daily-recap/runs",
        data=json.dumps(body).encode(),
        headers={
            "Authorization": f"Bearer {os.environ['SUME_API_KEY']}",
            "Content-Type": "application/json",
            "Idempotency-Key": f"daily-recap-{slot}",
        },
        method="POST",
    )
    with urllib.request.urlopen(req, timeout=10) as resp:
        run = json.load(resp)["data"]  # 202 new run, 200 replay
    return {"run_id": run["id"], "replay": run["idempotency_hit"]}

호출이 두 번 실행되면 어떻게 되나요?

키가 예약 시각에서 나오는 한 새로 일어나는 일은 없습니다. 반복은 실제로 일어납니다. 함수가 오류를 반환하면 Lambda는 기본적으로 두 번 더 실행하는데, 일 분 뒤에 한 번, 그로부터 이 분 뒤에 또 한 번이며, 타임아웃도 오류로 칩니다. 오류가 없어도 비동기 큐가 같은 이벤트를 두 번 이상 전달할 수 있으므로, AWS는 중복을 처리하라고 요구합니다. EventBridge Scheduler에도 대상으로 전달할 때 쓰는 RetryPolicy가 있으며, 재시도는 최대 185회, 이벤트 수명은 최대 86,400초까지 허용합니다. 같은 키라면 Sume는 반복마다 이렇게 응답합니다.

  • 같은 키, 같은 본문: 원래 영수증과 idempotency_hit: true가 담긴 200이 돌아옵니다. 두 번째 실행도, 두 번째 청구도 없습니다.
  • 같은 키, 다른 본문: 409 idempotency_conflict가 돌아오고 아무것도 실행되지 않습니다.
  • 같은 키로 같은 순간에 도착: 하나가 이기고, 다른 하나는 409 idempotency_key_in_use를 받습니다. 약 일 초 뒤에 재시도할 수 있습니다.
  • 생성 요청이 실패하면(402, 503, …) 키가 해제되므로, 재시도로 실행을 여전히 시작할 수 있습니다.

함수가 영상을 기다려야 하나요?

아닙니다. Lambda 타임아웃 기본값은 3초로, 예제의 10초 urlopen 타임아웃보다 짧으므로 제출에 충분할 만큼 늘리세요. 영상을 기다리는 것은 다른 문제입니다. 최대값은 900초(Lambda Managed Instances의 비동기 호출은 5,400초)인데, 긴 영상은 15분에서 30분이 걸리는 작업이며, 타임아웃이 나도 실행은 취소되지 않고 계속 실행되며 과금됩니다. webhook_url은 실행이 완료되거나 실패할 때 서명된 POST를 한 번 받습니다. 함수 URL로 그 쪽을 받는 방법은 AWS Lambda로 Sume 웹훅 받기에서 보여 줍니다.

예약 영상에 Lambda가 꼭 필요한가요?

실행에 여러분의 데이터가 필요할 때만 필요합니다. Sume 자체의 Scheduled 기능은 저장된 자동화를 IANA 시간대 기준의 5필드 cron으로 실행하며, 문서는 시계 말고는 작업을 일으키는 것이 없을 때 이 기능을 쓰라고 안내합니다. 스케줄은 API가 아니라 에이전트 대시보드에서 만듭니다. 이 방법은 AI 영상 에이전트 스케줄 실행에서 다룹니다.

출처

관련 글

연동 카테고리의 다른 글

연동 글 전체 보기

작성자 Sume