kazzle.config.ts の process コンポーネントで宣言します。1 つのコンポーネントは必要なだけ多くのトリガーを持つことができます。
構造
processModeはライフサイクルを選択します — 長時間実行されるサーバー、またはトリガーごとの 1 回限りの実行。triggers[]はこのコンポーネントを実行するイベントをリストアップします。
processMode
| モード | 実行内容 | 使用時期 |
|---|---|---|
persistent (デフォルト) | 長時間実行される HTTP サーバー。トリガーは POST されます。 | コンポーネントが既に HTTP を提供している、またはメモリ内に状態を保持している(キュー、ウェブソケット、キャッシュ)。 |
triggered | エントリスクリプトはトリガーごとにスポーンされ、終了します。 | 純粋なバックグラウンドジョブ — 夜間クリーンアップ、単一の Stripe ウェブフックハンドラーなど。アイドルサーバーなし。 |
トリガー
各トリガーにはname(コンポーネント内で一意)、kind、およびモードに応じて schedule および/または path があります。
| フィールド | 必須条件 | 注記 |
|---|---|---|
name | 常に | ウェブフック URL セグメントとログで使用されます。ケバブケース。 |
kind | 常に | 'schedule' または 'webhook'。 |
schedule | kind: 'schedule' の場合 | 5 フィールド cron 式。分単位の解像度が最小です。 |
path | processMode: 'persistent' の場合 | トリガーが到達するサーバー上の HTTP ルート。 |
永続モード — サーバーへの HTTP
永続的なコンポーネントのトリガーが発火すると、Kazzle は宣言されたpath でサーバーに POST します。リクエストは以下を含みます:
| ヘッダー | 内容 |
|---|---|
Authorization: Bearer ${KAZZLE_TRIGGER_SECRET} | これを検証してください。一致しない呼び出しは拒否してください。 |
x-kazzle-trigger-name | マニフェストからのトリガーの name。 |
x-kazzle-trigger-run-id | ログ相関用の不透明 ID。 |
x-kazzle-triggered-by | cron | webhook | manual。 |
トリガーモード — トリガーごとの 1 回限り
triggered コンポーネントのトリガーが発火すると、Kazzle はエントリスクリプトを新たにスポーンし、終了を待ちます。path はありません。スクリプトは環境変数からどのトリガーが発火したかを学習します。
| 環境変数 | 値 |
|---|---|
TRIGGER_NAME | マニフェストからのトリガーの name。 |
TRIGGERED_BY | cron | webhook | manual。 |
RUN_ID | ログ相関用の不透明 ID。 |
WEBHOOK_PAYLOAD | JSON ボディ(ウェブフックトリガーのみ)。 |
ウェブフック URL
triggerName セグメントは、そのコンポーネントの triggers[] 内の kind: 'webhook' エントリと一致する必要があります。不明なトリガー名は 404 を返します。
スケジュール解像度
Cron 式は 5 フィールド(分、時間、日、月、曜日)で、分単位の解像度が最小です。分未満のスケジュールはマニフェスト検証時に拒否されます。実行の記録方法
各トリガー発火はprocess_runs 行を trigger_name、triggered_by、run_id、および実行の終了ステータスで書き込みます。独自のコードからこれらをクエリするか、アプリの実行ビューで検査できます。
クレジット不足
失敗した実行は記録およびログされますが、スケジュールは通常のペースで実行を続けます — 不安定な実行がトリガーを無効にすることはありません。実行を停止する唯一のことはクレジットです:すべてのトリガー発火はスペースの残高に対してチェックされ、スペースがクレジット不足(またはビリング設定がない)の間、実行は402 でスキップされます。これは自己修復可能です — スケジュールは武装したままで、トップアップ後の次の発火は通常どおり実行され、手動での再開は不要です。
後からオートメーションを追加
シンプルなアプリはトリガーなしで開始し、後で追加できます — 日次サマリーを追加、Stripe を接続、クリーンアップを実行。コンポーネントのライフサイクル(processMode)とトリガー(triggers[])は独立しているため、アプリの残りの部分を書き直さずに変更できます。