0Pricing
Cloud & IT Cert Prep · 课时

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 EXPRESS

Task 状态与服务集成

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-001

Step 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. EventBridge:事件总线与规则
  2. Step Functions:编排无服务器工作流
  3. 用于实时事件处理的 Kinesis Data Streams
  4. 编舞模式与编排模式
← 返回 Cloud & IT Cert Prep