AWS Step Functions

将多个 AWS 服务以可视化工作流形式编排的无服务器编排服务,可声明式定义分支、并行执行和错误处理

概述

AWS Step Functions 是一项无服务器编排服务,通过 Amazon States Language (ASL) 以 JSON 定义工作流(状态机),将 Lambda、ECS、Batch、DynamoDB 等 200 多个 AWS 服务的调用串联为可视化的工作流。支持条件分支、并行执行、Map 循环、错误重试和异常捕获等控制流,无需编写复杂的编排代码即可构建可靠的分布式应用。

状态类型与工作流构建

Step Functions 的工作流由多种状态(State)组合而成。Task 状态调用 AWS 服务或 Lambda 函数执行实际工作;Choice 状态根据条件分支到不同路径;Parallel 状态同时执行多个分支并等待全部完成;Map 状态对数组中的每个元素并行执行相同处理;Wait 状态暂停指定时间;Pass 状态传递数据或注入固定值;Succeed/Fail 状态标记工作流结束。这些状态的组合可表达几乎任何业务流程。输入/输出处理使用 InputPath、OutputPath、ResultPath、Parameters 进行数据转换和过滤。

Standard 与 Express 的选择与费用设计

Step Functions 提供 Standard 和 Express 两种工作流类型。Standard 工作流最长可运行 1 年,保证恰好一次执行,按状态转换次数计费(每 1,000 次 0.025 美元)。Express 工作流最长运行 5 分钟,保证至少一次执行,按执行次数和时长计费。Standard 适合长时间运行的业务流程(订单处理、审批流程);Express 适合高频短时处理(IoT 数据处理、实时流处理)。Express 的成本在高频场景下可比 Standard 低 90%。选择时的关键判断:需要恰好一次语义或执行时间超过 5 分钟则用 Standard,否则优先考虑 Express。

Retry/Catch 策略与 Map 状态批处理

Step Functions 的错误处理通过 Retry 和 Catch 字段声明式定义。Retry 指定重试条件、间隔、退避率和最大重试次数;Catch 在重试耗尽后将执行路由到错误处理路径。可针对特定错误类型(States.TaskFailed、States.Timeout 等)设置不同策略。Map 状态是批处理的利器,支持 Inline 模式(状态机内嵌套)和 Distributed 模式(最多 10,000 并行执行)。Distributed Map 可直接从 S3 读取 CSV/JSON 文件作为输入,适合大规模数据处理管道。结合 DynamoDB 的幂等性检查,可确保即使工作流重试也不会产生重复副作用。

共有するXB!