INFO

이 페이지는 LLM으로 번역되었습니다. 세부적인 뉘앙스 등이 원문과 다를 수 있습니다.

설정

defineTsumugi

const tsumugi = defineTsumugi({
  performers,
  flows,
  schedules,
  runs,
  bindings,
  auth,
  ui,
  retention,
  metrics,
  onFailure,
  onSettled,
  onEnqueue,
});

defineTsumugi에는 타입 인자를 지정할 필요가 없습니다.
binding별 payload 타입과 Env는 performers의 내용에서 자동으로 추론됩니다.

이름필수내용
performers○performer 모듈. payload와 필수 키 타입의 도출 원본
flowsFlow 이름과 정의의 대응. 지정하는 경우 RUN binding이 필요
schedules정기 실행 정의. 지정하는 경우 SCHEDULER binding이 필요
runsRun의 상한과 보존 기간
bindingsbinding별 shard 수, 실행량 제한, 보존 기간
auth인증. 미설정 시 REST API와 대시보드에 대한 모든 요청이 404
uitsumugi/ui의 ui(). 미지정 시 대시보드 번들 없음
retention목록의 보존 기간
metrics메트릭 읽기 설정. 미설정 시 GET /api/metrics가 501
onFailure실패한 잡을 알리는 binding 이름. 미설정 시 알림 없음
onSettled종료된 잡을 알리는 binding 이름과 알릴 상태
onEnqueueenqueue할 때마다 실행 옵션의 기본값을 설정하는 함수

반환값

이름내용
fetch, queue, scheduleddefault export에 포함하는 ExportedHandler의 핸들러
jobs(env)타입이 지정된 enqueue 객체(JobQueue<M>)
enqueue(env, input)잡 1건의 타입이 지정된 enqueue. 반환값은 잡 ID
enqueueMany(env, inputs)enqueue와 같은 형식으로 여러 잡을 enqueue
shardFor(env, binding, partitionKey?)enqueue 대상 shard의 stub
start(env, flow, input, options?)Run 시작. 반환값은 runId
runFor(env, runId)Run의 stub
runClasswrangler에 등록하는 Run의 클래스
schedulerClasswrangler에 등록하는 정기 실행의 클래스

flows를 지정하지 않은 경우에도 반환값에는 start, runFor, runClass가 포함됩니다.
flows에 정의되지 않은 Flow 이름을 start에 전달하면 예외가 발생합니다.
RUN binding이 없는 상태에서 runFor를 호출한 경우에도 마찬가지로 예외가 발생합니다.
enqueue 방법별 차이는 잡 투입을 참조하세요.

auth

함수내용
bearerAuth토큰 1개를 사용한 인증
cloudflareAccessCloudflare Access의 JWT 검증
unsafeNoAuth인증 없음

auth에는 직접 작성한 인증 함수를 지정할 수 있습니다.
함수의 인자는 request와 env이고, 반환값은 Response 또는 undefined입니다.
자세한 내용은 대시보드와 인증을 참조하세요.
auth를 설정하지 않으면 REST API와 대시보드에 대한 모든 요청에 404로 응답합니다.
unsafeNoAuth의 영향은 대시보드와 인증을 참조하세요.

metrics

const tsumugi = defineTsumugi({
  performers,
  auth: bearerAuth((env: Env) => env.TSUMUGI_TOKEN),
  metrics: (env: Env) =>
    env.CF_ACCOUNT_ID && env.CF_API_TOKEN
      ? { accountId: env.CF_ACCOUNT_ID, apiToken: env.CF_API_TOKEN, dataset: 'tsumugi_jobs' }
      : undefined,
});

metrics는 기록한 메트릭을 대시보드와 REST API에서 조회하기 위한 설정입니다.
apiToken은 Account Analytics 읽기 권한을 가진 API 토큰이며, Secret으로 설정하세요.
dataset은 wrangler 설정 파일의 analytics_engine_datasets에 기술한 데이터셋 이름입니다.
metrics를 지정하지 않으면 GET /api/metrics는 501로 응답하고, 대시보드 사이드바에 메트릭 항목이 표시되지 않습니다.

onFailure

const tsumugi = defineTsumugi({
  performers,
  onFailure: 'NotifyFailure',
});

onFailure는 실패한 잡을 알리는 performer의 binding 이름입니다.
알림을 받는 performer는 FailureNotice를 수신하는 것으로 한정됩니다.
알림 조건과 FailureNotice의 내용은 실패 알림을 참조하세요.

onSettled

const tsumugi = defineTsumugi({
  performers,
  onSettled: { binding: 'NotifySettled', states: ['COMPLETED', 'FAILED'] },
});

onSettled는 종료된 잡을 알리는 performer의 binding 이름과 알릴 상태입니다.
binding은 SettledNotice를 수신하는 performer로 한정됩니다.
states는 필수이며 COMPLETED, FAILED, CANCELLED, STALLED 중에서 선택합니다.
빈 배열이나 잘못된 상태를 지정하면 defineTsumugi에서 예외가 발생합니다.
알림 조건과 SettledNotice의 내용은 종료 알림을 참조하세요.

onEnqueue

const tsumugi = defineTsumugi({
  performers,
  onEnqueue: (input) => (input.binding === 'SlowJob' ? { timeoutMs: 300_000 } : undefined),
});

