使用 AWS Step Functions,您可以将业务流程作为一系列步骤来实施,这些步骤将构成一个工作流。
工作流中的个别步骤可以调用一个 Lambda 函数或一个具有某种业务逻辑的容器,更新 DynamoDB 之类的数据库,或者在执行完相应的步骤或整个工作流之后向队列发布一条消息。

AWS Step Functions 具有两个工作流选项 – “标准”和“快速”。当业务流程的单次执行预计花费五分钟以上的时间时,您应选择“标准”。长时间运行的工作流的一些示例包括 ETL 编排管道,或者工作流中的任何步骤在转到下一步之前等待人为响应时。

“快速”工作流适用于花费时间不足五分钟的工作流,而且非常适合满足您对高运行量(即每秒 10 万次调用)的需求。您可以单独使用“标准”或“快速”,也可以将它们组合使用,以使更长的“标准”工作流触发多个运行时间更短且并行执行的“快速”工作流。

微服务编排

将 Lambda 函数组合使用,以构建基于 Web 的应用程序

在这个简单银行系统的示例中,在验证客户的姓名和地址之后,这家银行为客户创建了一个新的银行账户。此工作流首先使用 CheckName 和 CheckAddress 这两个 Lambda 函数,它们作为任务状态并行执行。执行完这两个函数之后,此工作流执行 ApproveApplication Lambda 函数。您可以定义 retry 和 catch 子句,以处理来自任务状态的错误。您可以使用预定义的系统错误,也可以处理您工作流中的这些 Lambda 函数抛出的自定义错误。由于您的工作流代码负责处理错误,Lambda 函数可以专注于业务逻辑并减少代码。“快速”工作流更适合此示例,因为 Lambda 函数在执行这些任务时花费的总计用时不超过五分钟,且不使用任何外部依赖关系。 

将 Lambda 函数组合使用,以便在经过人工批准的情况下构建基于 Web 的应用程序

有时可能需要在业务流程中人工审查和批准或拒绝某个步骤,以使工作流程能够继续转到下一个步骤。当您的工作流需要等待人工操作,或者等待外部系统进行处理,但需要花费五分钟以上的时间才会响应时,建议使用标准工作流。在此,我们在两个步骤之间使用一个“通知审批者”步骤,以扩展新的开户流程。此工作流首先使用并行执行的 CheckName 和 CheckAddress 任务状态。下一个状态 ReviewRequired 是一个选择状态,它具有两个可能的路径 – 在 NotifyApprover 任务中向审批者发送一封 SNS 通知电子邮件,或者继续转到 ApproveApplication 状态。NotifyApprover 任务状态会向审批者发送一封电子邮件,并等待响应,然后才会继续转到下一个选择状态 Approved(已批准)。根据审批者做出的决定,通过 Lambda 函数将此账户申请的状态设置为 Approved(已批准)或 Rejected(已拒绝)。

使用“快速”工作流调用一个业务流程,以响应一个事件

在此示例中,自定义的 Eventbridge 总线上的一个事件满足一条规则,并调用了一个 Step Functions 工作流作为一个目标。假设您的一个客户服务应用程序需要处理已过期的客户订阅。一条 EventBridge 规则会侦听订阅过期事件,并在响应时调用一个目标工作流。此订阅过期工作流会禁用已过期的订阅所拥有的全部资源,但不将它们删除,并通过电子邮件告知客户他们的订阅已过期。可以使用 Lambda 函数并行执行这两个操作。当此工作流结束之后,会通过一个 Lambda 函数向事件总线发送一个新的事件,以表明已处理订阅过期。对于此示例,建议使用“快速”工作流。随着您的业务增长,您开始将更多的事件交给事件总线来处理,而借助功能强大的“快速”工作流,每秒可以调用 10 万次工作流执行。请查看使用此 Github 存储库的实际示例。

安全性和 IT 自动化

编排一个安全事故响应,以创建 IAM 政策

