Tsumugi Docs
検索

設定

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名と、通知する状態
onEnqueue投入ごとに実行オプションの既定値を設定する関数

戻り値

名前内容
fetch, queue, scheduleddefault exportに含めるExportedHandlerのハンドラ
jobs(env)型付きの投入オブジェクト(JobQueue<M>)
enqueue(env, input)1件のジョブの型付き投入。戻り値はジョブID
enqueueMany(env, inputs)enqueueと同じ形式での複数ジョブの投入
shardFor(env, binding, partitionKey?)投入先の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を呼び出した場合も、同様に例外が発生します。
投入方法ごとの違いは、ジョブの投入を参照してください。

auth

関数内容
bearerAuth1つのトークンによる認証
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は、ジョブの投入ごとに実行オプションの既定値を設定する関数です。
利用者が明示した値は、常に優先されます。
対象となる投入方法と、既定値が適用されるオプションの詳細は、投入時の既定値を参照してください。

RunSettings

名前既定内容
maxNodes100001つのRunに含められるノード数の上限。超過時はRunが失敗
maxDepth3subflowの入れ子の上限。超過時はRunが失敗
sweepAfterMs5分終了したRunの保持時間
failedRetentionMs7日FAILEDのRunの保持時間。この期間内のRunは再開の対象

BindingConfig

名前既定内容
shards1shard数。2以上ではpartitionKeyが必須
policy下記実行量の制限とエージング
sweepAfterMs5分COMPLETEDとCANCELLEDのジョブの保持時間
failedRetentionMs7日FAILEDとSTALLEDのジョブの保持時間。この期間内のジョブはリトライの対象

Policy

名前既定内容
pausedfalse投入の一時停止
concurrency100同時実行数の上限
perKeyConcurrency1concurrencyKeyごとの同時実行数の上限
ratenull{ tokens, intervalMs }。intervalMsあたりtokens件までの実行
perKeyRatenull{ tokens, intervalMs }。キーごとのintervalMsあたりtokens件までの実行
agingIntervalMs60000実効優先度が1上がるまでの待ち時間。nullはエージングなし
reaperGraceMs30000timeoutMsの経過後、結果が報告されないジョブを無応答と判定するまでの猶予

EnqueueInput

名前既定内容
binding投入先のbinding名
payloadperformerへ渡す値
priority0数値の優先度。大きいほど先に実行
maxAttempts3試行回数の上限
backoff指数fixedまたはexponential
timeoutMs60000タイムアウトまでの時間
delayMs実行開始までの遅延
runAt実行開始の時刻。delayMsと同時に指定不可
expiresInMs投入時刻から数えた期限
expiresAt期限の時刻。expiresInMsより優先
guaranteeat-least-onceat-least-onceまたはat-most-once
concurrencyKey同じキーのジョブを順に実行するためのキー
uniqueKey重複排除のキー
uniqueForMs24時間uniqueKeyで重複を判定する期間
partitionKeyshardを分割している場合に投入先を決めるキー

オプションの詳細は、ジョブの投入を参照してください。

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を持たず、ジョブの投入に限って使用する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を参照してください。

このページを編集

公開日: 最終更新: