cloudflare-workflows
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseCloudflare Workflows
Cloudflare Workflows
Status: Production Ready ✅ | Last Verified: 2025-12-27 | Version: 3.0.0
Dependencies: cloudflare-worker-base (for Worker setup)
Contents: Quick Start • Commands • Agents • Core Concepts • Critical Rules • Top Errors • Common Patterns • When to Load References • Limits
Quick Start (10 Minutes)
快速入门(10分钟)
1. Create a Workflow
1. 创建工作流
Use the Cloudflare Workflows starter template:
bash
npm create cloudflare@latest my-workflow -- --template cloudflare/workflows-starter --git --deploy false
cd my-workflowWhat you get:
- WorkflowEntrypoint class template
- Worker to trigger workflows
- Complete wrangler.jsonc configuration
使用Cloudflare Workflows初始模板:
bash
npm create cloudflare@latest my-workflow -- --template cloudflare/workflows-starter --git --deploy false
cd my-workflow你将获得:
- WorkflowEntrypoint类模板
- 用于触发工作流的Worker
- 完整的wrangler.jsonc配置
2. Basic Workflow Structure
2. 基础工作流结构
src/index.ts:
typescript
import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
type Env = {
MY_WORKFLOW: Workflow;
};
type Params = {
userId: string;
email: string;
};
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
const { userId, email } = event.payload;
// Step 1: Do work with automatic retries
const result = await step.do('process user', async () => {
return { processed: true, userId };
});
// Step 2: Wait before next step
await step.sleep('wait 1 hour', '1 hour');
// Step 3: Continue workflow
await step.do('send email', async () => {
return { sent: true, email };
});
return { completed: true, userId };
}
}
// Worker to trigger workflow
export default {
async fetch(req: Request, env: Env): Promise<Response> {
const instance = await env.MY_WORKFLOW.create({
params: { userId: '123', email: 'user@example.com' }
});
return Response.json({
id: instance.id,
status: await instance.status()
});
}
};Template: See for complete example
templates/basic-workflow.tssrc/index.ts:
typescript
import { WorkflowEntrypoint, WorkflowStep, WorkflowEvent } from 'cloudflare:workers';
type Env = {
MY_WORKFLOW: Workflow;
};
type Params = {
userId: string;
email: string;
};
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
const { userId, email } = event.payload;
// 步骤1:执行任务并自动重试
const result = await step.do('process user', async () => {
return { processed: true, userId };
});
// 步骤2:等待后执行下一步
await step.sleep('wait 1 hour', '1 hour');
// 步骤3:继续工作流
await step.do('send email', async () => {
return { sent: true, email };
});
return { completed: true, userId };
}
}
// 用于触发工作流的Worker
export default {
async fetch(req: Request, env: Env): Promise<Response> {
const instance = await env.MY_WORKFLOW.create({
params: { userId: '123', email: 'user@example.com' }
});
return Response.json({
id: instance.id,
status: await instance.status()
});
}
};模板:完整示例请查看
templates/basic-workflow.ts3. Configure wrangler.jsonc
3. 配置wrangler.jsonc
jsonc
{
"name": "my-workflow",
"main": "src/index.ts",
"compatibility_date": "2025-10-22",
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow"
}
]
}Template: See
templates/wrangler-workflows-config.jsoncjsonc
{
"name": "my-workflow",
"main": "src/index.ts",
"compatibility_date": "2025-10-22",
"workflows": [
{
"binding": "MY_WORKFLOW",
"name": "my-workflow",
"class_name": "MyWorkflow"
}
]
}模板:请查看
templates/wrangler-workflows-config.jsonc4. Deploy
4. 部署
bash
npm run deploybash
npm run deployCommands
命令
Interactive slash commands for workflow development:
| Command | Description | Use When |
|---|---|---|
| Complete wizard for new workflow projects | Starting new project, need full setup |
| Quick scaffolding for workflow classes | Adding workflow to existing project |
| Interactive debugging with error patterns | Troubleshooting workflow issues |
| Test workflows locally and remotely | Validating workflow behavior |
Example Usage:
/workflow-setup # Full guided setup wizard
/workflow-create # Quick workflow scaffolding
/workflow-debug # Debug workflow issues
/workflow-test # Test workflow execution用于工作流开发的交互式斜杠命令:
| 命令 | 描述 | 适用场景 |
|---|---|---|
| 新工作流项目的完整向导 | 启动新项目,需要完整搭建 |
| 快速生成工作流类框架 | 向现有项目添加工作流 |
| 结合错误模式的交互式调试 | 排查工作流问题 |
| 本地和远程测试工作流 | 验证工作流行为 |
示例用法:
/workflow-setup # 完整引导式搭建向导
/workflow-create # 快速生成工作流框架
/workflow-debug # 调试工作流问题
/workflow-test # 测试工作流执行Agents
代理
Autonomous agents for complex workflow tasks:
| Agent | Description | Triggers |
|---|---|---|
| Auto-detects and fixes configuration/runtime errors | "debug workflow", "fix workflow errors" |
| Analyzes performance, cost, and reliability | "optimize workflow", "improve performance" |
| Autonomous project scaffolding | "setup workflow", "create first workflow" |
Key Capabilities:
- Debugger: 6-phase analysis, auto-fix for I/O context, serialization, export issues
- Optimizer: Cost analysis, reliability scoring, actionable recommendations
- Setup Assistant: Project detection, automatic scaffolding, validation
用于复杂工作流任务的自主代理:
| 代理 | 描述 | 触发条件 |
|---|---|---|
| 自动检测并修复配置/运行时错误 | "debug workflow", "fix workflow errors" |
| 分析性能、成本和可靠性 | "optimize workflow", "improve performance" |
| 自主完成项目搭建 | "setup workflow", "create first workflow" |
核心能力:
- 调试器:6阶段分析,自动修复I/O上下文、序列化、导出问题
- 优化器:成本分析、可靠性评分、可执行建议
- 搭建助手:项目检测、自动生成框架、验证
Scripts
脚本
Automation scripts in directory:
scripts/| Script | Purpose |
|---|---|
| Validate wrangler.jsonc configuration |
| Create and test workflow instances |
| Measure performance and cost |
| Scaffold new workflows from templates |
| Validate against Cloudflare limits |
Usage:
bash
./scripts/validate-workflow-config.sh # Check config
./scripts/test-workflow.sh my-workflow # Test workflow
./scripts/benchmark-workflow.sh my-workflow 10 # Benchmark 10 runs
./scripts/generate-workflow.sh MyWorkflow # Generate scaffold
./scripts/check-workflow-limits.sh src/workflows/my-workflow.tsscripts/| 脚本 | 用途 |
|---|---|
| 验证wrangler.jsonc配置 |
| 创建并测试工作流实例 |
| 测量性能和成本 |
| 从模板生成新工作流框架 |
| 验证是否符合Cloudflare限制 |
用法:
bash
./scripts/validate-workflow-config.sh # 检查配置
./scripts/test-workflow.sh my-workflow # 测试工作流
./scripts/benchmark-workflow.sh my-workflow 10 # 基准测试10次运行
./scripts/generate-workflow.sh MyWorkflow # 生成框架
./scripts/check-workflow-limits.sh src/workflows/my-workflow.tsCore Concepts
核心概念
WorkflowEntrypoint
WorkflowEntrypoint
Every workflow must extend :
WorkflowEntrypointtypescript
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
// Workflow logic here
}
}Key Points:
- : Environment bindings (KV, D1, etc.)
Env - : Typed payload passed when creating workflow instance
Params - : Contains
event,id,payloadtimestamp - : Methods for durable execution
step
每个工作流必须继承:
WorkflowEntrypointtypescript
export class MyWorkflow extends WorkflowEntrypoint<Env, Params> {
async run(event: WorkflowEvent<Params>, step: WorkflowStep) {
// 工作流逻辑写在这里
}
}关键点:
- : 环境绑定(KV、D1等)
Env - : 创建工作流实例时传入的类型化负载
Params - : 包含
event、id、payloadtimestamp - : 用于持久化执行的方法
step
Step Methods
Step方法
All workflow work MUST be done in steps for durability:
typescript
// step.do - Execute work with automatic retries
await step.do('step name', async () => {
return { result: 'data' };
});
// step.sleep - Wait for duration
await step.sleep('wait', '1 hour');
// step.sleepUntil - Wait until timestamp
await step.sleepUntil('wait until', Date.now() + 3600000);
// step.waitForEvent - Wait for external event
const event = await step.waitForEvent('payment received', 'payment.completed', {
timeout: '30 minutes'
});CRITICAL: All I/O (fetch, KV, D1, R2) must happen inside callbacks!
step.do()Reference: See for all patterns
references/workflow-patterns.md所有工作流任务必须在步骤中执行以保证持久性:
typescript
// step.do - 执行任务并自动重试
await step.do('step name', async () => {
return { result: 'data' };
});
// step.sleep - 等待指定时长
await step.sleep('wait', '1 hour');
// step.sleepUntil - 等待到指定时间戳
await step.sleepUntil('wait until', Date.now() + 3600000);
// step.waitForEvent - 等待外部事件
const event = await step.waitForEvent('payment received', 'payment.completed', {
timeout: '30 minutes'
});关键注意事项:所有I/O操作(fetch、KV、D1、R2)必须在回调内部执行!
step.do()参考:所有模式请查看
references/workflow-patterns.mdCritical Rules
关键规则
Always Do ✅
必须遵循 ✅
✅ Perform all I/O inside step.do() - Required for durability
✅ Use named steps - Makes debugging easier
✅ Return JSON-serializable data from steps - Required for state persistence
✅ Use step.sleep() for delays - Don't use setTimeout()
✅ Handle errors explicitly - Use try/catch in step callbacks
✅ Use NonRetryableError for permanent failures - Stops retries
Workflow Patterns: See for:
references/workflow-patterns.md- Sequential workflows
- Parallel execution
- Event-driven workflows
- Scheduled workflows
- Human-in-the-loop workflows
✅ 所有I/O操作放在step.do()内部 - 保证持久性的必要条件
✅ 使用命名步骤 - 便于调试
✅ 步骤返回JSON可序列化数据 - 状态持久化的必要条件
✅ 使用step.sleep()实现延迟 - 不要使用setTimeout()
✅ 显式处理错误 - 在步骤回调中使用try/catch
✅ 对永久失败使用NonRetryableError - 停止重试
工作流模式:请查看获取以下模式:
references/workflow-patterns.md- 顺序工作流
- 并行执行
- 事件驱动工作流
- 定时工作流
- 人工介入工作流
Never Do ❌
禁止操作 ❌
❌ Never do I/O outside step.do() - Will fail with "I/O context" error
❌ Never use setTimeout() or setInterval() - Use step.sleep() instead
❌ Never return non-serializable data - Functions, Promises, etc. will fail
❌ Never hardcode timeouts - Use workflow config
❌ Never ignore NonRetryableError - Indicates permanent failure
❌ 绝对不要在step.do()外部执行I/O - 会触发"I/O context"错误
❌ 绝对不要使用setTimeout()或setInterval() - 请使用step.sleep()替代
❌ 绝对不要返回不可序列化数据 - 函数、Promise等会导致失败
❌ 绝对不要硬编码超时时间 - 使用工作流配置
❌ 绝对不要忽略NonRetryableError - 表示永久失败
Top 5 Critical Errors
常见错误Top5
Error #1: I/O Context Error ⚠️
错误1:I/O上下文错误 ⚠️
Error:
Cannot perform I/O on behalf of a different requestCause: Performing I/O outside callback
step.do()Solution:
typescript
// ❌ WRONG
const data = await fetch('https://api.example.com');
await step.do('use data', async () => {
return data; // Error!
});
// ✅ CORRECT
const data = await step.do('fetch data', async () => {
const response = await fetch('https://api.example.com');
return await response.json();
});错误信息:
Cannot perform I/O on behalf of a different request原因: 在回调外部执行I/O操作
step.do()解决方案:
typescript
// ❌ 错误写法
const data = await fetch('https://api.example.com');
await step.do('use data', async () => {
return data; // 错误!
});
// ✅ 正确写法
const data = await step.do('fetch data', async () => {
const response = await fetch('https://api.example.com');
return await response.json();
});Error #2: Serialization Error
错误2:序列化错误
Error:
Cannot serialize workflow stateCause: Returning non-JSON-serializable data from step
Solution:
typescript
// ❌ WRONG
await step.do('process', async () => {
return { fn: () => {} }; // Functions not serializable
});
// ✅ CORRECT
await step.do('process', async () => {
return { result: 'data' }; // JSON-serializable
});错误信息:
Cannot serialize workflow state原因: 步骤返回了非JSON可序列化的数据
解决方案:
typescript
// ❌ 错误写法
await step.do('process', async () => {
return { fn: () => {} }; // 函数不可序列化
});
// ✅ 正确写法
await step.do('process', async () => {
return { result: 'data' }; // JSON可序列化
});Error #3: NonRetryableError Not Thrown
错误3:未抛出NonRetryableError
Error: Workflow retries forever on permanent failures
Solution:
typescript
import { NonRetryableError } from 'cloudflare:workers';
await step.do('validate', async () => {
if (!isValid) {
throw new NonRetryableError('Invalid input'); // Stop retries
}
return { valid: true };
});问题: 工作流在永久失败时无限重试
解决方案:
typescript
import { NonRetryableError } from 'cloudflare:workers';
await step.do('validate', async () => {
if (!isValid) {
throw new NonRetryableError('Invalid input'); // 停止重试
}
return { valid: true };
});Error #4: WorkflowEvent Not Found
错误4:WorkflowEvent未找到
Error:
WorkflowEvent 'payment.completed' not foundCause: Event name mismatch between and trigger
waitForEventSolution:
typescript
// Workflow waits for event
const event = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
// Trigger event with EXACT same name
await instance.trigger('payment.completed', { amount: 100 });错误信息:
WorkflowEvent 'payment.completed' not found原因: 和触发事件的名称不匹配
waitForEvent解决方案:
typescript
// 工作流等待事件
const event = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
// 触发事件时使用完全一致的名称
await instance.trigger('payment.completed', { amount: 100 });Error #5: Workflow Execution Failed
错误5:工作流执行失败
Error:
Workflow execution failed: Step timeout exceededCause: Step exceeds maximum CPU time (30 seconds)
Solution:
typescript
// ❌ WRONG
await step.do('long task', async () => {
for (let i = 0; i < 1000000; i++) {
// Long computation
}
});
// ✅ CORRECT - Break into smaller steps
for (let i = 0; i < 100; i++) {
await step.do(`batch ${i}`, async () => {
// Process batch
});
}All Issues: See for complete documentation
references/common-issues.md错误信息:
Workflow execution failed: Step timeout exceeded原因: 步骤超出最大CPU时间(30秒)
解决方案:
typescript
// ❌ 错误写法
await step.do('long task', async () => {
for (let i = 0; i < 1000000; i++) {
// 长时间计算
}
});
// ✅ 正确写法 - 拆分为更小的步骤
for (let i = 0; i < 100; i++) {
await step.do(`batch ${i}`, async () => {
// 处理批次
});
}所有问题:完整文档请查看
references/common-issues.mdCommon Patterns
通用模式
Sequential Workflow
顺序工作流
Basic workflow with steps executing in order. Each step completes before the next begins.
Use cases: Order processing, user onboarding, data pipelines
Load for complete example
templates/basic-workflow.ts步骤按顺序执行的基础工作流。每个步骤完成后才会执行下一步。
适用场景:订单处理、用户注册、数据管道
完整示例请加载
templates/basic-workflow.tsScheduled Workflow
定时工作流
Workflow with time delays between steps using or .
step.sleep()step.sleepUntil()Use cases: Reminder sequences, scheduled tasks, delayed notifications
Load for complete example
templates/scheduled-workflow.ts使用或在步骤间设置时间延迟的工作流。
step.sleep()step.sleepUntil()适用场景:提醒序列、定时任务、延迟通知
完整示例请加载
templates/scheduled-workflow.tsEvent-Driven Workflow
事件驱动工作流
Wait for external events with . Always set timeout and handle with :
step.waitForEvent()NonRetryableErrortypescript
const payment = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
if (!payment) throw new NonRetryableError('Payment timeout');Load for complete example
templates/workflow-with-events.ts使用等待外部事件。必须设置超时时间并使用处理超时:
step.waitForEvent()NonRetryableErrortypescript
const payment = await step.waitForEvent('wait payment', 'payment.completed', {
timeout: '30 minutes'
});
if (!payment) throw new NonRetryableError('Payment timeout');完整示例请加载
templates/workflow-with-events.tsWorkflow with Retries
带重试的工作流
Use for permanent failures (404), regular for transient failures (5xx):
NonRetryableErrorErrortypescript
const data = await step.do('fetch', async () => {
const response = await fetch(url);
if (!response.ok) {
if (response.status === 404) throw new NonRetryableError('Not found');
throw new Error('Temporary failure'); // Will retry
}
return await response.json();
});Load for complete example with retry configuration
templates/workflow-with-retries.ts对永久失败(如404)使用,对临时失败(如5xx)使用常规:
NonRetryableErrorErrortypescript
const data = await step.do('fetch', async () => {
const response = await fetch(url);
if (!response.ok) {
if (response.status === 404) throw new NonRetryableError('Not found');
throw new Error('Temporary failure'); // 会重试
}
return await response.json();
});带重试配置的完整示例请加载
templates/workflow-with-retries.tsTriggering Workflows
触发工作流
From Worker: Create instances via , get status with , trigger events with .
env.MY_WORKFLOW.create()instance.status()instance.trigger()From Cron: Use handler to create workflow instances on schedule.
scheduled()Load for complete Worker trigger example
Load for complete Cron trigger example
templates/worker-trigger.tstemplates/scheduled-workflow.ts从Worker触发:通过创建实例,使用获取状态,使用触发事件。
env.MY_WORKFLOW.create()instance.status()instance.trigger()从Cron触发:使用处理程序定时创建工作流实例。
scheduled()Worker触发完整示例请加载
Cron触发完整示例请加载
templates/worker-trigger.tstemplates/scheduled-workflow.tsWhen to Load References
何时查阅参考文档
references/common-issues.mdreferences/workflow-patterns.mdreferences/wrangler-commands.mdreferences/production-checklist.mdreferences/limits-quotas.mdreferences/2025-features.mdreferences/metrics-analytics.mdreferences/troubleshooting.mdtemplates/references/common-issues.mdreferences/workflow-patterns.mdreferences/wrangler-commands.mdreferences/production-checklist.mdreferences/limits-quotas.mdreferences/2025-features.mdreferences/metrics-analytics.mdreferences/troubleshooting.mdtemplates/Wrangler Commands
Wrangler命令
Key Commands: , ,
wrangler workflows createwrangler workflows instances list/describe/terminatewrangler deployLoad for complete CLI reference with all workflow management commands, monitoring workflows, and debugging stuck instances.
references/wrangler-commands.md核心命令:、、
wrangler workflows createwrangler workflows instances list/describe/terminatewrangler deploy完整CLI参考请加载,包含所有工作流管理命令、工作流监控和卡住实例调试方法。
references/wrangler-commands.mdState Persistence
状态持久化
Workflows automatically persist state between steps. No manual state management needed:
typescript
export class StatefulWorkflow extends WorkflowEntrypoint {
async run(event, step) {
// Step 1 result is automatically persisted
const result1 = await step.do('step 1', async () => {
return { data: 'value' };
});
// Even if workflow crashes here, step 1 won't re-run
await step.sleep('wait', '1 hour');
// Step 2 can use step 1's result (still available after sleep)
await step.do('step 2', async () => {
console.log(result1.data); // 'value' - persisted!
});
}
}Key Points:
- Step results automatically persisted
- Completed steps never re-run (even after crash/restart)
- State available throughout workflow lifetime
工作流会自动在步骤间持久化状态,无需手动管理状态:
typescript
export class StatefulWorkflow extends WorkflowEntrypoint {
async run(event, step) {
// 步骤1的结果会自动持久化
const result1 = await step.do('step 1', async () => {
return { data: 'value' };
});
// 即使工作流在此处崩溃,步骤1也不会重新执行
await step.sleep('wait', '1 hour');
// 步骤2可以使用步骤1的结果(休眠后仍然可用)
await step.do('step 2', async () => {
console.log(result1.data); // 'value' - 已持久化!
});
}
}关键点:
- 步骤结果自动持久化
- 已完成的步骤永远不会重新执行(即使崩溃/重启后)
- 状态在整个工作流生命周期内可用
Limits
限制
| Resource | Limit |
|---|---|
| Step CPU Time | 30 seconds |
| Workflow Duration | 30 days |
| Step Payload Size | 128 KB |
| Workflow Payload Size | 128 KB |
| Steps per Workflow | 1,000 |
| Concurrent Instances | 1,000 per workflow |
| Event Payload Size | 128 KB |
Workarounds:
- Large data: Store in KV/R2, pass key in step
- Long CPU: Break into smaller steps
- Many steps: Consider sub-workflows
| 资源 | 限制 |
|---|---|
| 步骤CPU时间 | 30秒 |
| 工作流持续时间 | 30天 |
| 步骤负载大小 | 128 KB |
| 工作流负载大小 | 128 KB |
| 每个工作流的步骤数 | 1000 |
| 并发实例数 | 每个工作流1000个 |
| 事件负载大小 | 128 KB |
解决方法:
- 大数据:存储在KV/R2中,在步骤中传递密钥
- 长时间CPU任务:拆分为更小的步骤
- 大量步骤:考虑使用子工作流
Pricing
定价
- Duration: $0.02 per million GB-s (same as Workers)
- Requests: $0.15 per million (workflow creation + step execution)
- State Storage: Included (no additional cost)
- Sleep: Free (no CPU usage during sleep)
Example Cost (1M workflow runs):
- 5 steps each = 5M requests = $0.75
- 10ms per step = 50GB-s = $0.001
- Total: ~$0.75 per million workflows
- 持续时间:每百万GB-s 0.02美元(与Workers相同)
- 请求:每百万次0.15美元(工作流创建 + 步骤执行)
- 状态存储:包含在内(无额外费用)
- 休眠:免费(休眠期间无CPU使用)
示例成本(100万次工作流运行):
- 每次5个步骤 = 500万次请求 = 0.75美元
- 每个步骤10ms = 50GB-s = 0.001美元
- 总计:约每百万次工作流0.75美元
Troubleshooting
故障排查
"I/O context" error
"I/O context"错误
Solution: Move all I/O into callbacks → See #1
step.do()references/common-issues.md解决方案:将所有I/O操作移至回调内部 → 查看 #1
step.do()references/common-issues.md"Serialization error"
"Serialization error"
Solution: Return only JSON-serializable data from steps → See #2
references/common-issues.md解决方案:步骤仅返回JSON可序列化数据 → 查看 #2
references/common-issues.mdWorkflow retries forever
工作流无限重试
Solution: Throw for permanent failures → See #3
NonRetryableErrorreferences/common-issues.md解决方案:对永久失败抛出 → 查看 #3
NonRetryableErrorreferences/common-issues.md"WorkflowEvent not found"
"WorkflowEvent not found"
Solution: Ensure event names match exactly → See #4
references/common-issues.md解决方案:确保事件名称完全匹配 → 查看 #4
references/common-issues.md"Step timeout exceeded"
"Step timeout exceeded"
Solution: Break long computations into smaller steps → See #5
references/common-issues.md解决方案:将长时间计算拆分为更小的步骤 → 查看 #5
references/common-issues.mdProduction Checklist
生产环境检查清单
10-Point Pre-Deployment Checklist: I/O context isolation, JSON serialization, NonRetryableError usage, event name consistency, step duration limits, error handling, retry configuration, timeouts, workflow naming, and monitoring.
Load for complete checklist with detailed explanations, code examples, verification steps, and deployment workflow.
references/production-checklist.md10点预部署检查清单:I/O上下文隔离、JSON序列化、NonRetryableError使用、事件名称一致性、步骤持续时间限制、错误处理、重试配置、超时设置、工作流命名和监控。
完整检查清单请加载,包含详细说明、代码示例、验证步骤和部署流程。
references/production-checklist.mdOfficial Documentation
官方文档
Workflows: https://developers.cloudflare.com/workflows/ • API Reference: https://developers.cloudflare.com/workflows/reference/ • Examples: https://developers.cloudflare.com/workflows/examples/ • Blog: https://blog.cloudflare.com/cloudflare-workflows/