- 应用程序集成›
- AWS Step Functions›
- 常见问题
AWS Step Functions 常见问题
概述
什么是 AWS Step Functions?
AWS Step Functions 是一项完全托管式服务,使您能够更轻松地使用可视化工作流来协调分布式应用程序和微服务的组件。通过使用每个都能执行离散函数的单独组件构建应用程序,有助于您更轻松地扩展和更快速地更改应用程序。
Step Functions 是协调组件和逐步设置应用程序函数的可靠方法。Step Functions 提供图形控制台,以按照一系列步骤安排应用程序的组件并实现其可视化。这可以更容易地进行多步骤应用程序的构建和运行。
Step Functions 可以自动触发和跟踪各个步骤,并在出现错误时重试,因此您的应用程序能够按照预期顺序执行。Step Functions 可记录每个步骤的状态,因此在出现错误时,您能够更迅速地诊断并调试问题。您甚至无需编写代码就可以更改和添加步骤,因此可以更轻松地完善您的应用程序,并加快创新步伐。
使用编排设计应用程序的好处是什么?
将应用程序分解为服务组件(或步骤)可确保一个组件的故障不会导致整个系统崩溃。每个组件都可以独立扩展,并且可以更新该组件,而无需在每次更改后重新部署整个系统。
服务组件的协调包括根据应用程序的逻辑流管理执行任务的依赖关系、排程及并发性。在此类应用程序中,您可以使用服务编排来执行此操作和处理故障。
常见的 Step Functions 使用案例有哪些?
Step Functions 可帮助您处理能够细分成一系列步骤的任何计算问题或业务流程。它还有助于创建端到端工作流来管理具有相互依赖关系的作业。常见使用案例包括:
- 数据处理:将来自多个数据库的数据合并为统一的报告,优化并减少大型数据集,使之变成有用的格式,在具有高并发工作流的 Amazon Simple Storage Service(S3)存储桶中迭代和处理数百万文件,或协调多步骤分析和机器学习工作流
- 构建无服务器生成式人工智能应用程序:利用 Step Functions 编排与 Amazon Bedrock 基础模型的交互,提示串联、微调以及丰富来自 220 多项 AWS 服务的功能
- DevOps 和 IT 自动化:构建用于持续集成和持续部署的工具,或者创建自动响应基础设施更改的事件驱动型应用程序
- 电子商务:自动执行任务关键型业务流程,如订单履行和库存跟踪
- Web 应用程序:实施可靠的用户注册流程和登录身份验证
AWS Step Functions 的工作原理是什么?
使用 Step Functions 时,您可以将描述工作流的状态机定义为一系列步骤及其关系和输入输出。状态机包含许多状态,每个状态代表工作流图解中的一个步骤。
状态可以执行工作、做出选择、传递参数、发起并行执行、管理超时,或终止成功或失败的工作流。
可视化控制台能够自动按执行任务的顺序用图表显示每种状态,从而使您能够更轻松地设计多步骤应用程序。控制台会突出显示每个步骤的实时状态,并提供每次执行的详细历史记录。
有关更多信息,请参阅《Step Functions 开发人员指南》中的 Step Functions 的工作原理。
Step Functions 如何连接到我的资源?
您可以使用服务集成或任意使用活动任务的自行管理的应用程序组件编排任意 AWS 服务。
服务集成可帮助您构造对 AWS 服务的调用,并将响应包含在工作流中。AWS–SDK 服务集成可帮助您直接从工作流中 200 多项服务的 9000 多种 AWS API 操作中调用其中一项。
经过优化的服务集成会进一步简化通用服务(例如 AWS Lambda、Amazon Elastic Container Service(ECS)、AWS Glue 或 Amazon EMR)的使用,并具备 IAM 策略生成和 RunAJob 模式的功能,这些功能将自动等待异步任务的完成。
活动任务包含与在您所选位置(包括 Amazon Elastic Compute Cloud(EC2)中、Amazon ECS 中、移动设备中或本地服务器中)内运行的活动进行集成。活动工作程序轮询 Step Functions 以进行工作,从 Step Functions 中获取任何输入,使用您的代码执行工作,并返回结果。由于活动工作程序请求工作,因此更容易使用部署在防火墙后面的工作程序。
Step Functions 状态机可以包含服务集成和活动任务的组合。Step Functions 应用程序可以将在数据中心内运行的活动工作程序和在云中运行的服务任务结合起来。数据中心的工件与基于云的服务任务将继续照常运行。
如何开始使用 Step Functions?
您可以通过多种方式开启使用 Step Functions:
- 在 Step Functions 控制台中探索示例项目
- 阅读《Step Functions 开发人员指南》
- 试试我们的 10 分钟教程
Step Functions 采用什么语言?
AWS Step Functions 状态机是使用声明性 Amazon States Language 在 JSON 中定义的。
要创建活动工作程序,您可以使用任意编程语言,只要您能够使用 Web 服务 API 与 Step Functions 通信即可。
为方便起见,您可以您选择的语言使用 AWS 开发工具包。Lambda 支持使用 Node.js(JavaScript)、Python、Golang(Go)和 C#(使用 .NET Core 运行时和其他语言)编写的代码。有关 Lambda 编程模型的更多信息,请参阅 Lambda 开发人员指南。
我的工作流有一些标准工作流的属性,也有一些快速工作流的属性。如何才能最好地利用两者?
您可以组合两种工作流类型:
- 通过将快速工作流作为标准工作流的子工作流运行:快速工作流在父编排工作流中从任务状态调用,从父编排工作流的角度来看,它将作为整体成功或失败。它受该任务的父编排工作流重试策略约束。
- 通过从一个快速工作流内调用快速工作流,只要所有工作流都不超过父工作流的持续时间限制:如果您的使用案例具有长期运行或一次性和短期高速步骤的组合,您可以选择用此方式分解您的工作流。
Step Functions 如何支持并行性?
Step Functions 包括动态并行的地图状态。地图状态有两种操作模式,内联和分布式,这两种模式对一组项执行相同的步骤。内联模式下的地图可以支持 40 个并行分支的并发性,以及 25000 个事件或工作流中大约 6500 个状态转换的执行历史限制。在分布式模式下,您可以并发运行最高 10000 个并行分支。分布式地图已针对 Amazon S3 进行了优化,帮助您更轻松地迭代 S3 存储桶中的对象。请参阅“集成”部分中的常见问题解答。分布式地图的迭代会分为并行执行,以帮助您克服负载和执行历史限制。您还可以选择是由标准工作流(幂等)还是快速工作流(速度更快、成本更低,但不是幂等)执行每次迭代。了解有关地图状态的更多信息。
如何在 AWS Step Functions 中分配和引用变量?
现在,您可以使用新的“分配”字段定义工作流变量,然后使用 $varName 语法引用这些变量。如果 StateK 需要引用一个早期 StateA 生成的数据,在不使用变量的情况下,您必须显式传递这些数据并使它们经过所有中间状态,如果使用变量,您需要为 StateA 中的一个变量分配值,然后在 StateK 中引用此变量。
什么是 JSONata?
和 JSONPath 一样,JSONata 也是一种面向 JSON 数据的开源数据查询/转换语言,不同之处在于,JSONata 可以执行更强大的操作,例如生成日期和时间以及执行数学计算。它可以使用一种紧凑但强大的表示法表示复杂的查询。JSONata 提供了用来操作和组合数据的内置运算符和函数,并且可以使用熟悉的 JSON 对象和数组语法将查询结果格式化为任何 JSON 输出结构。
我可以在我现有的工作流中使用变量和 JSONata 吗?
符合。通过分配变量,可以将变量添加到任何现有的工作流中。通过将 "QueryLanguage":"JSONata" 声明为个别状态或整个工作流的查询语言,可以在任何现有的工作流中使用 JSONata 进行增强的数据转换。当前拥有生产工作负载的客户可以在现有的工作流中利用变量和 JSONata,他们可以选择在新工作流中使用改进后的数据指令。变量和 JSONata 引入的各项功能共同发挥作用,为新客户提供了一个更轻松的学习途径,以使他们开始在当前版本的 ASL 内使用 Step Functions。采用这种方法,将来推出的全部 Step Functions 功能都可供所有客户使用,他们无需升级工作流即可使用新版本的 ASL。
如何使用 JSONata 来操作数据?
您将使用 JSONata 而不是像现在那样使用 JSONPath 和内置函数来执行数据选择和转换。要使用 "QueryLanguage":"JSONata" 来编写 JSONata 表达式,请将它括在 {% %} 中,如下所示:"{% JSONata expression %}"。例如,您可以为今天构造一个日期,如下所示:"DateStamp": "{% $now() %}"。
"QueryLanguage":"JSONata" 如何简化数据处理?
JSONPath 使用五个主要字段(InputPath、Parameters、ResultSelector、ResultPath 和 OutputPath)的不同组合来查询和转换每个状态内的数据,这对开发人员来说很难进行推理。现在,使用 JSONata,您可以选择使用 "QueryLanguage":"JSONata" 将这五个字段替换为两个新字段(Arguments 和 Output)。新的 Arguments 字段为构造要发送到 API 或子工作流的值提供了额外的功能,而新的 Output 字段为构造状态输出提供了额外的功能。这两个字段都接受 JSONata 以进行数据操作。"QueryLanguage":"JSONata" 提供了一组简化的规则,这些规则不再使用“.$”约定来命名字段,而是将 JSONata 表达式括在 {% %} 中。现在,您可以使用新的 Condition 字段将选择状态条件写入到单行中。Condition 字段接受布尔值或字符串值,此值必须是 JSONPath 或 JSONata 表达式,具体情况取决于 QueryLanguage 设置。
比较
分别应在何时使用 Step Functions 与Amazon Simple Queue Service (SQS)?
当您需要在开发高度可扩展且可审查的应用程序的过程中协调各个服务组件时,则应使用 AWS Step Functions。当您需要可靠、高度可扩展的托管队列在各项服务之间发送、存储和接收消息时,则应使用 Amazon Simple Queue Service (Amazon SQS)。
- Step Functions 跟踪应用程序中的所有任务和事件,SQS 要求您实施自己的应用程序级跟踪,特别是在应用程序使用多个队列时。
- Step Functions 控制台和可见性 API 可提供以应用程序为中心的视图,允许您搜索执行任务、深入查看执行任务的详细信息并管理执行任务。SQS 会要求您自行实施额外功能。
- Step Functions 提供的一些功能可加速应用程序开发,如在各项任务之间传递数据和灵活分配任务,而 SQS 则需要您实现应用程序级功能。
- Step Functions 具有开箱即用的功能,可以构建工作流以协调您的分布式应用程序。SQS 允许您构建基本的工作流程,但功能有限。
分别应在何时使用 Step Functions 与Amazon Simple Workflow Service(SWF)?
您应该考虑针对所有新应用程序使用 Step Functions,因为它可以提供更富有成效且灵活的方法,以便您使用可视化工作流协调应用程序组件。如果您需要外部信号来干预流程或希望启动能够向父流程返回结果的子流程,则应考虑使用 Amazon Simple Workflow Service(Amazon SWF)。
借助 SWF,您可以编写决策程序以将活动步骤与决策步骤分开,而不是采用描述性 JSON 的格式编写状态机。这使您可以完全控制您的编排逻辑,但也会增加开发应用程序的复杂程度。您可以使用自己选择的编程语言编写决策程序,也可以使用 Flow Framework,以便使用为您构建异步交互的编程结构。
Step Functions 的 HTTPS 端点集成如何与 Amazon EventBridge 的 API 目标关联?
Amazon EventBridge 是一项无服务器服务,它使用事件将应用程序组件连接在一起,让开发人员更轻松地构建可扩展的事件驱动型应用程序。API 目标是 EventBridge 的一项功能,可让您创建规则,将事件转发到第三方端点,从而将事件生产者和使用者解耦。
AWS Step Functions 的 HTTPS 端点集成可让您调用基于 HTTPS 的服务并接收响应,该响应可用于根据您的业务逻辑控制执行流程。Amazon EventBridge 专注于路由事件,而 Step Functions 侧重于编排工作流程和状态管理。EventBridge API 目标和 Step Functions 的 HTTPS 端点集成可以支持身份验证连接,因此您可以在服务之间重复使用身份验证凭证。这两种服务可以结合使用以构建高度可扩展和强大的分布式应用程序。
集成
Step Functions 如何连接和协调其他 AWS 服务?
使用 Step Functions 创建的工作流可以使用服务集成连接和协调 200 多项 AWS 服务。 例如,您可以:
- 调用 AWS Lambda 函数
- 运行 ECS 或 AWS Fargate 任务
- 从 Amazon DynamoDB 表中获取现有项目或将新项目放入 DynamoDB 表中
- 提交 AWS Batch 作业并等待其完成
- 调用 Amazon Bedrock 基础模型
- 将消息发布到 SNS 主题
- 将消息发送到 Amazon SQS 队列
- 启动 AWS Glue 作业运行
- 创建 Amazon SageMaker 作业以训练机器学习模型或批量转换数据集
要了解有关使用 Step Functions 连接到其他 AWS 服务的更多信息,请参阅《Step Functions 开发人员指南》。您还可以在运行应用程序的状态机中创建任务,请参阅概览部分中的常见问题“Step Functions 如何连接到我的资源?”
Step Functions 如何与第三方应用程序集成?
使用 AWS Step Functions 的 HTTPS 端点集成,可以直接与基于 HTTP 的服务(包括 SaaS 应用程序)集成。使用可视化界面,可以构建和编排由 AWS 服务和 SaaS 应用程序组成的分布式应用程序。
如何测试、分析或调试我的执行?
可以使用 TestState API 来测试工作流程的单个步骤,从而缩短反馈周期以加速开发。TestState 可让您直接调用服务和端点,修改输入以模仿不同的场景,以及查看响应。可以通过 Workflow Studio 访问 TestState,这样无需部署工作流程即可在构建时轻松进行测试。TestState 接受单一状态定义和输入,然后同步返回状态输出以及中间数据转换。运行工作流程后,可以通过 Amazon CloudWatch Logs、AWS X-Ray 分析和调试执行,以及通过可视化操作员体验直接在 Step Functions 控制台中分析和调试执行,从而帮助您快速识别问题区域。
Step Functions 如何帮助我在 Amazon S3 中处理大型数据集?
您可以在分布式模式下使用地图状态创建工作流,以执行大规模处理数据,如日志、媒体文件、销售事务或 IoT 传感器数据。Step Functions 将遍历项目并立即启动并行工作流执行,从而允许您大规模构建按需数据处理。分布式地图状态已为可用于 S3 进行了优化。您可以指定一个带有筛选条件的 S3 存储桶、一个 S3 清单文件、存储在 S3 中的 JSON 集合或 CSV 文件作为工作流的输入。您还可以为分布式地图的执行输出指定 S3 存储桶。
Step Functions 如何与 Amazon API Gateway 配合使用?
您可以将 Step Functions API 与 Amazon API Gateway 关联,以便在将 HTTPS 请求发送到您定义的 API 方法时,这些 API 会调用您的状态机。
您可以使用 API Gateway API 启动 Step Functions 状态机,该状态机可以协调分布式后端应用程序的组件。然后,您将人员活动任务集成到应用程序的各个步骤中,例如审批请求和响应。
您也可以对应用程序使用的服务 API 执行无服务器异步调用。有关更多信息,请试看我们的教程使用 API Gateway 创建 Step Functions API。
如何将 AWS Step Functions 与 Amazon EventBridge 配合使用?
协调和编排是分布式服务如何相互通信的两种不同模型。在编排中,通信受到更严格的控制,编排服务 Step Functions 将协调调用服务的交互和顺序。
协调无需严格控制即可实现通信。使用 Amazon EventBridge,事件在服务之间流动,而无需集中协调。许多应用程序针对不同的用例同时使用协调和编排。
您可以如何结合使用 Step Functions 和 EventBridge 的示例包括使用 EventBridge Scheduler 发送事件或创建计划以触发 AWS Step Functions 工作流程,然后在工作流程的不同步骤发出事件。
什么是 AWS Step Functions 与AWS Lambda
AWS Lambda 是一项无服务器事件驱动型计算服务,该服务使您可以运行几乎任何类型的应用程序或后端服务的代码,而无需预置或管理服务器。Step Functions 是一种无服务器编排服务,可助您轻松地将多个 Lambda 函数协调到易于调试和更改的灵活工作流中。Step Functions 能够触发和跟踪应用程序的每个步骤,使您的 Lambda 函数不受其他逻辑的影响。
AWS Step Functions 是否无服务器?
是,Step Functions 是一项无服务器编排服务。Step Functions 可自动扩展操作和底层计算,以运行应用程序的步骤,从而来响应不断变化的工作负载。Step Functions 具有内置容错能力,可在各区域中跨过多个可用区维护服务容量,从而保护应用程序免受单个机器或数据中心故障的影响。这有助于确保服务本身及其操作的应用程序工作流具有高可用性。
Step Functions 提供按使用量付费的计费模式,以提高敏捷性和优化成本。了解有关 Step Functions 定价的更多信息。
如何对 Step Functions 使用日志记录和监控?
AWS Step Functions 将指标发送到 Amazon CloudWatch 和 AWS CloudTrail,以监控应用程序。CloudWatch 会收集和跟踪指标、设置警报并自动对 AWS Step Functions 中的更改做出反应。
CloudTrail 会将对 Step Functions 进行的所有 API 调用捕获为事件,包括从 Step Functions 控制台进行的调用,以及包括从代码调用到 Step Functions API 调用在内的所有调用。Step Functions 还支持工作流中每项集成服务的 CloudWatch Events 托管式规则,并将根据需要在您的 AWS 账户中创建和管理 CloudWatch Events 规则。
有关更多信息,请参阅《Step Functions 开发人员指南》中的监控和日志记录。
如果我的快速工作流因重试次数耗尽或非托管式异常而失败,会发生什么情况?
原定设置下,快速工作流会将所有结果报告给 CloudWatch Logs,包括工作流输入、输出和已完成的步骤。您可以选择不同级别的日志记录以便只记录日志错误,而且您可以选择不记录输入和输出。耗尽重试次数或发生非托管异常的工作流应从头开始重新运行。
Step Functions 如何帮助您构建生成式人工智能应用程序?
Step Functions 具有经过优化的 Amazon Bedrock 集成。可以使用自然语言直接从 Step Functions 的工作流程调用 Bedrock 的基础模型。这使您能够:
- 使用生成式人工智能功能丰富由 Step Functions 处理的数据,以降低处理数据的复杂性,例如文本摘要、图像生成或个性化。
- 从数据库中检索信息,例如您的最新产品定价和用户个性化数据,并使用 Step Functions 内置函数将其注入提示,确保 LLM 使用最新的数据来提高响应的准确性。
- 使用如下方法生成嵌入:让 Step Functions 浏览文档、提取数据、对文档进行分块,然后通过多步过程将数据从数字文本转换为嵌入。此过程可以安排为重复过程。
- 使用 Step Functions 工作流程进行提示串联。可以编排多个 LLM 调用,并为链的每个阶段选择最佳模型,形成定制的处理阶段链,从基础模型中策划出更具情境感知能力和更准确的响应。
- 使用生成式人工智能工作流程建立人在回路(HITL),以调节答案以避免产生幻觉,或者构建逻辑来处理基础模型不支持的响应。
安全性
我可以在未连接到互联网的情况下从我的 Amazon VPC 后面的资源访问 Step Functions 吗?
Step Functions 还支持使用 AWS PrivateLink 的 VPC 端点(VPCE)。您可以通过支持 VPC 的 AWS Lambda 函数和其他 AWS 服务访问 Step Functions,而无需遍历公有 Internet。
有关更多信息,请参阅《Step Functions 开发人员指南》中的“适用于 Step Functions 的 Amazon VPC 端点”。
合规性
Step Functions 支持的合规性标准是什么?
Step Functions 符合 HIPAA、FedRAMP、SOC、GDPR 等通用合规性标准。请参阅 AWS 云安全性站点,以获取支持的合规性标准的详细列表。