@cloudflare/dynamic-workflowsでDynamic Worker内にWorkflowsを実行可能に
Key Points
- Dynamic Worker内でWorkflowを耐久実行
- テナントIDでワーカーを再ロードして復帰
- 事前登録不要で動的コードを実行可能
Summary
Cloudflare の @cloudflare/dynamic-workflows ライブラリにより、ランタイムでロードされる Dynamic Worker の内部で Workflow を実行できるようになりました。Worker Loader がオンデマンドで Dynamic Worker をロードするため、ワークフローが数時間・数日スリープして再開するケースでも、該当する Dynamic Worker を再読み込みして耐久実行(persistence / retries)を維持します。ワークフロー本体のコードは変更不要で、テナントごとの動的コードや AI エージェントなどのユースケースで有効です。
Key Points
-
動作の仕組み
- 各 Workflow インスタンスにテナントID等のメタデータを付与し、復帰時にそのメタデータで対応する Dynamic Worker を Worker Loader 経由でロードして実行を継続する。
- Dynamic Worker はオンデマンドで作成されるため、事前に全ワークフローを登録する必要がない。
-
実装上の注目点(エンジニア向け)
- エントリポイントは
createDynamicWorkflowEntrypointで定義し、async ({ env, metadata }) => { ... }内でmetadata.tenantIdを使って Dynamic Worker を読み込む。 - Dynamic Worker の env に
WORKFLOWS: wrapWorkflowBinding({ tenantId })を渡すことで、create()が自動的にタグ付けされる。 - WorkerLoader の
get(tenantId, async () => ({ compatibilityDate, mainModule, modules, env }))でテナントコードをオンデマンド返却するパターン。 - ワークフローエンジンが永続化とリトライを担い、ワークフローコード自体にルーティング処理を組み込む必要はない。
- エントリポイントは
-
想定ユースケース
- SaaS のテナント固有ワークフロー(オンボーディング、承認チェーン、請求リトライなど)
- AI エージェントフレームワークでのランタイム生成・実行されるマルチステッププラン
- マルチテナントジョブ処理システムでの顧客ごと処理ロジック
Practical tips
- Wrangler の workflows binding の
class_nameとcreateDynamicWorkflowEntrypointのエントリ名を一致させる。 - Dynamic Worker のマニフェストに
compatibilityDate/mainModule/modulesを含めて動的に返す。 - メタデータ(例:
tenantId)が正しく付与されていることを確認すると、ワークフロー復帰時に正しい Dynamic Worker がロードされる。
(詳細なハンズオンは公式の Dynamic Workflows ガイドを参照してください)