Amazon Step Functions 支持使用状态机构建可扩展的分布式应用程序。时至今日,在 Step Functions 上构建工作流仍需要您学习和了解 Amazon 状态语言 (ASL)。最近,我们推出了 Workflow Studio,这是一种低代码可视化工具,可帮助您通过引导式交互界面学习 Step Functions,并支持更快地创建工作流原型并构建工作流。
Amazon Step Functions
https://aws.amazon.com/step-functions
Amazon 状态语言
https://docs.aws.amazon.com/step-functions/latest/dg/concepts-amazon-states-language.html
2016 年 12 月推出 Step Functions 的时候,我还在开展向无服务器迁移的工作。我的团队将所有业务逻辑从为传统环境构建的应用程序移到了无服务器架构。尽管我们设法让函数只实现一个目标,但当我们将应用程序的所有状态管理置于函数中时,它们变得非常复杂。当我看到 Step Functions 推出时,我意识到它们将降低我们正在构建的无服务器应用程序的复杂性。美中不足的是,我花了很多时间使用 ASL 学习和编写状态机,学习如何调用不同的 Amazon Web Services 服务,以及执行状态机所需的流操作。我们用了数周的时间,并执行了大量测试才得以很好地运用该工具。
Step Functions 在可视化分布式应用程序中的进程方面非常出色,但是开发这些状态机并不是一个可视化的过程。Workflow Studio 使开发人员可以轻松地构建无服务器工作流。它使开发人员能够专注于高价值的业务逻辑,同时缩短了为工作流定义编写配置代码和构建数据转换所需的时间。
Workflow Studio 非常适合不熟悉Step Functions 的开发人员,因为它不仅缩短了构建第一个工作流的时间,同时还为开发人员提供了一个通过实践进行学习的加速学习路径。Workflow Studio 对于具有构建工作流经验的开发人员也非常有用,因为他们现在可以使用可视化工具更快地开发工作流。例如,您可以使用 Workflow Studio 创建工作流原型,并快速与利益攸关方共享。或者,您可以使用 Workflow Studio 设计状态机的样板。当您使用 Workflow Studio 时,不需要在 Amazon 账户中部署所有资源。您可以构建状态机,然后在准备就绪时使用不同的操作加以完善。
Workflow Studio 简化了电子商务平台、金融交易处理系统或电子医疗服务等企业应用程序的构建工作。它通过将 Amazon 服务组装到工作流中,消除了构建容错、可扩展应用程序的复杂性。由于 Workflow Studio 在可视化工作流中直观呈现了 Amazon 服务的许多功能,因此可以轻松地对 Amazon 服务和 API 的调用进行排序和配置,并转换流经工作流的数据。
????想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注在上海、北京、深圳三地举办的2021亚马逊云科技中国峰会!点击图片报名吧~
使用 Workflow Studio 构建工作流
假设您需要构建一个在创建账户时验证数据的系统。如果输入数据正确,系统会将记录保存在持久性存储中,并向管理员发送一封电子邮件以确认账户已成功创建。如果由于验证错误而无法创建账户,则系统不会存储数据,并会发送一封电子邮件,通知管理员创建账户时出现问题。
有很多方法可以解决此问题,但是如果您想使用最少的代码构建应用程序,并想使用 Amazon 提供的所有托管服务,则应使用 Workflow Studio 设计状态机并构建与所有托管服务的集成。
我将向您展示使用 Workflow Studio 创建状态机有多简单。要开始该流程,请转到 Step Munctions 控制台并构建状态机。您将看到一个选项,可供您开始使用 Workflow Studio 直观地设计新的状态机。
您可以开始在 Workflow Studio 中构建状态机。在左侧窗格 States Browser (状态浏览器) 中,您可以查看和搜索可用的操作和流状态。操作是可以使用 Amazon 服务执行的操作,例如调用 Amazon Lambda 函数、使用 Amazon API Gateway 发出请求和向 Amazon Simple Notification Service (SNS) 主题发送消息。流是可用于使工作流适合使用案例的状态类型。
Amazon Lambda
https://aws.amazon.com/lambda/
Amazon API Gateway
http://aws.amazon.com/apigateway
Amazon Simple Notification Service (SNS)
https://aws.amazon.com/sns/
以下是一些可用的流状态:
Choice:添加 if-then-else 逻辑。
Parallel:添加并行分支。
Map:添加 for-each 循环。
Wait:延迟特定的时间。
在页面中心,可以看到当前正在构建的状态机。
要构建账户验证程序工作流,您需要:
一个调用 Lambda 函数(验证为创建账户而提供的数据)的任务。
一个将项目放入 DynamoDB 表的任务。
两个将消息放入 SNS 主题的任务。
一个 choice 流状态,根据 Lambda 函数的结果决定要采取的操作。
创建工作流时,您无需提前拥有所有 Amazon 资源即可开始构建状态机。您可以先构建状态机,稍后再将定义添加到资源。或者,正如我们要在本博客文章中所做的那样,在开始构建状态机之前,您可以在 Amazon 账户中部署所有 Amazon Web Services 资源。您可以从此 Serverless Application Model 模板将所需的资源部署到 Amazon 账户中。创建并部署这些资源后,您可以继续执行本文中的其他步骤。
此 Serverless Application Model
https://github.com/awslabs/serverless-application-model
配置 Lambda 函数
工作流的第一步是 Lambda 函数。要将其添加到状态机,只需将 Actions (操作) 列表中的 Invoke (调用) 操作拖到 Workflow Studio 的中心即可(如步骤 1 所示)。可以在右侧窗格中编辑函数的配置。例如,可以更改名称(如步骤 2 所示)。此外,还可以编辑从此账户中部署的函数列表中应调用哪个 Lambda 函数(如步骤 3 所示)。完成后,可以编辑此任务的输出(如步骤 4 所示)。
配置任务的输出非常重要,因为这些值会作为输入传递到下一状态。我们将仅使用所需信息构建一个结果对象(在本用例中,如果账户有效的情况下)。首先,清除 Filter output with OutputPath (使用 OutputPath 筛选输出)(如步骤 1 所示)。然后,您可以选择 Transform result with Result Selector (使用结果选择器转换结果),然后添加步骤 2 中所示的 JSON。接下来,如果想要将当前状态的输入与输出合并,并将其作为输入发送至下一状态,请选择 Combine input and result with ResultPath (使用 ResultPath 将输入与结果合并)(如步骤 3 所示)。我们需要此状态的输入,因为输入是账户信息。如果验证成功,我们需要将该数据存储在一个 DynamoDB 表中。
如果需要了解每个转换的作用,请选择每个转换中的 Info (信息) 链接,了解相关信息。
配置选择状态
配置 Lambda 函数后,您需要添加一个选择状态。选择将使用选择规则来验证输入。根据应用这些规则所产生的结果,状态机会导向不同的执行路径。
下图显示的是添加选择状态的工作流。在步骤 1 中,从流菜单中拖动它。在步骤 2 中,为它输入一个名称。在步骤 3 中,可以定义规则。在此使用案例中,有一个带特定条件的规则。
此规则的条件将之前状态的输出结果与布尔常量进行比较。如果之前的状态操作返回的值为 true,则执行该规则。这是正确路径。在此示例中,您希望验证 Lambda 函数的结果。如果函数验证输入数据,它会返回“validated is equals to true”,如此处所示。
如果规则不适用,则选择状态将运行默认分支。这是错误路径。
配置错误路径
出现错误时,您希望发送电子邮件,通知管理员无法创建账户这一错误。您应该已经在博文的前面创建了 SNS 主题。确保您使用 SNS 主题中配置的电子邮件地址接收此主题的电子邮件订阅。
要添加发布消息的 SNS 任务,请首先搜索 SNS:Publish 任务(如步骤 1 所示),然后将其拖到状态机(如步骤 2 所示)。将 Fail 状态流拖到状态机(如步骤 3 所示),这样在此分支执行完成后,状态机就会处于 Fail 状态。
Workflow Studio 中有一项非常好用的功能,那就是可以拖动状态机的不同状态,并将它们放到工作流的不同部分。
现在,您可以配置 SNS 任务,进行消息发布。首先,更改状态名称(如步骤 4 所示)。从 Amazon 账户中部署的主题中选择主题(如步骤 5 所示)。最后,将电子邮件中要发送的消息更改为适合您使用案例的消息(如步骤 6 所示)。
配置正确路径
对于正确路径,您希望将账户信息存储在 DynamoDB 表中,然后使用之前部署的 SNS 主题发送电子邮件。为此,请将 DynamoDB:PutItem 任务(如步骤 1 所示)和 SNS:Publish 任务(如步骤 2 所示)添加到状态机中。您可以按照与错误路径类似的方式配置 SNS:Publish 任务。您只需发送不同的消息即可。为此,您可以从错误路径中复制状态,将其拖到正确位置,然后使用新消息对它进行修改。
DynamoDB:PutItem 任务将项目放入 DynamoDB 表中。这项任务处理起来非常方便,因为我们不需要在 Lambda 函数内执行此操作。要配置此任务,首先要更改其名称(如步骤 3 所示)。然后,您需要配置 API 参数(如步骤 4 所示),以便将正确的数据放入 DynamoDB 表。
这些是用于此特定项目(账户)的 API 参数:
1 "TableName": "<THE NAME OF YOUR TABLE>",
2 "Item": {
3 "id": {
4 "S.$": "$.Name"
5 },
6 "mail": {
7 "S.$": "$.Mail"
8 },
9 "work": {
10 "S.$": "$.Work"
11 }
12 }
13}
14JSON
保存并执行状态机
Workflow Studio 为您创建状态机的 ASL 定义,不过您可以随时编辑 ASL 定义并在需要编辑状态机时返回到可视化编辑器。
现在状态机已准备就绪,可以运行第一次执行了。保存它,并开启新执行。开启新执行时,将显示一条消息,要求向状态机输入事件。状态机的执行取决于事件属性,确保此事件的属性名称为 Name、Mail 和 Work。
运行状态机后,执行情况一目了然。它会向您显示运行执行的所有步骤。在每个步骤中,您都可以看到步骤输入和步骤输出。这对于调试和微调状态机非常有用。
现已推出
我们的 Workflow Studio 路线图提供了很多很棒的功能。尽管细节可能会发生变化,但我们目前正在努力实现创建、运行甚至调试工作流执行的可视化。敬请关注更多信息,并随时向我们发送反馈。
Workflow Studio 现已在所有推出 Step Functions 的 Amazon Web Services区域提供。
复制以下链接,尝试使用,并了解更多信息
https://console.aws.amazon.com/states/home?/statemachines/
听说,点完下面4个按钮
就不会碰到bug了!