您可以使用 AWS Step Functions 创建一个自动化的安全事故响应工作流,其中包含一个手动批准步骤。在此示例中,当创建一个 IAM 政策时,会触发一个 Step Functions 工作流。此工作流会将政策操作与一个可自定义的限制操作列表进行比较。此工作流会暂时回滚政策,然后通知管理员并等待他们批准或拒绝。您可以扩展此工作流,以自动进行修复,例如采取替代措施,或者限制对特定的 ARN 执行操作。请在此查看此实际示例。

响应您的 AWS 账户中的运营事件

您可以对 AWS 资源的运营事件做出自动响应,以减少维护 AWS 云基础设施时产生的运营开销。Amazon EventBridge 提供了近乎实时的系统事件流,这些事件描述了您的 AWS 资源的大部分更改和通知。从此流中,您可以创建规则,以便将特定事件路由到 AWS Step FunctionsAWS Lambda 和其他 AWS 服务,以执行进一步处理和自动化操作。在此示例中,根据一个来自 AWS Health 的事件触发了一个 AWS Step Functions 工作流。AWS 主动监控常用的代码库站点,以寻找被公开的 IAM 访问密钥。我们假设 GitHub 上公开了一个 IAM 访问密钥。在与已公开的密钥相关的 AWS 账户中,AWS Health 生成了一个 AWS_RISK_CREDENTIALS_EXPOSED 事件。所配置的一条 Amazon Eventbridge 规则检测到此事件,并调用了一个 Step Functions 工作流。借助 AWS Lambda 函数,此工作流随后删除了已公开的 IAM 访问密钥,汇总了已公开的密钥的近期 API 活动,并将摘要消息发送给一个 Amazon SNS 主题,以便按此顺序通知订阅者。请在此查看此实际示例。

在源 S3 存储桶和目标 S3 存储桶之间同步数据

您可以使用 Amazon S3 托管静态网站,并使用 Amazon CloudFront 面向全球分发内容。作为网站拥有者,您可能需要两个 S3 存储桶来上传您的网站内容:一个用于暂存和测试,另一个用于生产。您希望使用来自暂存存储桶的所有更改来更新生产存储桶,而不必在每次更新网站时都从头创建新的存储桶。在此示例中,Step Functions 工作流在两个并行、独立的循环中执行任务:一个循环负责将源存储桶中的所有对象复制到目标存储桶,但忽略已经存在于目标存储桶中的对象。另一个循环负责在目标存储桶中删除没有在源存储桶中找到的任何对象。一组 AWS Lambda 函数负责执行各个步骤:验证输入、获取来自源存储桶和目标存储桶的对象的列表,以及批量复制或删除对象。请在此详细查看此示例及其代码。请在此详细了解如何在您的状态机中创建并行执行分支。

数据处理和 ETL 编排

构建用于对数据进行流式处理的数据处理管道

在此示例中,Freebird 构建了一个数据处理管道,以实时处理来自多个来源的 Webhook 数据,并运行 Lambda 函数以修改这些数据。在此应用场景中,通过 Amazon API Gateway 将来自多个第三方应用程序的 Webhook 数据发送到 Amazon Kinesis 数据流。一个 AWS Lambda 函数从此 Kinesis 流提取数据,并触发一个“快速”工作流。此工作流完成一系列步骤,以验证、处理和标准化这些数据。最后,一个 Lambda 函数会更新 SNS 主题,这样会通过一个 SQS 队列向后续步骤的下游 Lambda 函数发送消息。使用此工作流,每秒可执行最多 10 万次调用,以扩展数据处理管道。

将 ETL 流程的步骤自动化

您可以使用 Step Functions,通过不同的数据来源和目标来编排 ETL 流程的所有步骤。