onEnqueue는 잡을 enqueue할 때마다 실행 옵션의 기본값을 설정하는 함수입니다.
사용자가 명시한 값이 항상 우선합니다.
대상이 되는 enqueue 방법과 기본값이 적용되는 옵션의 자세한 내용은 enqueue 시의 기본값을 참조하세요.

RunSettings

이름기본값내용
maxNodes10000하나의 Run에 포함할 수 있는 node 수의 상한. 초과 시 Run이 실패
maxDepth3subflow 중첩의 상한. 초과 시 Run이 실패
sweepAfterMs5분종료된 Run의 보존 시간
failedRetentionMs7일FAILED 상태 Run의 보존 시간. 이 기간 내의 Run은 재개 대상

BindingConfig

이름기본값내용
shards1shard 수. 2 이상에서는 partitionKey가 필수
policy아래 참조실행량 제한과 에이징
sweepAfterMs5분COMPLETED와 CANCELLED 상태 잡의 보존 시간
failedRetentionMs7일FAILED와 STALLED 상태 잡의 보존 시간. 이 기간 내의 잡은 재시도 대상

Policy

이름기본값내용
pausedfalseenqueue 일시 정지
concurrency100동시 실행 수의 상한
perKeyConcurrency1concurrencyKey별 동시 실행 수의 상한
ratenull{ tokens, intervalMs }. intervalMs당 tokens건까지 실행
perKeyRatenull{ tokens, intervalMs }. 키별로 intervalMs당 tokens건까지 실행
agingIntervalMs60000유효 우선순위가 1 올라가기까지의 대기 시간. null은 에이징 없음
reaperGraceMs30000timeoutMs가 경과한 후, 결과가 보고되지 않은 잡을 무응답으로 판정하기까지의 유예 시간

EnqueueInput

이름기본값내용
bindingenqueue 대상 binding 이름
payloadperformer에 전달하는 값
priority0숫자 우선순위. 클수록 먼저 실행
maxAttempts3시도 횟수의 상한
backoff지수fixed 또는 exponential
timeoutMs60000타임아웃까지의 시간
delayMs실행 시작까지의 지연
runAt실행 시작 시각. delayMs와 동시에 지정할 수 없음
expiresInMsenqueue 시각부터 계산한 만료 기한
expiresAt만료 시각. expiresInMs보다 우선
guaranteeat-least-onceat-least-once 또는 at-most-once
concurrencyKey같은 키의 잡을 순서대로 실행하기 위한 키
uniqueKey중복 제거 키
uniqueForMs24시간uniqueKey로 중복을 판정하는 기간
partitionKeyshard를 분할한 경우 enqueue 대상을 결정하는 키

옵션의 자세한 내용은 잡 투입을 참조하세요.

createClient의 enqueue는 EnqueueInput을 인자로 받습니다.
defineTsumugi의 enqueue가 받는 입력에서는 binding별로 payload와 필수 키의 타입이 도출됩니다.

backoff 기본값

{ kind: 'exponential', baseMs: 1_000, factor: 2, maxMs: 3_600_000, jitter: true }

SweepOptions

이름기본값내용
olderThanMs7일종료된 잡과 Run을 목록에 남기는 시간
limit10001회에 삭제하는 건수의 상한. 잡과 Run 각각의 건수

cron 트리거를 설정하면 olderThanMs가 경과한 후 종료된 잡과 Run이 목록에서 삭제됩니다.

Run을 재개할 수 있는 기간은 runs에서 설정합니다.
FAILED 상태의 Run은 olderThanMs와 runs.failedRetentionMs 중 더 긴 기간이 경과한 후 목록에서 삭제됩니다.
FAILED와 STALLED 상태의 잡도 olderThanMs와 binding의 failedRetentionMs 중 더 긴 기간이 경과한 후 목록에서 삭제됩니다.

wrangler의 binding

binding종류필수용도
JOB_SHARDDurable Object○잡 관리
RUNDurable ObjectRun 관리. flows를 사용하는 경우 필요
SCHEDULERDurable Object정기 실행. schedules를 사용하는 경우 필요
TSUMUGI_DBD1○목록과 검색
TSUMUGI_QUEUEQueues○performer 실행
TSUMUGI_METRICSAnalytics Engine메트릭 기록

TSUMUGI_METRICS가 없으면 메트릭은 기록되지 않습니다.
그 밖의 동작은 달라지지 않습니다.
다른 필수 binding이 부족하면 REST API는 503으로 응답하며, 부족한 binding의 목록이 본문에 포함됩니다.

remote()를 지정한 performer에는 Service Binding이 필요합니다.
binding 이름에는 고정된 이름을 사용하지 않고, performers의 키를 그대로 지정합니다.

"services": [
  { "binding": "MAIL", "service": "my-mailer", "entrypoint": "SendMail" },
]

performer 없이 잡 enqueue에만 사용하는 Worker에 필요한 binding은 JOB_SHARD뿐입니다.

서브패스

import 경로내용
tsumugidefineTsumugi, enqueue, bearerAuth, TsumugiJobShard 등
tsumugi/performerPerformer
tsumugi/clientcreateClient와 관련 타입
tsumugi/uiui()
tsumugi/types타입 전용
tsumugi/testingrunPerformer, createTestContext, simulateFlow 등

공개된 npm 패키지는 tsumugi입니다.
셋업용 CLI는 npx tsumugi로 실행합니다.
명령어 목록은 CLI를 참조하세요.

이 페이지 편집

게시일: 최종 수정: