Step Functions:编排无服务器工作流
在 Step Functions 中将多步骤工作流定义为状态机,使用捕获和重试块处理错误,并集成本机 SDK 集成
Step Functions:编排无服务器工作流 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
什么是 AWS Step Functions?
AWS Step Functions是一种完全托管的工作流编排服务,可将分布式应用程序协调为一系列步骤,这些步骤定义在状态机中。状态机中的每个步骤都是一个状态,可以是 Lambda 调用、AWS SDK 调用、等待阶段、并行分支或选择(if/else)。Step Functions 会管理状态、处理重试并提供可视化执行历史记录,因此您无需在应用程序代码中编写编排逻辑。
Amazon States Language(ASL)
状态机使用基于 JSON 的 Amazon States Language(ASL)定义。每个状态都有一个 Type(Task、Choice、Wait、Parallel、Map、Pass、Succeed、Fail),并会转换到 Next 状态或结束。Task 状态的 Resource 字段指定要调用的 AWS 服务:对于 Lambda,该字段是一个 ARN;对于 200 多种 AWS 服务,则可以使用经过优化的服务集成 ARN,无需中间 Lambda。
{
'Comment': 'Order processing workflow',
'StartAt': 'ValidateOrder',
'States': {
'ValidateOrder': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123456789012:function:ValidateOrder',
'Next': 'ChargePayment',
'Retry': [{'ErrorEquals': ['Lambda.ServiceException'], 'IntervalSeconds': 2, 'MaxAttempts': 3}]
},
'ChargePayment': {
'Type': 'Task',
'Resource': 'arn:aws:states:::dynamodb:putItem',
'Parameters': {'TableName': 'Orders', 'Item': {'orderId': {'S.$': '$.orderId'}}},
'End': true
}
}
}Standard 与 Express 工作流
Step Functions 有两种工作流类型。Standard 工作流:持久运行,最长持续 1 年,采用恰好一次执行语义,并将完整执行历史记录存储 90 天,适合长期运行的业务流程。Express 工作流:高吞吐量(每秒超过 100,000 次执行),最长持续 5 分钟,采用至少一次执行语义,并将日志发送到 CloudWatch,适合实时事件处理和物联网数据管道。请根据持续时间、吞吐量和幂等性要求进行选择。
# Create a Standard workflow state machine
aws stepfunctions create-state-machine \
--name OrderProcessing \
--definition file://order-state-machine.json \
--role-arn arn:aws:iam::123456789012:role/StepFunctionsRole \
--type STANDARD
# Create an Express workflow for high-throughput
aws stepfunctions create-state-machine \
--name ClickstreamProcess \
--definition file://click-state-machine.json \
--role-arn arn:aws:iam::123456789012:role/StepFunctionsRole \
--type EXPRESSTask 状态与服务集成
Step Functions Task 状态支持两种集成模式。请求-响应:调用 AWS 服务后立即继续执行(发出请求后不等待结果)。Sync 集成:调用服务并等待其完成后再转到下一个状态(例如等待 ECS 任务完成、Glue 作业完成或 SageMaker 训练作业结束)。Sync 集成会在资源 ARN 上使用 :sync:2 后缀,从而无需编写轮询逻辑。
# Sync integration: start Glue job and wait for completion
'RunGlueETL': {
'Type': 'Task',
'Resource': 'arn:aws:states:::glue:startJobRun.sync:2',
'Parameters': {
'JobName': 'clean-sales'
},
'Next': 'RunAthenaQuery'
}用于分支逻辑的 Choice 状态
Choice 状态实现条件分支,是工作流中 if/else 或 switch 语句的对应形式。您可以将条件定义为 Choices 数组;第一个匹配的条件决定下一个状态。Default 状态用于处理未匹配的情况。Choice 状态允许您根据产品类型、客户等级或付款状态,将订单路由到不同的履行路径,而无需在 Lambda 逻辑中编写条件判断。
'RouteByOrderType': {
'Type': 'Choice',
'Choices': [
{
'Variable': '$.orderType',
'StringEquals': 'DIGITAL',
'Next': 'FulfillDigital'
},
{
'Variable': '$.orderType',
'StringEquals': 'PHYSICAL',
'Next': 'FulfillPhysical'
}
],
'Default': 'HandleUnknownType'
}Parallel 与 Map 状态
Parallel 状态会同时运行多个分支,并等待所有分支完成后再继续执行,适合同时运行信用检查和库存检查等并发任务。Map 状态会遍历输入中的数组,并对每个元素并行应用同一组状态,适合处理上一步返回的一批项目,例如调整多个已上传图像的大小。
'ProcessImages': {
'Type': 'Map',
'ItemsPath': '$.imageKeys',
'MaxConcurrency': 10,
'Iterator': {
'StartAt': 'ResizeImage',
'States': {
'ResizeImage': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123:function:ResizeImage',
'End': true
}
}
},
'Next': 'NotifyComplete'
}错误处理:Catch 与 Retry
Step Functions 中的每个 Task 状态都可以使用 Retry 和 Catch 块来实现弹性错误处理。Retry 指定哪些错误类型会触发自动重试,并可配置 IntervalSeconds、MaxAttempts 和 BackoffRate(指数退避乘数)。Catch 指定不可恢复错误对应的后备状态。这种声明式错误处理避免了在 Lambda 函数中重复编写 try/catch 块。
'ChargeCard': {
'Type': 'Task',
'Resource': 'arn:aws:lambda:us-east-1:123:function:ChargeCard',
'Retry': [{
'ErrorEquals': ['Lambda.ServiceException', 'States.TaskFailed'],
'IntervalSeconds': 2,
'MaxAttempts': 3,
'BackoffRate': 2.0
}],
'Catch': [{
'ErrorEquals': ['PaymentDeclined'],
'Next': 'NotifyPaymentFailed',
'ResultPath': '$.error'
}],
'Next': 'FulfillOrder'
}Wait 状态与回调
Wait 状态会让工作流暂停固定时长,或暂停到指定时间戳。Callback 模式(使用 .waitForTaskToken)会暂停执行,直到外部系统携带该令牌调用 SendTaskSuccess 或 SendTaskFailure。Step Functions 正是通过这种方式模拟人工审批步骤的:发送包含任务令牌的电子邮件,当人员在邮件客户端中点击批准或拒绝链接后,工作流便会恢复。
# Callback pattern: wait for human approval
'RequestApproval': {
'Type': 'Task',
'Resource': 'arn:aws:states:::sqs:sendMessage.waitForTaskToken',
'Parameters': {
'QueueUrl': 'https://sqs.us-east-1.amazonaws.com/123/approvals',
'MessageBody': {
'taskToken.$': '$$.Task.Token',
'orderId.$': '$.orderId'
}
},
'Next': 'ProcessApproval'
}Step Functions 与 EventBridge 集成
Step Functions 执行可以由EventBridge 规则启动,因此很容易响应 AWS 服务事件来触发工作流。例如,S3 的 ObjectCreated 事件会触发一条 EventBridge 规则,从而启动 Step Functions 图像处理工作流。执行成功或失败时,Step Functions 也可以将自身的事件发布到 EventBridge,使您无需轮询 Step Functions API 即可实现下游监控和告警。
监控 Step Functions 执行
Step Functions 控制台提供可视化工作流执行图,以实时的颜色标记显示哪些状态已成功、正在运行或已失败。对于 Standard 工作流,每次执行都会保存完整的输入/输出历史记录(保留 90 天)。对于 Express 工作流,日志会发送到 CloudWatch Logs。使用X-Ray 跟踪可以跟踪 Lambda 函数以及工作流中调用的其他服务的端到端请求延迟。
# List recent executions and check status
aws stepfunctions list-executions \
--state-machine-arn arn:aws:states:us-east-1:123456789012:stateMachine:OrderProcessing \
--status-filter FAILED
# Describe a specific failed execution for debugging
aws stepfunctions describe-execution \
--execution-arn arn:aws:states:us-east-1:123456789012:execution:OrderProcessing:exec-001Step Functions、SQS 与 EventBridge 的比较
了解何时使用 Step Functions、SQS 或 EventBridge,是考试中常见的决策点。当您需要对包含错误处理和分支的多步骤流程进行可视化、有状态的编排时,请使用 Step Functions。当两个服务之间需要通过可靠的点对点异步消息传递,并使用可见性超时机制进行重试时,请使用 SQS。当您需要根据内容模式将事件路由到多个订阅者时,请使用 EventBridge。Step Functions 工作流可以集成这三者:通过任务令牌等待 SQS 消息,将完成事件发布到 EventBridge,并串联 Lambda 和 SDK 调用。
快速检查
测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。
课程回顾
在本课中,您学习了:Step Functions 将工作流编排为状态机,并使用 Task、Choice、Parallel、Map、Wait 和 Catch 状态;Standard Workflows 支持最长 1 年的运行时间并保留完整的执行历史,而 Express Workflows 用于处理吞吐量高且运行时间少于 5 分钟的工作负载;以及使用任务令牌的 Callback 模式支持人工参与的审批步骤。接下来,我们将学习用于高吞吐量实时事件处理的 Kinesis Data 流。
常见问题解答
「Step Functions:编排无服务器工作流」课时是免费的吗?
是的 — 「Step Functions:编排无服务器工作流」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「Step Functions:编排无服务器工作流」这节课中我会学到什么?
在 Step Functions 中将多步骤工作流定义为状态机,使用捕获和重试块处理错误,并集成本机 SDK 集成 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「Step Functions:编排无服务器工作流」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- EventBridge:事件总线与规则
- Step Functions:编排无服务器工作流
- 用于实时事件处理的 Kinesis Data Streams
- 编舞模式与编排模式