在此示例中,每当源 S3 存储桶中有新的数据可用时,Step Functions ETL 工作流都会刷新 Amazon Redshift。Step Functions 状态机会启动一个 AWS Batch 作业,并监控它的状态是已完成还是出错。此 AWS Batch 作业会从 Amazon S3 等来源提取 ETL 工作流 .sql 脚本,并通过一个 PL/SQL 容器刷新目标,即 Amazon Redshift。此 .sql 文件包含数据转换过程中的每个步骤的 SQL 代码。您可以使用一个 EventBridge 事件、以手动方式通过 AWS CLI 或者使用 AWS SDK 甚至自定义的自动化脚本,触发此 ETL 工作流。您可以通过 SNS 提醒管理员,它会针对工作流的任何失败步骤或在执行完工作流时触发一封电子邮件。此 ETL 工作流举例说明了您可以在哪些场景中使用“标准”工作流。请在此详细查看此示例。您可以在此通过一个示例项目详细了解如何提交 AWS Batch 作业。

并行运行一个具有多个作业的 ETL 管道

提取、加载和转换(ETL)操作会将原始数据转换为有用的数据集,并将数据转换为可行见解。

您可以使用 Step Functions 并行运行多个 ETL 作业,在这些作业中,您的源数据集可能在不同的时间可用,每个 ETL 作业只会在其对应的数据集可用时被触发。这些 ETL 作业可以由不同的 AWS 服务管理,例如 AWS Glue、Amazon EMR、Amazon Athena 或其他非 AWS 服务。
在此示例中,您有两个单独的 ETL 作业运行在 AWS Glue 上,它们会处理一个销售数据集和一个营销数据集。在处理了这两个数据集之后,第三个 ETL 作业会将前两个 ETL 作业的输出合并,以生成一个组合的数据集。Step Functions 工作流会等待数据在 S3 中可用。主要工作流按计划启动,而 EventBridge 事件处理程序需要在 Amazon S3 存储桶上进行配置,因此将销售或营销数据集文件上传到此存储桶时,状态机可能触发 ETL 作业“ProcessSales Data”或“ProcessMarketingData”,具体情况取决于哪个数据集可用。

在此详细查看此架构,以便在您的 AWS 账户中设置 ETL 编排架构。在此了解如何从 Step Functions 管理 AWS Batch 作业。

大规模数据处理

您可以使用 Step Functions 在一个数据集内迭代数千万个项,例如 JSON 阵列、S3 中的对象的列表或者 S3 存储桶中的 CSV 文件。随后,您可以以非常高的并发性并行处理这些数据。

在此示例中,Step Functions 工作流在“分布式”模式下使用一个“映射”状态来处理一个 S3 存储桶中的 S3 对象的列表。Step Functions 会迭代此对象列表,然后启动数千个同时并行运行的工作流,以处理这些项。您可以使用 Lambda 等计算服务,它们可以帮助您以所支持的任何语言编写代码。您也可以从 220 多种专门构建的 AWS 服务中进行选择,以便将它们包含在“映射”状态工作流中。执行完子工作流之后,Step Functions 可以将结果导出到一个 S3 存储桶中,并使其可供审查或进一步处理。

大规模数据处理示意图

机器学习运营

运行 ETL 作业,并构建、训练和部署机器学习模型

在此示例中,一个 Step Functions 工作流按计划运行,并由 EventBridge 触发以便每天执行一次。此工作流首先会检查 S3 中是否有新的数据可用。接下来,它会执行一个 ETL 作业,以转换这些数据。随后,它会使用 Lambda 函数为这些数据训练并部署一个机器学习模型,这些函数会触发一个 SageMaker 作业并等待完成,然后此工作流才会转到下一步。最后,此工作流会触发一个 Lambda 函数,以生成预测并将其保存到 S3。在此完成此逐步流程,以创建此工作流。

使用 AWS Step Functions 数据科学开发工具包,将机器学习工作流自动化

AWS Step Functions 数据科学开发工具包是一个开源库,您可以使用它创建工作流,以使用 Amazon SageMaker 和 AWS Step Functions 处理并发布机器学习模型。SDK 提供了一个 Python API,它涵盖了机器学习管道的每一个步骤 – 训练、调优、转换、建模和配置端点。您可以直接在 Python 中以及在 Jupyter notebook 中管理和执行这些工作流。如下示例说明了机器学习工作流的训练和转换步骤。训练步骤首先执行一个 Sagemaker 训练作业,并将模型构件输出到 S3。“保存模型”步骤会使用来自 S3 的模型构件,在 SageMaker 上创建一个模型。转换步骤首先执行一个 SageMaker 转换作业。“创建端点配置”步骤会在 SageMaker 上定义一个端点配置。“创建端点”步骤会将经过训练的模型部署到所配置的端点。请在此查看笔记本。

媒体处理

从 PDF 或图像中提取数据以进行处理

在此示例中,您将了解如何将 AWS Step Functions、AWS Lambda 和 Amazon Textract 结合使用,以扫描 PDF 发票并提取其中的文本和数据,从而处理付款事宜。Amazon Textract 会分析发票中的文本和数据,并通过 SNS、SQS 和 Lambda 为每个成功完成的作业触发一个 Step Functions 工作流。此工作流首先使用一个 Lambda 函数,将成功分析发票之后取得的结果保存到 S3。这样会触发另一个 Lambda 函数,它会处理所分析的文档,以了解是否可以为此发票处理付款事宜,并更新 DynamoDB 中的信息。如果可以处理发票,此工作流会检查是否已批准为发票付款。如果未获批准,它会通过 SNS 通知一名审查员,以手动批准此发票。如果已获批准,一个 Lambda 函数会将处理后的发票存档,并终止此工作流。请在此详细查看此示例及其代码。

使用大规模并行化对视频进行分割和转码

在此示例中,Thomson Reuters 使用 AWS Step Functions 和 AWS Lambda,构建了一个无服务器分割视频转码解决方案。他们每天需要在尽可能短的时间内,将大约 350 个新闻视频剪辑分别转码成 14 种格式。此架构使用 FFmpeg,这是一个开源的音频和视频编码器,只能依次处理各个媒体文件。为了提高吞吐量以提供最好的客户体验,此解决方案使用 AWS Step Functions 和 Amazon S3 来并行处理多个事务。它们将每个视频分割成多个 3 秒钟的片段并执行并行处理,最后将它们拼接在一起。

第一步是被称为 Locate 关键帧的 Lambda 函数,它将确定将视频区块化所需的信息。接下来,用来分割视频的 Lambda 函数会根据关键帧来分割视频,并将各个片段存储到一个 S3 存储桶中。随后,Lambda 函数会并行处理每个片段,然后将它们放到一个目标存储桶中。状态机会跟踪此处理,直到所有的 N 个片段都得到处理。然后,它会触发一个最终的 Lambda 函数,此函数会串联经过处理的各个片段,并将所获得的视频存储到一个 S3 存储桶中。

使用 Amazon MediaConvert 构建无服务器视频转码管道

在此示例中,我们将了解如何统一编排 AWS Step Functions、AWS Lambda 和 AWS Elemental MediaConvert,以便能够对按需内容执行完全托管式转码。此应用场景适合拥有大量或不同数量的源视频内容,并希望在云端处理视频内容或希望未来将工作负载迁移到云端的公司。
此按需视频解决方案具有三个子工作流,这些子工作流从一个主 Step Functions 工作流中触发。

  • 摄取:这可能是一个“快速”工作流。一个位于 S3 中的源文件会触发此工作流,以摄取数据。
  • 处理:此工作流会了解视频的高度和宽度,并创建一个编码配置文件。处理之后,通过 AWS Elemental MediaConvert 触发一个编码作业。
  • 发布:最后一个步骤会检查目标 S3 存储桶中是否有可用的资产,并通知管理员已完成作业。

AWS Step Functions 入门

访问入门页面
准备好开始使用了吗?
登录到 AWS Step Functions 控制台
还有更多问题?
联系我们